diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 8621265a7a9..e31b623da37 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -46,6 +46,8 @@ ssbo_atomic_for_deref(nir_intrinsic_op deref_op) { switch (deref_op) { #define OP(O) case nir_intrinsic_deref_##O: return nir_intrinsic_ssbo_##O; + OP(atomic) + OP(atomic_swap) OP(atomic_exchange) OP(atomic_comp_swap) OP(atomic_add) @@ -76,6 +78,8 @@ global_atomic_for_deref(nir_address_format addr_format, return nir_intrinsic_global_##O; \ else \ return nir_intrinsic_global_##O##_2x32; + OP(atomic) + OP(atomic_swap) OP(atomic_exchange) OP(atomic_comp_swap) OP(atomic_add) @@ -101,6 +105,8 @@ shared_atomic_for_deref(nir_intrinsic_op deref_op) { switch (deref_op) { #define OP(O) case nir_intrinsic_deref_##O: return nir_intrinsic_shared_##O; + OP(atomic) + OP(atomic_swap) OP(atomic_exchange) OP(atomic_comp_swap) OP(atomic_add) @@ -126,6 +132,8 @@ task_payload_atomic_for_deref(nir_intrinsic_op deref_op) { switch (deref_op) { #define OP(O) case nir_intrinsic_deref_##O: return nir_intrinsic_task_payload_##O; + OP(atomic) + OP(atomic_swap) OP(atomic_exchange) OP(atomic_comp_swap) OP(atomic_add) @@ -1810,6 +1818,10 @@ build_explicit_io_atomic(nir_builder *b, nir_intrinsic_instr *intrin, nir_intrinsic_instr *atomic = nir_intrinsic_instr_create(b->shader, op); + /* XXX: Drop the if once legacy atomics are gone */ + if (nir_intrinsic_has_atomic_op(atomic)) + nir_intrinsic_set_atomic_op(atomic, nir_intrinsic_atomic_op(intrin)); + unsigned src = 0; if (addr_format_is_global(addr_format, mode)) { atomic->src[src++] = nir_src_for_ssa(addr_to_global(b, addr, addr_format)); @@ -2260,6 +2272,8 @@ nir_lower_explicit_io_impl(nir_function_impl *impl, nir_variable_mode modes, case nir_intrinsic_store_deref: case nir_intrinsic_load_deref_block_intel: case nir_intrinsic_store_deref_block_intel: + case nir_intrinsic_deref_atomic: + case nir_intrinsic_deref_atomic_swap: case nir_intrinsic_deref_atomic_add: case nir_intrinsic_deref_atomic_imin: case nir_intrinsic_deref_atomic_umin: