diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/spirv/vtn_private.h | 4 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_variables.c | 28 |
2 files changed, 9 insertions, 23 deletions
diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index f4e6201febe..13f1cf65a83 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -799,10 +799,6 @@ struct vtn_ssa_value *vtn_ssa_transpose(struct vtn_builder *b, nir_deref_instr *vtn_nir_deref(struct vtn_builder *b, uint32_t id); -struct vtn_pointer *vtn_pointer_for_variable(struct vtn_builder *b, - struct vtn_variable *var, - struct vtn_type *ptr_type); - nir_deref_instr *vtn_pointer_to_deref(struct vtn_builder *b, struct vtn_pointer *ptr); nir_ssa_def * diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index 9dc2c755ca5..a4b5799afc4 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -609,23 +609,6 @@ vtn_pointer_dereference(struct vtn_builder *b, } } -struct vtn_pointer * -vtn_pointer_for_variable(struct vtn_builder *b, - struct vtn_variable *var, struct vtn_type *ptr_type) -{ - struct vtn_pointer *pointer = rzalloc(b, struct vtn_pointer); - - pointer->mode = var->mode; - pointer->type = var->type; - vtn_assert(ptr_type->base_type == vtn_base_type_pointer); - vtn_assert(ptr_type->deref->type == var->type->type); - pointer->ptr_type = ptr_type; - pointer->var = var; - pointer->access = var->access | var->type->access; - - return pointer; -} - /* Returns an atomic_uint type based on the original uint type. The returned * type will be equivalent to the original one but will have an atomic_uint * type as leaf instead of an uint. @@ -2211,8 +2194,12 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val, var->mode = mode; var->base_location = -1; - vtn_assert(val->value_type == vtn_value_type_pointer); - val->pointer = vtn_pointer_for_variable(b, var, ptr_type); + val->pointer = rzalloc(b, struct vtn_pointer); + val->pointer->mode = var->mode; + val->pointer->type = var->type; + val->pointer->ptr_type = ptr_type; + val->pointer->var = var; + val->pointer->access = var->type->access; switch (var->mode) { case vtn_variable_mode_function: @@ -2382,6 +2369,9 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val, vtn_foreach_decoration(b, val, var_decoration_cb, var); vtn_foreach_decoration(b, val, ptr_decoration_cb, val->pointer); + /* Propagate access flags from the OpVariable decorations. */ + val->pointer->access |= var->access; + if ((var->mode == vtn_variable_mode_input || var->mode == vtn_variable_mode_output) && var->var->members) { |