Removed continuity_break code, added tiny DCQ switch

The continuity_break code is rendered superfluous by the FlushGraphics and
RenderingCond pair now, and it was breaking the situation where you try to
push onto a full queue.


git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@403 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
mcmartin
2002-12-10 21:17:04 +00:00
parent d5770e4944
commit 163641baaf
6 changed files with 17 additions and 27 deletions
-4
View File
@@ -101,7 +101,3 @@ The bugs reported but not yet verified:
- In starmap, when any zone of influence is moving, the starmap cursor behaves badly
(erases what it passes over). Leaving and returning to the starmap fixes it
- Under FreeBSD, waiting on condition variables doesn't seem to
actually wait or hand control to the renderer, thus spinlocking and
crashing.
+4
View File
@@ -1,4 +1,8 @@
0.2:
- Defining DCQ_OF_DOOM lowers the DrawCommandQueue size to 512, to aid in
simulating severe overload stresses on the machine
- Removed TFB_FlushGraphics' dependency on GraphicsSem, which the new
condition variable code both breaks and makes unnecessary
- Scan tint is now cleared right after the scan, from PhracturedBlue
- Recoded the DCQ to not sit on the heap, added debugging info
- Fixed Outfit Starship and Shipyard graphics, from TDuck
@@ -77,7 +77,6 @@ FlushGraphics (void)
{
TFB_DrawCommand DrawCommand;
TFB_BatchReset ();
continuity_break = 1;
DrawCommand.Type = TFB_DRAWCOMMANDTYPE_FLUSHGRAPHICS;
DrawCommand.image = 0;
TFB_EnqueueDrawCommand(&DrawCommand);
+7 -2
View File
@@ -32,7 +32,11 @@ static Uint32 DCQ_locking_thread = 0;
// become tolerable before initiating livelock deterrence and game
// slowdown. Other constants for controlling the frameskip/slowdown
// balance may be found in sdl_common.c near TFB_FlushGraphics.
#ifdef DCQ_OF_DOOM
#define DCQ_MAX 512
#else
#define DCQ_MAX 16384
#endif
TFB_DrawCommand DCQ[DCQ_MAX];
TFB_DrawCommandQueue DrawCommandQueue;
@@ -151,16 +155,17 @@ TFB_DrawCommandQueue_Push (TFB_DrawCommand* Command)
while (DrawCommandQueue.FullSize >= DCQ_MAX - 1)
{
int old_depth, i;
fprintf (stderr, "DCQ overload (Size = %d). Sleeping until renderer is done.\n", DrawCommandQueue.Size);
fprintf (stderr, "DCQ overload (Size = %d, FullSize = %d). Sleeping until renderer is done.\n", DrawCommandQueue.Size, DrawCommandQueue.FullSize);
// Restore the DCQ locking level. I *think* this is
// always 1, but...
TFB_BatchReset ();
old_depth = DCQ_locking_depth;
for (i = 0; i < old_depth; i++)
Unlock_DCQ ();
WaitCondVar (RenderingCond);
for (i = 0; i < old_depth; i++)
Lock_DCQ ();
fprintf (stderr, "DCQ clear (Size = %d). Continuing.\n", DrawCommandQueue.Size);
fprintf (stderr, "DCQ clear (Size = %d, FullSize = %d). Continuing.\n", DrawCommandQueue.Size, DrawCommandQueue.FullSize);
}
DCQ[DrawCommandQueue.InsertionPoint] = *Command;
DrawCommandQueue.InsertionPoint = (DrawCommandQueue.InsertionPoint + 1) % DCQ_MAX;
+6 -19
View File
@@ -37,8 +37,6 @@ volatile int TransitionAmount = 255;
SDL_Rect TransitionClipRect;
int GfxFlags = 0;
volatile int continuity_break;
int
TFB_InitGraphics (int driver, int flags, int width, int height, int bpp)
@@ -511,9 +509,15 @@ TFB_ComputeFPS ()
// on slower machines. Even there, it's seems nonexistent outside of
// communications screens. --Michael
#ifdef DCQ_OF_DOOM
#define DCQ_FORCE_SLOWDOWN_SIZE 128
#define DCQ_FORCE_BREAK_SIZE 512
#define DCQ_LIVELOCK_MAX 256
#else
#define DCQ_FORCE_SLOWDOWN_SIZE 1024
#define DCQ_FORCE_BREAK_SIZE 4096
#define DCQ_LIVELOCK_MAX 2048
#endif
void
TFB_FlushGraphics () // Only call from main thread!!
@@ -548,23 +552,6 @@ TFB_FlushGraphics () // Only call from main thread!!
return;
}
if (!continuity_break) {
// TODO: a more optimal way of getting the lock on GraphicsSem..
// cannot currently use SDL_SemWait because it would break
// the usage of continuity_break
// Michael asks: Why are we locking, then releasing, the GraphicsSem?
semval = TimeoutSetSemaphore (GraphicsSem, ONE_SECOND / 10);
if (semval != 0)
{
BroadcastCondVar (RenderingCond);
return;
}
else
SDL_SemPost (GraphicsSem);
}
continuity_break = 0;
if (GfxFlags & TFB_GFXFLAGS_SHOWFPS)
TFB_ComputeFPS ();
@@ -36,7 +36,6 @@ extern SDL_Surface *TransitionScreen;
extern volatile int TransitionAmount;
extern SDL_Rect TransitionClipRect;
extern volatile int continuity_break;
extern int GfxFlags;
void ScreenOrigin (FRAME Display, COORD sx, COORD sy);