mesa: Return -1 for glGetUniformLocation on UBOs.
authorEric Anholt <eric@anholt.net>
Mon, 25 Jun 2012 17:10:26 +0000 (10:10 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 31 Jul 2012 19:06:20 +0000 (12:06 -0700)
Fixes piglit ARB_uniform_buffer_object/getuniformlocation.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/main/uniforms.c

index b5aaa1b25a2e9507bdae2a04bb1ef3cb643d0b64..f43d0fbee07303826256eebc493e031267fc8527 100644 (file)
@@ -522,6 +522,16 @@ _mesa_GetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name)
    if (index == GL_INVALID_INDEX)
       return -1;
 
+   /* From the GL_ARB_uniform_buffer_object spec:
+    *
+    *     "The value -1 will be returned if <name> does not correspond to an
+    *      active uniform variable name in <program>, if <name> is associated
+    *      with a named uniform block, or if <name> starts with the reserved
+    *      prefix "gl_"."
+    */
+   if (shProg->UniformStorage[index].block_index != -1)
+      return -1;
+
    return _mesa_uniform_merge_location_offset(index, offset);
 }