From 9936463ef60c2dae4138f1748019f90515fd69d7 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Mon, 19 Apr 2021 16:04:14 -0700 Subject: [PATCH] vtn: Propagate access data that's present on all struct members to the struct itself Reviewed-by: Jason Ekstrand Part-of: --- src/compiler/spirv/spirv_to_nir.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 814b9e05f80..63c8e292aa7 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -1484,6 +1484,14 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode, }; vtn_foreach_decoration(b, val, struct_member_decoration_cb, &ctx); + + /* Propagate access specifiers that are present on all members to the overall type */ + enum gl_access_qualifier overall_access = ACCESS_COHERENT | ACCESS_VOLATILE | + ACCESS_NON_READABLE | ACCESS_NON_WRITEABLE; + for (unsigned i = 0; i < num_fields; ++i) + overall_access &= val->type->members[i]->access; + val->type->access = overall_access; + vtn_foreach_decoration(b, val, struct_member_matrix_stride_cb, &ctx); vtn_foreach_decoration(b, val, struct_block_decoration_cb, NULL);