From 7f7f58f17f3ed547da0a00a32d9391d7ff437b83 Mon Sep 17 00:00:00 2001 From: Eduardo Lima Mitev Date: Thu, 5 May 2016 13:52:37 +0200 Subject: [PATCH] glsl: Apply memory qualifiers to vars inside named block interfaces This is missing and memory qualifiers are currently being ignored for SSBOs. Reviewed-by: Ian Romanick --- src/compiler/glsl/ast_to_hir.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp index c5cd48f536f..5a1fc9f68ac 100644 --- a/src/compiler/glsl/ast_to_hir.cpp +++ b/src/compiler/glsl/ast_to_hir.cpp @@ -6963,6 +6963,16 @@ is_unsized_array_last_element(ir_variable *v) return false; } +static void +apply_memory_qualifiers(ir_variable *var, glsl_struct_field field) +{ + var->data.image_read_only = field.image_read_only; + var->data.image_write_only = field.image_write_only; + var->data.image_coherent = field.image_coherent; + var->data.image_volatile = field.image_volatile; + var->data.image_restrict = field.image_restrict; +} + ir_rvalue * ast_interface_block::hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) @@ -7449,6 +7459,9 @@ ast_interface_block::hir(exec_list *instructions, } } } + + if (var->data.mode == ir_var_shader_storage) + apply_memory_qualifiers(var, fields[i]); } if (ir_variable *earlier = @@ -7523,13 +7536,8 @@ ast_interface_block::hir(exec_list *instructions, var->data.matrix_layout = fields[i].matrix_layout; } - 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; - var->data.image_coherent = fields[i].image_coherent; - var->data.image_volatile = fields[i].image_volatile; - var->data.image_restrict = fields[i].image_restrict; - } + if (var->data.mode == ir_var_shader_storage) + apply_memory_qualifiers(var, fields[i]); /* Examine var name here since var may get deleted in the next call */ bool var_is_gl_id = is_gl_identifier(var->name); -- 2.30.2