diff options
author | Chad Versace <chad.versace@intel.com> | 2010-12-07 10:35:36 -0800 |
---|---|---|
committer | Chad Versace <chad.versace@intel.com> | 2010-12-08 18:53:53 -0800 |
commit | f0f2ec4d8a50c79c2943ac95eb790fb734d88980 (patch) | |
tree | 710d2715a3e241303ec9740446e6d9466dc8dc1d | |
parent | d547ab150ae8db64caebbae2b2414a3988b2f089 (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 [...]."
-rw-r--r-- | src/glsl/ast_to_hir.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 82b3f2e0ea..1f4972cfca 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; |