Mesa (master): glsl: Don' t emit spurious errors for constant indexes of the wrong type

Ian Romanick idr at kemper.freedesktop.org
Mon Apr 8 22:18:48 UTC 2013


Module: Mesa
Branch: master
Commit: a131b87706a6e59be35997d24b2236130aa09689
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a131b87706a6e59be35997d24b2236130aa09689

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Fri Mar 15 15:14:18 2013 -0700

glsl: Don't emit spurious errors for constant indexes of the wrong type

Previously the shader

uniform float x[6];
void main() { gl_Position.x = x[1.0]; }

would have generated the errors

0:2(33): error: array index must be integer type
0:2(36): error: array index must be < 6

Now only

0:2(33): error: array index must be integer type

will be generated.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/glsl/ast_array_index.cpp |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ast_array_index.cpp b/src/glsl/ast_array_index.cpp
index 486ff55..c7ebcbd 100644
--- a/src/glsl/ast_array_index.cpp
+++ b/src/glsl/ast_array_index.cpp
@@ -58,7 +58,7 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
     * declared size.
     */
    ir_constant *const const_index = idx->constant_expression_value();
-   if (const_index != NULL) {
+   if (const_index != NULL && idx->type->is_integer()) {
       const int idx = const_index->value.i[0];
       const char *type_name = "error";
       unsigned bound = 0;
@@ -118,7 +118,7 @@ _mesa_ast_array_index_to_hir(void *mem_ctx,
 	    check_builtin_array_max_size(v->name, idx+1, loc, state);
 	 }
       }
-   } else if (array->type->is_array()) {
+   } else if (const_index == NULL && array->type->is_array()) {
       if (array->type->array_size() == 0) {
 	 _mesa_glsl_error(&loc, state, "unsized array index must be constant");
       } else if (array->type->fields.array->is_interface()) {




More information about the mesa-commit mailing list