summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEduardo Lima Mitev <[email protected]>2016-05-05 13:52:37 +0200
committerEduardo Lima Mitev <[email protected]>2016-05-10 06:21:55 +0200
commit7f7f58f17f3ed547da0a00a32d9391d7ff437b83 (patch)
treea834b19dfe9678ea7a0dc6de77e1834abb332670
parentf75a26d1ba6336d1e8a760ad106642f34265b64c (diff)
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 <[email protected]>
-rw-r--r--src/compiler/glsl/ast_to_hir.cpp22
1 files 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);