[Mesa-dev] [PATCH v5 09/70] glsl: return error if unsized arrays are found in OpenGL ES

Iago Toral Quiroga itoral at igalia.com
Thu Sep 10 06:35:25 PDT 2015


From: Samuel Iglesias Gonsalvez <siglesias at igalia.com>

Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
---
 src/glsl/ast_to_hir.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 72c6459..b67ae70 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -6252,6 +6252,22 @@ ast_interface_block::hir(exec_list *instructions,
       else if (state->stage == MESA_SHADER_TESS_CTRL && var_mode == ir_var_shader_out)
          handle_tess_ctrl_shader_output_decl(state, loc, var);
 
+      for (unsigned i = 0; i < num_variables; i++) {
+         /* From GLSL ES 3.10 spec, section 4.1.9 "Arrays":
+          *
+          * "If an array is declared as the last member of a shader storage
+          * block and the size is not specified at compile-time, it is
+          * sized at run-time. In all other cases, arrays are sized only
+          * at compile-time."
+          */
+         if (state->es_shader && fields[i].type->is_unsized_array()) {
+             _mesa_glsl_error(&loc, state, "unsized array `%s' definition: "
+                              "only last member of a shader storage block "
+                              "can be defined as unsized array",
+                              fields[i].name);
+         }
+      }
+
       if (ir_variable *earlier =
           state->symbols->get_variable(this->instance_name)) {
          if (!redeclaring_per_vertex) {
-- 
1.9.1



More information about the mesa-dev mailing list