glsl: In ast_to_hir, check sampler array indexing
authorChad Versace <chad.versace@intel.com>
Tue, 7 Dec 2010 18:35:36 +0000 (10:35 -0800)
committerChad Versace <chad.versace@intel.com>
Thu, 9 Dec 2010 02:53:53 +0000 (18:53 -0800)
Raise error if a sampler array is indexed with a non-constant expression.

From section 4.1.7 of the GLSL 1.30 spec:
  "Samplers aggregated into arrays within a shader (using square
  brackets [ ]) can only be indexed with integral constant
  expressions [...]."

src/glsl/ast_to_hir.cpp

index 82b3f2e0ea99ba9088d37105b1d3d357382a25cb..1f4972cfca20a800e7513ebdc9355e7761697b7d 100644 (file)
@@ -1567,6 +1567,20 @@ ast_expression::hir(exec_list *instructions,
         }
       }
 
+      /* From section 4.1.7 of the GLSL 1.30 spec:
+       *    "Samplers aggregated into arrays within a shader (using square
+       *    brackets [ ]) can only be indexed with integral constant
+       *    expressions [...]."
+       */
+      if (array->type->is_array() &&
+          array->type->element_type()->is_sampler() &&
+          const_index == NULL) {
+
+         _mesa_glsl_error(&loc, state, "sampler arrays can only be indexed "
+                          "with constant expressions");
+         error_emitted = true;
+      }
+
       if (error_emitted)
         result->type = glsl_type::error_type;