diff options
author | Eric Anholt <[email protected]> | 2012-07-31 14:28:05 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2012-08-07 13:54:51 -0700 |
commit | 5fc5b29a543a7a229bf03f8f9f37ed4c592a67e7 (patch) | |
tree | dd3d0a15c690ae0df3cd5754a936d9b1e2a4e5d8 /src/mesa/main | |
parent | bfa046b5f2e50a0297ecb7e325395367362c4c39 (diff) |
mesa: Add support for glUniformBlockBinding() in display lists.
Fixes piglit GL_ARB_uniform_buffer_object/dlist.
v2: Use the .ui fields instead of .i for type consistency (review by Brian
Paul)
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/dlist.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 510fd1e18b3..5a813e98ac3 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -482,6 +482,9 @@ typedef enum OPCODE_DRAW_TRANSFORM_FEEDBACK_INSTANCED, OPCODE_DRAW_TRANSFORM_FEEDBACK_STREAM_INSTANCED, + /* ARB_uniform_buffer_object */ + OPCODE_UNIFORM_BLOCK_BINDING, + /* The following three are meta instructions */ OPCODE_ERROR, /* raise compiled-in error */ OPCODE_CONTINUE, @@ -7582,6 +7585,23 @@ save_EndConditionalRender(void) } } +static void GLAPIENTRY +save_UniformBlockBinding(GLuint prog, GLuint index, GLuint binding) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_UNIFORM_BLOCK_BINDING, 3); + if (n) { + n[1].ui = prog; + n[2].ui = index; + n[3].ui = binding; + } + if (ctx->ExecuteFlag) { + CALL_UniformBlockBinding(ctx->Exec, (prog, index, binding)); + } +} + /** * Save an error-generating command into display list. @@ -8877,6 +8897,10 @@ execute_list(struct gl_context *ctx, GLuint list) CALL_EndConditionalRenderNV(ctx->Exec, ()); break; + case OPCODE_UNIFORM_BLOCK_BINDING: + CALL_UniformBlockBinding(ctx->Exec, (n[1].ui, n[2].ui, n[3].ui)); + break; + case OPCODE_CONTINUE: n = (Node *) n[1].next; break; @@ -10632,6 +10656,9 @@ _mesa_create_save_table(void) /* GL_ARB_debug_output (no dlist support) */ _mesa_init_errors_dispatch(table); + /* GL_ARB_uniform_buffer_object */ + SET_UniformBlockBinding(table, save_UniformBlockBinding); + /* GL_NV_primitive_restart */ SET_PrimitiveRestartIndexNV(table, _mesa_PrimitiveRestartIndex); |