V2: move single dimensional array detection into a helper Signed-off-by: Timothy Arceri <t_arc...@yahoo.com.au> Reviewed-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com> --- src/glsl/ast.h | 8 ++++++++ src/glsl/ast_to_hir.cpp | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/glsl/ast.h b/src/glsl/ast.h index d8c6cea..ab94cb2 100644 --- a/src/glsl/ast.h +++ b/src/glsl/ast.h @@ -338,6 +338,14 @@ public: array_dimensions.push_tail(&dim->link); } + bool is_single_dimension() + { + return (this->is_unsized_array && this->array_dimensions.is_empty()) || + (!this->is_unsized_array && + this->array_dimensions.tail_pred->prev != NULL && + this->array_dimensions.tail_pred->prev->is_head_sentinel()); + } + virtual void print(void) const; /* If true, this means that the array has an unsized outermost dimension. */ diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 68f71c6..e29b159 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -5962,7 +5962,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[]"); -- 2.4.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev