[Mesa-dev] [PATCH v2] mesa/uniform_query: Don't write to *params if there is an error

Matt Turner mattst88 at gmail.com
Fri Dec 7 16:05:32 PST 2012


The GL 3.1 and ES 3.0 specs say of glGetActiveUniformsiv:
   "If an error occurs, nothing will be written to params."

So, make a pass through the array and check for errors before the pass
that actually writes to params.

Fixes es3conform's getactiveuniformsiv_for_nonexistent_uniform_indices
test.
---
 src/mesa/main/uniform_query.cpp |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index cbdd39e..3245500 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -97,7 +97,6 @@ _mesa_GetActiveUniformsiv(GLuint program,
 
    for (i = 0; i < uniformCount; i++) {
       GLuint index = uniformIndices[i];
-      const struct gl_uniform_storage *uni = &shProg->UniformStorage[index];
 
       if (index >= shProg->NumUserUniformStorage) {
 	 _mesa_error(ctx, GL_INVALID_VALUE, "glGetActiveUniformsiv(index)");
@@ -106,6 +105,26 @@ _mesa_GetActiveUniformsiv(GLuint program,
 
       switch (pname) {
       case GL_UNIFORM_TYPE:
+      case GL_UNIFORM_SIZE:
+      case GL_UNIFORM_NAME_LENGTH:
+      case GL_UNIFORM_BLOCK_INDEX:
+      case GL_UNIFORM_OFFSET:
+      case GL_UNIFORM_ARRAY_STRIDE:
+      case GL_UNIFORM_MATRIX_STRIDE:
+      case GL_UNIFORM_IS_ROW_MAJOR:
+         break;
+      default:
+	 _mesa_error(ctx, GL_INVALID_ENUM, "glGetActiveUniformsiv(pname)");
+	 return;
+      }
+   }
+
+   for (i = 0; i < uniformCount; i++) {
+      GLuint index = uniformIndices[i];
+      const struct gl_uniform_storage *uni = &shProg->UniformStorage[index];
+
+      switch (pname) {
+      case GL_UNIFORM_TYPE:
 	 params[i] = uni->type->gl_type;
 	 break;
 
@@ -139,10 +158,6 @@ _mesa_GetActiveUniformsiv(GLuint program,
       case GL_UNIFORM_IS_ROW_MAJOR:
 	 params[i] = uni->row_major;
 	 break;
-
-      default:
-	 _mesa_error(ctx, GL_INVALID_ENUM, "glGetActiveUniformsiv(pname)");
-	 return;
       }
    }
 }
-- 
1.7.8.6



More information about the mesa-dev mailing list