[Mesa-dev] [PATCH 19/19] glsl: Allow arrays of arrays in GLSL ES 3.10 and GLSL 4.30

Timothy Arceri t_arceri at yahoo.com.au
Sat Jun 20 05:33:16 PDT 2015


---
 src/glsl/ast_to_hir.cpp       | 13 ++++++++-----
 src/glsl/glsl_parser.yy       | 22 ++++++++++++++--------
 src/glsl/glsl_parser_extras.h |  5 +++++
 3 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 6d2dc2e..81b2765 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1939,12 +1939,15 @@ process_array_type(YYLTYPE *loc, const glsl_type *base,
           *
           * "Only one-dimensional arrays may be declared."
           */
-         if (!state->ARB_arrays_of_arrays_enable) {
+         if (!state->has_arrays_of_arrays()) {
+            const char *const requirement = state->es_shader
+               ? "GLSL ES 310"
+               : "GL_ARB_arrays_of_array or GLSL 430";
             _mesa_glsl_error(loc, state,
-                             "invalid array of `%s'"
-                             "GL_ARB_arrays_of_arrays "
-                             "required for defining arrays of arrays",
-                             base->name);
+                             "invalid array of `%s' "
+                             "%s required for defining arrays of arrays",
+                             base->name, requirement);
+
             return glsl_type::error_type;
          }
       }
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 1f08893..49c01f8 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -1856,10 +1856,13 @@ array_specifier:
       void *ctx = state;
       $$ = $1;
 
-      if (!state->ARB_arrays_of_arrays_enable) {
-         _mesa_glsl_error(& @1, state,
-                          "GL_ARB_arrays_of_arrays "
-                          "required for defining arrays of arrays");
+      if (!state->has_arrays_of_arrays()) {
+         const char *const requirement = state->es_shader
+            ? "GLSL ES 310"
+            : "GL_ARB_arrays_of_array or GLSL 430";
+         _mesa_glsl_error(& @1, state,                     
+                          "%s required for defining arrays of arrays.",
+                          requirement);
       }
       $$->add_dimension(new(ctx) ast_expression(ast_unsized_array_dim, NULL,
                                                 NULL, NULL));
@@ -1868,10 +1871,13 @@ array_specifier:
    {
       $$ = $1;
 
-      if (!state->ARB_arrays_of_arrays_enable) {
-         _mesa_glsl_error(& @1, state,
-                          "GL_ARB_arrays_of_arrays "
-                          "required for defining arrays of arrays");
+      if (!state->has_arrays_of_arrays()) {
+         const char *const requirement = state->es_shader
+            ? "GLSL ES 310"
+            : "GL_ARB_arrays_of_array or GLSL 430";
+         _mesa_glsl_error(& @1, state,                     
+                          "%s required for defining arrays of arrays.",
+                          requirement);
       }
 
       $$->add_dimension($3);
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 9a0c24e..21182e4 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -190,6 +190,11 @@ struct _mesa_glsl_parse_state {
       return true;
    }
 
+   bool has_arrays_of_arrays() const
+   {
+      return ARB_arrays_of_arrays_enable || is_version(430, 310);
+   }
+
    bool has_atomic_counters() const
    {
       return ARB_shader_atomic_counters_enable || is_version(420, 310);
-- 
2.1.0



More information about the mesa-dev mailing list