Kenneth Graunke <kenn...@whitecape.org> writes: > On 07/20/2012 03:33 PM, Eric Anholt wrote: >> Fixes piglit ARB_uniform_buffer_object/uniformbufferbinding. >> --- >> src/mesa/main/uniforms.c | 95 >> ++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 95 insertions(+) >> >> diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c >> index ccbd753..940cb07 100644 >> --- a/src/mesa/main/uniforms.c >> +++ b/src/mesa/main/uniforms.c >> @@ -41,6 +41,7 @@ >> #include "main/shaderapi.h" >> #include "main/shaderobj.h" >> #include "main/uniforms.h" >> +#include "main/enums.h" >> #include "ir_uniform.h" >> #include "glsl_types.h" >> >> @@ -583,6 +584,98 @@ _mesa_GetUniformIndices(GLuint program, >> } >> } >> >> +static void GLAPIENTRY >> +_mesa_UniformBlockBinding(GLuint program, >> + GLuint uniformBlockIndex, >> + GLuint uniformBlockBinding) >> +{ >> + GET_CURRENT_CONTEXT(ctx); >> + struct gl_shader_program *shProg; >> + >> + if (!ctx->Extensions.ARB_uniform_buffer_object) { >> + _mesa_error(ctx, GL_INVALID_OPERATION, "glUniformBlockBinding"); >> + return; >> + } >> + >> + shProg = _mesa_lookup_shader_program_err(ctx, program, >> + "glUniformBlockBinding"); >> + if (!shProg) >> + return; >> + >> + if (uniformBlockIndex >= shProg->NumUniformBlocks) { >> + _mesa_error(ctx, GL_INVALID_VALUE, >> + "glUniformBlockBinding(block index %d >= %d)", >> + uniformBlockIndex, shProg->NumUniformBlocks); >> + return; >> + } >> + >> + if (uniformBlockBinding >= ctx->Const.MaxUniformBufferBindings) { >> + _mesa_error(ctx, GL_INVALID_VALUE, >> + "glUniformBlockBinding(block binding %d >= %d)", >> + uniformBlockBinding, ctx->Const.MaxUniformBufferBindings); >> + return; >> + } >> + >> + if (shProg->UniformBlocks[uniformBlockIndex].Binding != >> + uniformBlockBinding) { >> + int i; >> + >> + FLUSH_VERTICES(ctx, _NEW_BUFFER_OBJECT); >> + shProg->UniformBlocks[uniformBlockIndex].Binding = >> uniformBlockBinding; > > I'd almost expect to see a _NEW_PROGRAM_CONSTANTS when a new uniform > buffer gets bound. Then again, that would cause re-uploading of all the > non-UBO uniforms, which is pointless and expensive. Looking at the i965 > backend, it looks like _NEW_PROGRAM_CONSTANTS mostly deals with push > constants, and your new patch for UBOs properly uses this flag. So it > should be fine. > > Everything else looks good. For the series: > Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>
Yeah, the driver has to pay attention to _NEW_BUFFER_OBJECT anyway because that signals glBufferData() changing the driver BO being referenced, so reusing that seemed good.
pgpIaHxzzzpsn.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev