Skip to content
Snippets Groups Projects
Commit 9f1a4a63 authored by Emma Anholt's avatar Emma Anholt
Browse files

mesa: Add support for glGetActiveUniformsiv on non-UBO pnames.


We'll need to propagate the UBO fields to the uniform storage records
before we can handle the other pnames.

Reviewed-by: default avatarIan Romanick <ian.d.romanick@intel.com>
parent acfbdfcb
No related branches found
No related tags found
Loading
...@@ -74,6 +74,68 @@ _mesa_GetActiveUniformARB(GLhandleARB program, GLuint index, ...@@ -74,6 +74,68 @@ _mesa_GetActiveUniformARB(GLhandleARB program, GLuint index,
} }
} }
extern "C" void GLAPIENTRY
_mesa_GetActiveUniformsiv(GLuint program,
GLsizei uniformCount,
const GLuint *uniformIndices,
GLenum pname,
GLint *params)
{
GET_CURRENT_CONTEXT(ctx);
struct gl_shader_program *shProg;
GLsizei i;
shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniform");
if (!shProg)
return;
if (uniformCount < 0) {
_mesa_error(ctx, GL_INVALID_VALUE,
"glGetUniformIndices(uniformCount < 0)");
return;
}
for (i = 0; i < uniformCount; i++) {
GLuint index = uniformIndices[i];
const struct gl_uniform_storage *uni = &shProg->UniformStorage[index];
if (index >= shProg->NumUserUniformStorage) {
_mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniformsiv(index)");
return;
}
switch (pname) {
case GL_UNIFORM_TYPE:
params[i] = uni->type->gl_type;
break;
case GL_UNIFORM_SIZE:
/* array_elements is zero for non-arrays, but the API requires that 1 be
* returned.
*/
params[i] = MAX2(1, uni->array_elements);
break;
case GL_UNIFORM_NAME_LENGTH:
params[i] = strlen(uni->name) + 1;
break;
case GL_UNIFORM_BLOCK_INDEX:
case GL_UNIFORM_OFFSET:
case GL_UNIFORM_ARRAY_STRIDE:
case GL_UNIFORM_MATRIX_STRIDE:
case GL_UNIFORM_IS_ROW_MAJOR:
_mesa_problem(ctx, "FINISHME: glGetActiveUniformsiv(pname)");
params[i] = -1;
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glGetActiveUniformsiv(pname)");
return;
}
}
}
static bool static bool
validate_uniform_parameters(struct gl_context *ctx, validate_uniform_parameters(struct gl_context *ctx,
struct gl_shader_program *shProg, struct gl_shader_program *shProg,
......
...@@ -616,6 +616,7 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec) ...@@ -616,6 +616,7 @@ _mesa_init_shader_uniform_dispatch(struct _glapi_table *exec)
/* GL_ARB_uniform_buffer_object / GL 3.1 */ /* GL_ARB_uniform_buffer_object / GL 3.1 */
SET_GetUniformIndices(exec, _mesa_GetUniformIndices); SET_GetUniformIndices(exec, _mesa_GetUniformIndices);
SET_GetActiveUniformsiv(exec, _mesa_GetActiveUniformsiv);
#endif /* FEATURE_GL */ #endif /* FEATURE_GL */
} }
...@@ -149,6 +149,13 @@ extern void GLAPIENTRY ...@@ -149,6 +149,13 @@ extern void GLAPIENTRY
_mesa_GetActiveUniformARB(GLhandleARB, GLuint, GLsizei, GLsizei *, _mesa_GetActiveUniformARB(GLhandleARB, GLuint, GLsizei, GLsizei *,
GLint *, GLenum *, GLcharARB *); GLint *, GLenum *, GLcharARB *);
extern void GLAPIENTRY
_mesa_GetActiveUniformsiv(GLuint program,
GLsizei uniformCount,
const GLuint *uniformIndices,
GLenum pname,
GLint *params);
extern void GLAPIENTRY extern void GLAPIENTRY
_mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *); _mesa_GetUniformfvARB(GLhandleARB, GLint, GLfloat *);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment