vbo: make flush recursion check code per-context
authorBrian Paul <brianp@vmware.com>
Tue, 1 Dec 2009 20:26:15 +0000 (13:26 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 1 Dec 2009 20:27:32 +0000 (13:27 -0700)
This fixes invalid failed assertions when running multi-threaded apps.

src/mesa/vbo/vbo_exec.h
src/mesa/vbo/vbo_exec_api.c

index 0a05b8df8947f7d7455965740f61c45057511989..98c1f363d98a64ee3fda83d79c97b06d487177ae 100644 (file)
@@ -138,6 +138,10 @@ struct vbo_exec_context
        */
       const struct gl_client_array *inputs[VERT_ATTRIB_MAX];
    } array;
+
+#ifdef DEBUG
+   GLint flush_call_depth;
+#endif
 };
 
 
index c90565eae8c726912f297ab459ad3b74445f7d61..f0a7eeadd0f8194a05d34929c0833ff52a066b63 100644 (file)
@@ -876,9 +876,8 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
 
 #ifdef DEBUG
    /* debug check: make sure we don't get called recursively */
-   static GLuint callDepth = 0;
-   callDepth++;
-   assert(callDepth == 1);
+   exec->flush_call_depth++;
+   assert(exec->flush_call_depth == 1);
 #endif
 
    if (0) _mesa_printf("%s\n", __FUNCTION__);
@@ -886,7 +885,8 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
    if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
       if (0) _mesa_printf("%s - inside begin/end\n", __FUNCTION__);
 #ifdef DEBUG
-      callDepth--;
+      exec->flush_call_depth--;
+      assert(exec->flush_call_depth == 0);
 #endif
       return;
    }
@@ -903,7 +903,8 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
    exec->ctx->Driver.NeedFlush &= ~flags;
 
 #ifdef DEBUG
-   callDepth--;
+   exec->flush_call_depth--;
+   assert(exec->flush_call_depth == 0);
 #endif
 }