summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2014-06-24 07:43:05 +1000
committerTimothy Arceri <[email protected]>2015-10-15 20:36:01 +1100
commitd337da81f28d6a5a65d0a09f9b1ddf905dc7c3aa (patch)
treec88782e43ef3cd3f43684f992b15d01faf175dee
parentdea0af8f826ca9ad638a158fdaacb2a4436f11d7 (diff)
glsl: dont allow gl_PerVertex to be redeclared as an array of arrays
V3: move patch after fixes to ast for AoA and add const to helper as suggested by Ian V2: move single dimensional array detection into a helper Signed-off-by: Timothy Arceri <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r--src/glsl/ast.h6
-rw-r--r--src/glsl/ast_to_hir.cpp3
2 files changed, 8 insertions, 1 deletions
diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index 57d432d4b02..e803e6d7675 100644
--- a/src/glsl/ast.h
+++ b/src/glsl/ast.h
@@ -336,6 +336,12 @@ public:
array_dimensions.push_tail(&dim->link);
}
+ const bool is_single_dimension()
+ {
+ return this->array_dimensions.tail_pred->prev != NULL &&
+ this->array_dimensions.tail_pred->prev->is_head_sentinel();
+ }
+
virtual void print(void) const;
/* This list contains objects of type ast_node containing the
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 7b54eaf4390..db617cb41ac 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -6335,7 +6335,8 @@ ast_interface_block::hir(exec_list *instructions,
_mesa_shader_stage_to_string(state->stage));
}
if (this->instance_name == NULL ||
- strcmp(this->instance_name, "gl_in") != 0 || this->array_specifier == NULL) {
+ strcmp(this->instance_name, "gl_in") != 0 || this->array_specifier == NULL ||
+ !this->array_specifier->is_single_dimension()) {
_mesa_glsl_error(&loc, state,
"gl_PerVertex input must be redeclared as "
"gl_in[]");