glsl: dont allow undefined array sizes in ES
authorTimothy Arceri <timothy.arceri@collabora.com>
Tue, 8 Mar 2016 09:35:41 +0000 (20:35 +1100)
committerTimothy Arceri <timothy.arceri@collabora.com>
Wed, 9 Mar 2016 09:30:42 +0000 (20:30 +1100)
This applies the rule to empty declarations.

Fixes:
dEQP-GLES3.functional.shaders.arrays.invalid.empty_declaration_without_var_name_vertex
dEQP-GLES3.functional.shaders.arrays.invalid.empty_declaration_without_var_name_fragment

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/glsl/ast_to_hir.cpp

index d755a11727fa3afe033e444f74c6d5d3c8ad9f71..5262bd87655ae991c216b5b709efb1666378ca0b 100644 (file)
@@ -4223,6 +4223,18 @@ ast_declarator_list::hir(exec_list *instructions,
                           type_name);
       } else {
          if (decl_type->base_type == GLSL_TYPE_ARRAY) {
+            /* From Section 13.22 (Array Declarations) of the GLSL ES 3.2
+             * spec:
+             *
+             *    "... any declaration that leaves the size undefined is
+             *    disallowed as this would add complexity and there are no
+             *    use-cases."
+             */
+            if (state->es_shader && decl_type->is_unsized_array()) {
+               _mesa_glsl_error(&loc, state, "array size must be explicitly "
+                                "or implicitly defined");
+            }
+
             /* From Section 4.12 (Empty Declarations) of the GLSL 4.5 spec:
              *
              *    "The combinations of types and qualifiers that cause