mesa: Add support for most of the other pnames of glGetActiveUniformBlockiv().
authorEric Anholt <eric@anholt.net>
Tue, 19 Jun 2012 21:29:49 +0000 (14:29 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 31 Jul 2012 19:06:19 +0000 (12:06 -0700)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/uniforms.c

index 3236d6eb06457ee107f7b18e0d40d7fdc6b5fba0..66522510f700c833c3f33e32cbd99f99da8387f6 100644 (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))",