diff options
author | Eric Anholt <[email protected]> | 2012-05-01 14:07:43 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2012-07-20 10:43:44 -0700 |
commit | ddc88fbf510ee8ba35b974cc21c595e96d115cc8 (patch) | |
tree | 4b183d0294e877489d8a2746b3f228dd5b9e7daf /src/mesa/main/uniforms.c | |
parent | 093b20666d73f8fc410dc7bf168ab7197756b1f5 (diff) |
mesa: Add implementation of glGetUniformBlockIndex().
Now that we finally have a list of uniform blocks in the linked shader
program, we can tell what their indices are.
Fixes piglit GL_ARB_uniform_buffer_object/getuniformblockindex.
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/main/uniforms.c')
-rw-r--r-- | src/mesa/main/uniforms.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index 1cec5922db5..ccbd753dbec 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -524,6 +524,32 @@ _mesa_GetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name) return _mesa_uniform_merge_location_offset(index, offset); } +static GLuint GLAPIENTRY +_mesa_GetUniformBlockIndex(GLuint program, + const GLchar *uniformBlockName) +{ + GET_CURRENT_CONTEXT(ctx); + GLuint i; + struct gl_shader_program *shProg; + + if (!ctx->Extensions.ARB_uniform_buffer_object) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformBlockIndex"); + return GL_INVALID_INDEX; + } + + shProg = _mesa_lookup_shader_program_err(ctx, program, + "glGetUniformBlockIndex"); + if (!shProg) + return GL_INVALID_INDEX; + + for (i = 0; i < shProg->NumUniformBlocks; i++) { + if (!strcmp(shProg->UniformBlocks[i].Name, uniformBlockName)) + return i; + } + + return GL_INVALID_INDEX; +} + static void GLAPIENTRY _mesa_GetUniformIndices(GLuint program, GLsizei uniformCount, @@ -615,6 +641,7 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec) SET_GetnUniformdvARB(exec, _mesa_GetnUniformdvARB); /* GL 4.0 */ /* GL_ARB_uniform_buffer_object / GL 3.1 */ + SET_GetUniformBlockIndex(exec, _mesa_GetUniformBlockIndex); SET_GetUniformIndices(exec, _mesa_GetUniformIndices); SET_GetActiveUniformsiv(exec, _mesa_GetActiveUniformsiv); |