mesa: Add missing check for glUniform*v count > 1 on non-array
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 18 Oct 2011 23:28:21 +0000 (16:28 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 7 Nov 2011 21:33:16 +0000 (13:33 -0800)
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Tested-by: Tom Stellard <thomas.stellard@amd.com>
src/mesa/main/uniform_query.cpp

index 496f60416bfd654cbeea6819a9acc148142d6ec0..debe3ae596340de6e44a3257827303496f635f82 100644 (file)
@@ -399,6 +399,8 @@ validate_uniform_parameters(struct gl_context *ctx,
     *
     *         - if no variable with a location of location exists in the
     *           program object currently in use and location is not -1,
+    *         - if count is greater than one, and the uniform declared in the
+    *           shader is not an array variable,
     */
    if (location < -1) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "%s(location=%d)",
@@ -414,6 +416,13 @@ validate_uniform_parameters(struct gl_context *ctx,
       return false;
    }
 
+   if (shProg->UniformStorage[*loc].array_elements == 0 && count > 1) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                 "%s(count > 1 for non-array, location=%d)",
+                 caller, location);
+      return false;
+   }
+
    /* This case should be impossible.  The implication is that a call like
     * glGetUniformLocation(prog, "foo[8]") was successful but "foo" is not an
     * array.