mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
nir/lower_atomics: add support for bindless_image_atomic
Initial data is loaded via bindless_image_load, atomic swap via bindless_image_atomic_swap. Signed-off-by: Job Noorman <jnoorman@igalia.com> Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@intel.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39932>
This commit is contained in:
parent
e0c07c42e0
commit
b8437e30bf
1 changed files with 20 additions and 1 deletions
|
|
@ -67,6 +67,15 @@ build_atomic(nir_builder *b, nir_intrinsic_instr *intr)
|
|||
load = nir_load_global(b, 1, intr->def.bit_size, intr->src[0].ssa,
|
||||
.access = ACCESS_ATOMIC | ACCESS_COHERENT);
|
||||
break;
|
||||
case nir_intrinsic_bindless_image_atomic:
|
||||
load = nir_bindless_image_load(
|
||||
b, 1, intr->def.bit_size, intr->src[0].ssa, intr->src[1].ssa,
|
||||
nir_imm_zero(b, 1, 32), intr->src[2].ssa,
|
||||
.access = ACCESS_ATOMIC | ACCESS_COHERENT,
|
||||
.format = nir_intrinsic_format(intr),
|
||||
.image_dim = nir_intrinsic_image_dim(intr),
|
||||
.image_array = nir_intrinsic_image_array(intr));
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE("unsupported atomic type");
|
||||
}
|
||||
|
|
@ -104,6 +113,15 @@ build_atomic(nir_builder *b, nir_intrinsic_instr *intr)
|
|||
before, expected,
|
||||
.atomic_op = nir_atomic_op_cmpxchg);
|
||||
break;
|
||||
case nir_intrinsic_bindless_image_atomic:
|
||||
xchg = nir_bindless_image_atomic_swap(
|
||||
b, intr->def.bit_size, intr->src[0].ssa, intr->src[1].ssa,
|
||||
intr->src[2].ssa, before, expected,
|
||||
.atomic_op = nir_atomic_op_cmpxchg,
|
||||
.format = nir_intrinsic_format(intr),
|
||||
.image_dim = nir_intrinsic_image_dim(intr),
|
||||
.image_array = nir_intrinsic_image_array(intr));
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE("unsupported atomic type");
|
||||
}
|
||||
|
|
@ -124,7 +142,8 @@ lower_atomics(struct nir_builder *b, nir_intrinsic_instr *intr,
|
|||
|
||||
if (intr->intrinsic != nir_intrinsic_ssbo_atomic &&
|
||||
intr->intrinsic != nir_intrinsic_shared_atomic &&
|
||||
intr->intrinsic != nir_intrinsic_global_atomic)
|
||||
intr->intrinsic != nir_intrinsic_global_atomic &&
|
||||
intr->intrinsic != nir_intrinsic_bindless_image_atomic)
|
||||
return false;
|
||||
if (supported_cb(&intr->instr, NULL))
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue