diff options
author | Eric Anholt <[email protected]> | 2011-09-08 16:42:39 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2011-09-19 11:51:53 -0700 |
commit | 8899f6e93c976a0abfd58d2dc7896f9984699480 (patch) | |
tree | b2e7675283524e7a0e2b81f1c0861e6d3027fb20 | |
parent | da90c8fc271d000d6a3415fcc9da066293565b35 (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.c | 45 |
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); |