Pull locking out from HW_LOCK/UNLOCK into SpanRenderStart/Finish. Provides a
authorEric Anholt <anholt@FreeBSD.org>
Mon, 30 May 2005 08:07:03 +0000 (08:07 +0000)
committerEric Anholt <anholt@FreeBSD.org>
Mon, 30 May 2005 08:07:03 +0000 (08:07 +0000)
factor of 5+ improvement in no_rast glxgears and 2.3 in no_rast quake3 (n=1,
320x240, 16bpp, low qualities, 1ghz p3)

src/mesa/drivers/dri/mach64/mach64_span.c

index 1c9d85c74ae5dca73eb5443a6920641f35e56037..575a36486282eae08f99bfcb5924757f28c39de6 100644 (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;                   \
 #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 {                                                                        \
       }                                                                        \
    } 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;
 }