[Mesa-dev] [PATCH 02/25] glsl: dont allow gl_PerVertex to be redeclared as an array of arrays

Timothy Arceri t_arceri at yahoo.com.au
Wed Aug 19 21:37:10 PDT 2015


V2: move single dimensional array detection into a helper

Signed-off-by: Timothy Arceri <t_arceri at yahoo.com.au>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at 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 06cd6a5..5ee02ed 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



More information about the mesa-dev mailing list