spirv: Access qualifiers are not a bitfield
They're an actual enum. My bad.
Fixes: de36b5b805be "nir/vtn: Add support for kernel images to SPIRV-to-NIR"
Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6578>
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 19d2616..783f7ce 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -313,6 +313,22 @@
return vtn_push_ssa_value(b, value_id, ssa);
}
+static enum gl_access_qualifier
+spirv_to_gl_access_qualifier(struct vtn_builder *b,
+ SpvAccessQualifier access_qualifier)
+{
+ switch (access_qualifier) {
+ case SpvAccessQualifierReadOnly:
+ return ACCESS_NON_WRITEABLE;
+ case SpvAccessQualifierWriteOnly:
+ return ACCESS_NON_READABLE;
+ case SpvAccessQualifierReadWrite:
+ return 0;
+ default:
+ vtn_fail("Invalid image access qualifier");
+ }
+}
+
static nir_deref_instr *
vtn_get_image(struct vtn_builder *b, uint32_t value_id)
{
@@ -5578,11 +5594,8 @@
in_var->data.read_only = true;
in_var->data.location = i;
if (param_type->base_type == vtn_base_type_image) {
- in_var->data.access = 0;
- if (param_type->access_qualifier & SpvAccessQualifierReadOnly)
- in_var->data.access |= ACCESS_NON_WRITEABLE;
- if (param_type->access_qualifier & SpvAccessQualifierWriteOnly)
- in_var->data.access |= ACCESS_NON_READABLE;
+ in_var->data.access =
+ spirv_to_gl_access_qualifier(b, param_type->access_qualifier);
}
if (is_by_val)