vbo: stricter checks on Driver.NeedFlush
authorKeith Whitwell <keithw@vmware.com>
Mon, 9 Mar 2009 12:17:28 +0000 (12:17 +0000)
committerKeith Whitwell <keithw@vmware.com>
Mon, 9 Mar 2009 12:18:51 +0000 (12:18 +0000)
This variable is being used in the r300 driver to trigger a flush under
circumstances unrelated to the use in the vbo module.  Tighten up the
checks in vbo so as to avoid conflict with r300.

Reported by Maciej Cencora <m.cencora@gmail.com>

src/mesa/vbo/vbo_exec_api.c

index a1e66ae..6402745 100644 (file)
@@ -748,7 +748,7 @@ void vbo_exec_BeginVertices( GLcontext *ctx )
    if (0) _mesa_printf("%s\n", __FUNCTION__);
    vbo_exec_vtx_map( exec );
 
-   assert(exec->ctx->Driver.NeedFlush == 0);
+   assert((exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) == 0);
    exec->ctx->Driver.NeedFlush = FLUSH_UPDATE_CURRENT;
 }
 
@@ -783,10 +783,12 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
 
    /* Need to do this to ensure BeginVertices gets called again:
     */
-   _mesa_restore_exec_vtxfmt( ctx );
+   if (flags & FLUSH_UPDATE_CURRENT) {
+      assert(exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT);
+      _mesa_restore_exec_vtxfmt( ctx );
+   }
 
-   assert(exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT);
-   exec->ctx->Driver.NeedFlush = 0;
+   exec->ctx->Driver.NeedFlush &= ~flags;
 }