summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/r200/r200_tcl.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/r200/r200_tcl.c b/src/mesa/drivers/dri/r200/r200_tcl.c
index 41b68cc0ca0..f52e4fe9177 100644
--- a/src/mesa/drivers/dri/r200/r200_tcl.c
+++ b/src/mesa/drivers/dri/r200/r200_tcl.c
@@ -691,20 +691,30 @@ void r200TclFallback( GLcontext *ctx, GLuint bit, GLboolean mode )
GLuint oldfallback = rmesa->radeon.TclFallback;
if (mode) {
- rmesa->radeon.TclFallback |= bit;
if (oldfallback == 0) {
+ /* We have to flush before transition */
+ if ( rmesa->radeon.dma.flush )
+ rmesa->radeon.dma.flush( rmesa->radeon.glCtx );
+
if (R200_DEBUG & RADEON_FALLBACKS)
fprintf(stderr, "R200 begin tcl fallback %s\n",
getFallbackString( bit ));
+ rmesa->radeon.TclFallback |= bit;
transition_to_swtnl( ctx );
- }
+ } else
+ rmesa->radeon.TclFallback |= bit;
} else {
- rmesa->radeon.TclFallback &= ~bit;
if (oldfallback == bit) {
+ /* We have to flush before transition */
+ if ( rmesa->radeon.dma.flush )
+ rmesa->radeon.dma.flush( rmesa->radeon.glCtx );
+
if (R200_DEBUG & RADEON_FALLBACKS)
fprintf(stderr, "R200 end tcl fallback %s\n",
getFallbackString( bit ));
+ rmesa->radeon.TclFallback &= ~bit;
transition_to_hwtnl( ctx );
- }
+ } else
+ rmesa->radeon.TclFallback &= ~bit;
}
}