From: Eric Anholt Date: Tue, 31 Jul 2012 21:28:05 +0000 (-0700) Subject: mesa: Add support for glUniformBlockBinding() in display lists. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5fc5b29a543a7a229bf03f8f9f37ed4c592a67e7;p=mesa.git 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 --- 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);