Pull locking out from HW_LOCK/UNLOCK into SpanRenderStart/Finish. Provides a

factor of 5+ improvement in no_rast glxgears and 2.3 in no_rast quake3 (n=1,
320x240, 16bpp, low qualities, 1ghz p3)
This commit is contained in:
Eric Anholt 2005-05-30 08:07:03 +00:00
parent c7f8d36451
commit 12eabeb3b9

View file

@ -58,6 +58,7 @@
(void) read_buf; (void) buf; (void) p
#define LOCAL_DEPTH_VARS \
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
mach64ScreenRec *mach64Screen = mmesa->mach64Screen; \
__DRIdrawablePrivate *dPriv = mmesa->driDrawable; \
__DRIscreenPrivate *driScreen = mmesa->driScreen; \
@ -87,10 +88,7 @@
#define Y_FLIP( _y ) (height - _y - 1)
#define HW_LOCK() \
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx); \
LOCK_HARDWARE( mmesa ); \
FINISH_DMA_LOCKED( mmesa ); \
#define HW_LOCK()
#define HW_CLIPLOOP() \
do { \
@ -106,8 +104,7 @@
} \
} while (0)
#define HW_UNLOCK() \
UNLOCK_HARDWARE( mmesa ) \
#define HW_UNLOCK()
@ -184,6 +181,19 @@ static void mach64DDSetBuffer( GLcontext *ctx,
}
}
static void mach64SpanRenderStart( GLcontext *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
LOCK_HARDWARE( mmesa );
FINISH_DMA_LOCKED( mmesa );
}
static void mach64SpanRenderFinish( GLcontext *ctx )
{
mach64ContextPtr mmesa = MACH64_CONTEXT(ctx);
_swrast_flush( ctx );
UNLOCK_HARDWARE( mmesa );
}
void mach64DDInitSpanFuncs( GLcontext *ctx )
{
@ -242,6 +252,8 @@ void mach64DDInitSpanFuncs( GLcontext *ctx )
swdd->WriteMonoCIPixels = NULL;
swdd->ReadCI32Span = NULL;
swdd->ReadCI32Pixels = NULL;
swdd->SpanRenderStart = mach64SpanRenderStart;
swdd->SpanRenderFinish = mach64SpanRenderFinish;
}