aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2011-09-08 16:42:39 -0700
committerEric Anholt <[email protected]>2011-09-19 11:51:53 -0700
commit8899f6e93c976a0abfd58d2dc7896f9984699480 (patch)
treeb2e7675283524e7a0e2b81f1c0861e6d3027fb20
parentda90c8fc271d000d6a3415fcc9da066293565b35 (diff)
mesa: Add support for Begin/EndConditionalRender in display lists.
Fixes piglit nv_conditional_render-dlist. Reviewed-by: Brian Paul <[email protected]>
-rw-r--r--src/mesa/main/dlist.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index e8f8fe2ae65..9bba52129eb 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -459,6 +459,10 @@ typedef enum
/* GL_ARB_sync */
OPCODE_WAIT_SYNC,
+ /* GL_NV_conditional_render */
+ OPCODE_BEGIN_CONDITIONAL_RENDER,
+ OPCODE_END_CONDITIONAL_RENDER,
+
/* The following three are meta instructions */
OPCODE_ERROR, /* raise compiled-in error */
OPCODE_CONTINUE,
@@ -7384,6 +7388,35 @@ save_WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout)
}
+/** GL_NV_conditional_render */
+static void GLAPIENTRY
+save_BeginConditionalRender(GLuint queryId, GLenum mode)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_BEGIN_CONDITIONAL_RENDER, 2);
+ if (n) {
+ n[1].i = queryId;
+ n[2].e = mode;
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_BeginConditionalRenderNV(ctx->Exec, (queryId, mode));
+ }
+}
+
+static void GLAPIENTRY
+save_EndConditionalRender()
+{
+ GET_CURRENT_CONTEXT(ctx);
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ alloc_instruction(ctx, OPCODE_END_CONDITIONAL_RENDER, 0);
+ if (ctx->ExecuteFlag) {
+ CALL_EndConditionalRenderNV(ctx->Exec, ());
+ }
+}
+
+
/**
* Save an error-generating command into display list.
*
@@ -8649,6 +8682,14 @@ execute_list(struct gl_context *ctx, GLuint list)
}
break;
+ /* GL_NV_conditional_render */
+ case OPCODE_BEGIN_CONDITIONAL_RENDER:
+ CALL_BeginConditionalRenderNV(ctx->Exec, (n[1].i, n[2].e));
+ break;
+ case OPCODE_END_CONDITIONAL_RENDER:
+ CALL_EndConditionalRenderNV(ctx->Exec, ());
+ break;
+
case OPCODE_CONTINUE:
n = (Node *) n[1].next;
break;
@@ -10353,6 +10394,10 @@ _mesa_create_save_table(void)
SET_FramebufferTextureARB(table, save_FramebufferTexture);
SET_FramebufferTextureFaceARB(table, save_FramebufferTextureFace);
+ /* GL_NV_conditional_render */
+ SET_BeginConditionalRenderNV(table, save_BeginConditionalRender);
+ SET_EndConditionalRenderNV(table, save_EndConditionalRender);
+
/* GL_ARB_sync */
_mesa_init_sync_dispatch(table);
SET_WaitSync(table, save_WaitSync);