[Mesa-dev] [PATCH] glsl: dont allow undefined array sizes in ES

Iago Toral itoral at igalia.com
Wed Mar 9 15:04:32 UTC 2016


On Tue, 2016-03-08 at 20:35 +1100, Timothy Arceri wrote:
> 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
> ---
>  src/compiler/glsl/ast_to_hir.cpp | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
> index d755a11..8918981 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -4223,6 +4223,17 @@ 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");

What about unsized arrays in SSBOs? Unsized arrays are allowed as the
last element in a SSBO declaration. This is a special case because the
size of the array is implicitly set by the size of the underlying buffer
object.

Iago

>              /* From Section 4.12 (Empty Declarations) of the GLSL 4.5 spec:
>               *
>               *    "The combinations of types and qualifiers that cause




More information about the mesa-dev mailing list