mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
nir/lower_io: Handle unified atomics
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22914>
This commit is contained in:
parent
1609b41303
commit
66f1633ffd
1 changed files with 14 additions and 0 deletions
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue