summaryrefslogtreecommitdiffstats
path: root/src/glsl/ast_to_hir.cpp
diff options
context:
space:
mode:
authorChad Versace <[email protected]>2010-12-07 10:35:36 -0800
committerChad Versace <[email protected]>2010-12-08 18:53:53 -0800
commitf0f2ec4d8a50c79c2943ac95eb790fb734d88980 (patch)
tree710d2715a3e241303ec9740446e6d9466dc8dc1d /src/glsl/ast_to_hir.cpp
parentd547ab150ae8db64caebbae2b2414a3988b2f089 (diff)
glsl: In ast_to_hir, check sampler array indexing
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 [...]."
Diffstat (limited to 'src/glsl/ast_to_hir.cpp')
-rw-r--r--src/glsl/ast_to_hir.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 82b3f2e0ea9..1f4972cfca2 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -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;