mesa: Move the link check from _mesa_get_uniform_location to _mesa_GetUniformLocationARB
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 11 Oct 2011 23:55:54 +0000 (16:55 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 7 Nov 2011 21:33:15 +0000 (13:33 -0800)
There are cases where we might want to internally query the location
of a uniform in a shader that failed linking.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Tested-by: Tom Stellard <thomas.stellard@amd.com>
src/mesa/main/uniforms.c

index 68e44b272445fbc0b408ec63226ae14433debe24..6403137756a3ed3698e4e942d1f9cdc38cebf404 100644 (file)
@@ -491,11 +491,6 @@ _mesa_get_uniform_location(struct gl_context *ctx,
 {
    GLint offset = 0, location = -1;
 
-   if (shProg->LinkStatus == GL_FALSE) {
-      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformfv(program)");
-      return -1;
-   }
-
    /* XXX we should return -1 if the uniform was declared, but not
     * actually used.
     */
@@ -1428,6 +1423,17 @@ _mesa_GetUniformLocationARB(GLhandleARB programObj, const GLcharARB *name)
    if (!shProg)
       return -1;
 
+   /* Page 80 (page 94 of the PDF) of the OpenGL 2.1 spec says:
+    *
+    *     "If program has not been successfully linked, the error
+    *     INVALID_OPERATION is generated."
+    */
+   if (shProg->LinkStatus == GL_FALSE) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                 "glGetUniformLocation(program not linked)");
+      return -1;
+   }
+
    return _mesa_get_uniform_location(ctx, shProg, name);
 }