mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
nir/spirv: Use the type from the deref for atomics
Previously, we were using the type of the variable which is incorrect. Cc: "17.1" <mesa-stable@lists.freedesktop.org> Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
parent
cc577ca377
commit
a10d887ad1
1 changed files with 3 additions and 3 deletions
|
|
@ -2112,19 +2112,19 @@ vtn_handle_ssbo_or_shared_atomic(struct vtn_builder *b, SpvOp opcode,
|
|||
*/
|
||||
|
||||
if (chain->var->mode == vtn_variable_mode_workgroup) {
|
||||
struct vtn_type *type = chain->var->type;
|
||||
nir_deref_var *deref = vtn_access_chain_to_deref(b, chain);
|
||||
const struct glsl_type *deref_type = nir_deref_tail(&deref->deref)->type;
|
||||
nir_intrinsic_op op = get_shared_nir_atomic_op(opcode);
|
||||
atomic = nir_intrinsic_instr_create(b->nb.shader, op);
|
||||
atomic->variables[0] = nir_deref_var_clone(deref, atomic);
|
||||
|
||||
switch (opcode) {
|
||||
case SpvOpAtomicLoad:
|
||||
atomic->num_components = glsl_get_vector_elements(type->type);
|
||||
atomic->num_components = glsl_get_vector_elements(deref_type);
|
||||
break;
|
||||
|
||||
case SpvOpAtomicStore:
|
||||
atomic->num_components = glsl_get_vector_elements(type->type);
|
||||
atomic->num_components = glsl_get_vector_elements(deref_type);
|
||||
nir_intrinsic_set_write_mask(atomic, (1 << atomic->num_components) - 1);
|
||||
atomic->src[0] = nir_src_for_ssa(vtn_ssa_value(b, w[4])->def);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue