mesa: Add support for glGetUniformIndices().
This is a single entrypoint that maps from a series of names to the indices of those names within the active uniforms list. Each index is like glGetUniformLocation()'s return value, except that it doesn't encode an array offset. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
@@ -524,6 +524,38 @@ _mesa_GetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name)
|
||||
return _mesa_uniform_merge_location_offset(index, offset);
|
||||
}
|
||||
|
||||
static void GLAPIENTRY
|
||||
_mesa_GetUniformIndices(GLuint program,
|
||||
GLsizei uniformCount,
|
||||
const GLchar * const *uniformNames,
|
||||
GLuint *uniformIndices)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLsizei i;
|
||||
struct gl_shader_program *shProg;
|
||||
|
||||
if (!ctx->Extensions.ARB_uniform_buffer_object) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformIndices");
|
||||
return;
|
||||
}
|
||||
|
||||
shProg = _mesa_lookup_shader_program_err(ctx, program,
|
||||
"glGetUniformIndices");
|
||||
if (!shProg)
|
||||
return;
|
||||
|
||||
if (uniformCount < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"glGetUniformIndices(uniformCount < 0)");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < uniformCount; i++) {
|
||||
unsigned offset;
|
||||
uniformIndices[i] = _mesa_get_uniform_location(ctx, shProg,
|
||||
uniformNames[i], &offset);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Plug in shader uniform-related functions into API dispatch table.
|
||||
@@ -582,5 +614,8 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec)
|
||||
SET_GetnUniformuivARB(exec, _mesa_GetnUniformuivARB);
|
||||
SET_GetnUniformdvARB(exec, _mesa_GetnUniformdvARB); /* GL 4.0 */
|
||||
|
||||
/* GL_ARB_uniform_buffer_object / GL 3.1 */
|
||||
SET_GetUniformIndices(exec, _mesa_GetUniformIndices);
|
||||
|
||||
#endif /* FEATURE_GL */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user