[Mesa-stable] [PATCH] glsl: fix stream qualifier for blocks with an instance name
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Mon Oct 19 04:49:45 PDT 2015
Assuming no piglit regressions,
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
Thanks!
Sam
On 17/10/15 11:51, Timothy Arceri wrote:
> This also removes the validation from the parser as it is not required
> and once arb_enhanced_layouts comes along we wont be able to do validation
> on the stream qualifier in the parser anyway as it adds constant expression
> support to the stream qualifier.
>
> Cc: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> Cc: 11.0 <mesa-stable at lists.freedesktop.org>
> ---
>
> Fixes two new piglit tests I've sent to the piglit list:
> http://patchwork.freedesktop.org/patch/62097/
> http://patchwork.freedesktop.org/patch/62098/
>
> src/glsl/ast_to_hir.cpp | 26 +++++++++++++++-----------
> src/glsl/glsl_parser.yy | 11 -----------
> src/glsl/lower_named_interface_blocks.cpp | 1 +
> 3 files changed, 16 insertions(+), 22 deletions(-)
>
> diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
> index ede02d9..db9229f 100644
> --- a/src/glsl/ast_to_hir.cpp
> +++ b/src/glsl/ast_to_hir.cpp
> @@ -6293,6 +6293,18 @@ ast_interface_block::hir(exec_list *instructions,
>
> state->struct_specifier_depth--;
>
> + for (unsigned i = 0; i < num_variables; i++) {
> + if (fields[i].stream != -1 &&
> + (unsigned) fields[i].stream != this->layout.stream) {
> + _mesa_glsl_error(&loc, state,
> + "stream layout qualifier on "
> + "interface block member `%s' does not match "
> + "the interface block (%d vs %d)",
> + fields[i].name, fields[i].stream,
> + this->layout.stream);
> + }
> + }
> +
> if (!redeclaring_per_vertex) {
> validate_identifier(this->block_name, loc, state);
>
> @@ -6633,6 +6645,8 @@ ast_interface_block::hir(exec_list *instructions,
> var->data.explicit_binding = this->layout.flags.q.explicit_binding;
> var->data.binding = this->layout.binding;
>
> + var->data.stream = this->layout.stream;
> +
> state->symbols->add_variable(var);
> instructions->push_tail(var);
> }
> @@ -6651,6 +6665,7 @@ ast_interface_block::hir(exec_list *instructions,
> var->data.centroid = fields[i].centroid;
> var->data.sample = fields[i].sample;
> var->data.patch = fields[i].patch;
> + var->data.stream = this->layout.stream;
> var->init_interface_type(block_type);
>
> if (var_mode == ir_var_shader_in || var_mode == ir_var_uniform)
> @@ -6663,17 +6678,6 @@ ast_interface_block::hir(exec_list *instructions,
> var->data.matrix_layout = fields[i].matrix_layout;
> }
>
> - if (fields[i].stream != -1 &&
> - ((unsigned)fields[i].stream) != this->layout.stream) {
> - _mesa_glsl_error(&loc, state,
> - "stream layout qualifier on "
> - "interface block member `%s' does not match "
> - "the interface block (%d vs %d)",
> - var->name, fields[i].stream, this->layout.stream);
> - }
> -
> - var->data.stream = this->layout.stream;
> -
> if (var->data.mode == ir_var_shader_storage) {
> var->data.image_read_only = fields[i].image_read_only;
> var->data.image_write_only = fields[i].image_write_only;
> diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
> index cd00f6e..2f2e10d 100644
> --- a/src/glsl/glsl_parser.yy
> +++ b/src/glsl/glsl_parser.yy
> @@ -2609,17 +2609,6 @@ interface_block:
>
> block->layout.is_default_qualifier = false;
>
> - foreach_list_typed (ast_declarator_list, member, link, &block->declarations) {
> - ast_type_qualifier& qualifier = member->type->qualifier;
> - if (qualifier.flags.q.stream && qualifier.stream != block->layout.stream) {
> - _mesa_glsl_error(& @1, state,
> - "stream layout qualifier on "
> - "interface block member does not match "
> - "the interface block (%d vs %d)",
> - qualifier.stream, block->layout.stream);
> - YYERROR;
> - }
> - }
> $$ = block;
> }
> | memory_qualifier interface_block
> diff --git a/src/glsl/lower_named_interface_blocks.cpp b/src/glsl/lower_named_interface_blocks.cpp
> index 276a2de..114bb58 100644
> --- a/src/glsl/lower_named_interface_blocks.cpp
> +++ b/src/glsl/lower_named_interface_blocks.cpp
> @@ -186,6 +186,7 @@ flatten_named_interface_blocks_declarations::run(exec_list *instructions)
> new_var->data.centroid = iface_t->fields.structure[i].centroid;
> new_var->data.sample = iface_t->fields.structure[i].sample;
> new_var->data.patch = iface_t->fields.structure[i].patch;
> + new_var->data.stream = var->data.stream;
>
> new_var->init_interface_type(iface_t);
> hash_table_insert(interface_namespace, new_var,
>
More information about the mesa-stable
mailing list