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

Tapani Pälli tapani.palli at intel.com
Tue Sep 15 03:01:37 PDT 2015



On 09/10/2015 04:35 PM, Iago Toral Quiroga wrote:
> 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++) {

IMO this loop should run to 'num_variables - 1' since last item should 
be allowed to be unsized array.

With this fixed,
Reviewed-by: Tapani Pälli <tapani.palli at intel.com>


> +         /* 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) {
>


More information about the mesa-dev mailing list