mesa: Add support for most of the other pnames of glGetActiveUniformBlockiv().

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
Eric Anholt 2012-06-19 14:29:49 -07:00
parent 5a165d1f3a
commit dc654370c3
1 changed files with 30 additions and 0 deletions

View File

@ -643,6 +643,7 @@ _mesa_GetActiveUniformBlockiv(GLuint program,
GET_CURRENT_CONTEXT(ctx);
struct gl_shader_program *shProg;
struct gl_uniform_block *block;
unsigned i;
if (!ctx->Extensions.ARB_uniform_buffer_object) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glGetActiveUniformBlockiv");
@ -668,10 +669,39 @@ _mesa_GetActiveUniformBlockiv(GLuint program,
params[0] = block->Binding;
return;
case GL_UNIFORM_BLOCK_DATA_SIZE:
params[0] = block->UniformBufferSize;
return;
case GL_UNIFORM_BLOCK_NAME_LENGTH:
params[0] = strlen(block->Name) + 1;
return;
case GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS:
params[0] = block->NumUniforms;
return;
case GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:
for (i = 0; i < block->NumUniforms; i++) {
unsigned offset;
params[i] = _mesa_get_uniform_location(ctx, shProg,
block->Uniforms[i].Name,
&offset);
}
return;
case GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:
params[0] = shProg->UniformBlockStageIndex[MESA_SHADER_VERTEX][uniformBlockIndex] != -1;
return;
case GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER:
params[0] = shProg->UniformBlockStageIndex[MESA_SHADER_GEOMETRY][uniformBlockIndex] != -1;
return;
case GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:
params[0] = shProg->UniformBlockStageIndex[MESA_SHADER_FRAGMENT][uniformBlockIndex] != -1;
return;
default:
_mesa_error(ctx, GL_INVALID_ENUM,
"glGetActiveUniformBlockiv(pname 0x%x (%s))",