r300: clear not_flushed OQ list after flush
authorMaciej Cencora <m.cencora@gmail.com>
Thu, 11 Jun 2009 14:00:03 +0000 (16:00 +0200)
committerMaciej Cencora <m.cencora@gmail.com>
Sat, 15 Aug 2009 13:14:24 +0000 (15:14 +0200)
src/mesa/drivers/dri/r300/r300_ioctl.c
src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
src/mesa/drivers/dri/radeon/radeon_common.c

index 7558f9e225b23b790a87375b0cf5e31e7af33bb0..da801f42e4c80f21a3907097e75fb1818237d8e2 100644 (file)
@@ -44,6 +44,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/imports.h"
 #include "main/macros.h"
 #include "main/context.h"
+#include "main/simple_list.h"
 #include "swrast/swrast.h"
 
 #include "radeon_common.h"
@@ -56,6 +57,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "radeon_reg.h"
 #include "r300_emit.h"
 #include "r300_context.h"
+#include "r300_queryobj.h"
 
 #include "vblank.h"
 
@@ -753,10 +755,19 @@ static void r300Clear(GLcontext * ctx, GLbitfield mask)
        }
 }
 
+static void r300Flush(GLcontext *ctx)
+{
+       r300ContextPtr r300 = R300_CONTEXT(ctx);
+
+       radeonFlush(ctx);
+
+       make_empty_list(&r300->query.not_flushed_head);
+}
+
 
 void r300InitIoctlFuncs(struct dd_function_table *functions)
 {
        functions->Clear = r300Clear;
        functions->Finish = radeonFinish;
-       functions->Flush = radeonFlush;
+       functions->Flush = r300Flush;
 }
index 69556923b667e6cb6faf1ebc94724e2f3739fc86..827f1d253d64aec3754ae041cda881040d07123f 100644 (file)
@@ -181,7 +181,7 @@ radeonMapBuffer(GLcontext * ctx,
     struct radeon_buffer_object *radeon_obj = get_radeon_buffer_object(obj);
 
     if (access == GL_WRITE_ONLY_ARB) {
-        radeonFlush(ctx);
+        ctx->Driver.Flush(ctx);
     }
 
     if (radeon_obj->bo == NULL) {
index 330c2c8a86e2bcd1e1d4ec21f1e7888b1d7d79cf..0614c894595b2d2f8acc61f9e965a58c1d5a6839 100644 (file)
@@ -880,7 +880,7 @@ void radeon_viewport(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei he
 
        if (!radeon->meta.internal_viewport_call && ctx->DrawBuffer->Name == 0) {
                if (radeon->is_front_buffer_rendering) {
-                       radeonFlush(ctx);
+                       ctx->Driver.Flush(ctx);
                }
                radeon_update_renderbuffers(driContext, driContext->driDrawablePriv);
                if (driContext->driDrawablePriv != driContext->driReadablePriv)
@@ -1211,7 +1211,7 @@ void rcommonInitCmdBuf(radeonContextPtr rmesa)
        rmesa->cmdbuf.size = size;
 
        radeon_cs_space_set_flush(rmesa->cmdbuf.cs,
-                                 (void (*)(void *))radeonFlush, rmesa->glCtx);
+                                 (void (*)(void *))rmesa->glCtx->Driver.Flush, rmesa->glCtx);
 
        if (!rmesa->radeonScreen->kernel_mm) {
                radeon_cs_set_limit(rmesa->cmdbuf.cs, RADEON_GEM_DOMAIN_VRAM, rmesa->radeonScreen->texSize[0]);