spirv/vtn: handle variable pointers without offset lowering
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -1224,17 +1224,18 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
|
||||
val->type->type = glsl_uint_type();
|
||||
}
|
||||
|
||||
if (storage_class == SpvStorageClassWorkgroup &&
|
||||
b->options->lower_workgroup_access_to_offsets) {
|
||||
uint32_t size, align;
|
||||
val->type->deref = vtn_type_layout_std430(b, val->type->deref,
|
||||
&size, &align);
|
||||
val->type->length = size;
|
||||
val->type->align = align;
|
||||
if (storage_class == SpvStorageClassWorkgroup) {
|
||||
/* These can actually be stored to nir_variables and used as SSA
|
||||
* values so they need a real glsl_type.
|
||||
*/
|
||||
val->type->type = glsl_uint_type();
|
||||
if (b->options->lower_workgroup_access_to_offsets) {
|
||||
uint32_t size, align;
|
||||
val->type->deref = vtn_type_layout_std430(b, val->type->deref,
|
||||
&size, &align);
|
||||
val->type->length = size;
|
||||
val->type->align = align;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@@ -1650,7 +1650,8 @@ vtn_pointer_from_ssa(struct vtn_builder *b, nir_ssa_def *ssa,
|
||||
vtn_assert(ssa->num_components == 2);
|
||||
ptr->block_index = nir_channel(&b->nb, ssa, 0);
|
||||
ptr->offset = nir_channel(&b->nb, ssa, 1);
|
||||
} else if (ptr->mode == vtn_variable_mode_workgroup ||
|
||||
} else if ((ptr->mode == vtn_variable_mode_workgroup &&
|
||||
b->options->lower_workgroup_access_to_offsets) ||
|
||||
ptr->mode == vtn_variable_mode_push_constant) {
|
||||
/* This pointer type needs to have actual storage */
|
||||
vtn_assert(ptr_type->type);
|
||||
|
Reference in New Issue
Block a user