[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