vbo: yet tighter still usage of FLUSH_NEED_CURRENT
authorKeith Whitwell <keithw@vmware.com>
Mon, 9 Mar 2009 14:40:34 +0000 (14:40 +0000)
committerKeith Whitwell <keithw@vmware.com>
Mon, 9 Mar 2009 14:40:34 +0000 (14:40 +0000)
Previous change broke redbook/polys and probably others.  I'm fairly
sure that drivers like r300 don't need to touch
ctx->Driver.NeedVertices, but this code is incredibly fragile and I'm
not confident about removing it from there.  Hopefully this gets
things working again.

src/mesa/vbo/vbo_exec_api.c

index 6402745ab62ecaf59fc900dd1c1015555582e5da..5d35ec9c1114fc3b136e7c280dff1db5ed4dad31 100644 (file)
@@ -749,7 +749,7 @@ void vbo_exec_BeginVertices( GLcontext *ctx )
    vbo_exec_vtx_map( exec );
 
    assert((exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) == 0);
-   exec->ctx->Driver.NeedFlush = FLUSH_UPDATE_CURRENT;
+   exec->ctx->Driver.NeedFlush |= FLUSH_UPDATE_CURRENT;
 }
 
 void vbo_exec_FlushVertices_internal( GLcontext *ctx, GLboolean unmap )
@@ -783,9 +783,9 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
 
    /* Need to do this to ensure BeginVertices gets called again:
     */
-   if (flags & FLUSH_UPDATE_CURRENT) {
-      assert(exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT);
+   if (exec->ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) {
       _mesa_restore_exec_vtxfmt( ctx );
+      exec->ctx->Driver.NeedFlush &= ~FLUSH_UPDATE_CURRENT;
    }
 
    exec->ctx->Driver.NeedFlush &= ~flags;