diff options
author | Eric Anholt <[email protected]> | 2012-06-21 14:58:58 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2012-07-31 12:06:19 -0700 |
commit | eed967bc9c27ff911c036b1363e5303bf6c7827f (patch) | |
tree | d1c14806fbcd0bd3d4efb15b179abd628e2613c3 | |
parent | dc654370c39d6597b63ff469fc79aa1c22c079fe (diff) |
mesa: Add support for GL_ARB_ubo's glGetActiveUniformName().
This is like a stripped-down version of glGetActiveUniform that just
returns the name, since the other return values (type and size) of
that function are now meant to be handled with
glGetActiveUniformsiv().
Fixes piglit ARB_uniform_buffer_object/getactiveuniformname
Reviewed-by: Kenneth Graunke <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r-- | src/mesa/main/uniforms.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index 66522510f70..b5aaa1b25a2 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -752,6 +752,44 @@ _mesa_GetActiveUniformBlockName(GLuint program, } } +static void GLAPIENTRY +_mesa_GetActiveUniformName(GLuint program, GLuint uniformIndex, + GLsizei bufSize, GLsizei *length, + GLchar *uniformName) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_shader_program *shProg; + + if (!ctx->Extensions.ARB_uniform_buffer_object) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformBlockiv"); + return; + } + + if (bufSize < 0) { + _mesa_error(ctx, GL_INVALID_VALUE, + "glGetActiveUniformName(bufSize %d < 0)", + bufSize); + return; + } + + ASSERT_OUTSIDE_BEGIN_END(ctx); + + shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniformName"); + + if (!shProg) + return; + + if (uniformIndex >= shProg->NumUserUniformStorage) { + _mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniform(index)"); + return; + } + + if (uniformName) { + _mesa_copy_string(uniformName, bufSize, length, + shProg->UniformStorage[uniformIndex].name); + } +} + /** * Plug in shader uniform-related functions into API dispatch table. */ @@ -815,6 +853,7 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec) SET_GetActiveUniformsiv(exec, _mesa_GetActiveUniformsiv); SET_GetActiveUniformBlockiv(exec, _mesa_GetActiveUniformBlockiv); SET_GetActiveUniformBlockName(exec, _mesa_GetActiveUniformBlockName); + SET_GetActiveUniformName(exec, _mesa_GetActiveUniformName); SET_UniformBlockBinding(exec, _mesa_UniformBlockBinding); #endif /* FEATURE_GL */ |