From 4fb3133cdf28bfcd18c7faf5b622d62c8fe64444 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Mon, 15 May 2023 16:03:13 +0800 Subject: [PATCH] radeonsi: fix aco compile for atomic ops MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LLVM path will do this in ac_nir_translate(), ACO path need driver to handle it. Reviewed-by: Timur Kristóf Reviewed-by: Alyssa Rosenzweig Reviewed-by: Marek Olšák Signed-off-by: Qiang Yu Part-of: --- .../drivers/radeonsi/si_nir_lower_resource.c | 48 +++---------------- src/gallium/drivers/radeonsi/si_shader_nir.c | 3 ++ 2 files changed, 9 insertions(+), 42 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_nir_lower_resource.c b/src/gallium/drivers/radeonsi/si_nir_lower_resource.c index 7275531e82e..dca645c9229 100644 --- a/src/gallium/drivers/radeonsi/si_nir_lower_resource.c +++ b/src/gallium/drivers/radeonsi/si_nir_lower_resource.c @@ -289,18 +289,8 @@ static bool lower_resource_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin break; } case nir_intrinsic_load_ssbo: - case nir_intrinsic_ssbo_atomic_add: - case nir_intrinsic_ssbo_atomic_imin: - case nir_intrinsic_ssbo_atomic_umin: - case nir_intrinsic_ssbo_atomic_fmin: - case nir_intrinsic_ssbo_atomic_imax: - case nir_intrinsic_ssbo_atomic_umax: - case nir_intrinsic_ssbo_atomic_fmax: - case nir_intrinsic_ssbo_atomic_and: - case nir_intrinsic_ssbo_atomic_or: - case nir_intrinsic_ssbo_atomic_xor: - case nir_intrinsic_ssbo_atomic_exchange: - case nir_intrinsic_ssbo_atomic_comp_swap: { + case nir_intrinsic_ssbo_atomic: + case nir_intrinsic_ssbo_atomic_swap: { assert(!(nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM)); nir_ssa_def *desc = load_ssbo_desc(b, &intrin->src[0], s); @@ -327,21 +317,8 @@ static bool lower_resource_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin case nir_intrinsic_image_deref_sparse_load: case nir_intrinsic_image_deref_fragment_mask_load_amd: case nir_intrinsic_image_deref_store: - case nir_intrinsic_image_deref_atomic_add: - case nir_intrinsic_image_deref_atomic_imin: - case nir_intrinsic_image_deref_atomic_umin: - case nir_intrinsic_image_deref_atomic_fmin: - case nir_intrinsic_image_deref_atomic_imax: - case nir_intrinsic_image_deref_atomic_umax: - case nir_intrinsic_image_deref_atomic_fmax: - case nir_intrinsic_image_deref_atomic_and: - case nir_intrinsic_image_deref_atomic_or: - case nir_intrinsic_image_deref_atomic_xor: - case nir_intrinsic_image_deref_atomic_exchange: - case nir_intrinsic_image_deref_atomic_comp_swap: - case nir_intrinsic_image_deref_atomic_fadd: - case nir_intrinsic_image_deref_atomic_inc_wrap: - case nir_intrinsic_image_deref_atomic_dec_wrap: + case nir_intrinsic_image_deref_atomic: + case nir_intrinsic_image_deref_atomic_swap: case nir_intrinsic_image_deref_descriptor_amd: { assert(!(nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM)); @@ -377,21 +354,8 @@ static bool lower_resource_intrinsic(nir_builder *b, nir_intrinsic_instr *intrin case nir_intrinsic_bindless_image_sparse_load: case nir_intrinsic_bindless_image_fragment_mask_load_amd: case nir_intrinsic_bindless_image_store: - case nir_intrinsic_bindless_image_atomic_add: - case nir_intrinsic_bindless_image_atomic_imin: - case nir_intrinsic_bindless_image_atomic_umin: - case nir_intrinsic_bindless_image_atomic_fmin: - case nir_intrinsic_bindless_image_atomic_imax: - case nir_intrinsic_bindless_image_atomic_umax: - case nir_intrinsic_bindless_image_atomic_fmax: - case nir_intrinsic_bindless_image_atomic_and: - case nir_intrinsic_bindless_image_atomic_or: - case nir_intrinsic_bindless_image_atomic_xor: - case nir_intrinsic_bindless_image_atomic_exchange: - case nir_intrinsic_bindless_image_atomic_comp_swap: - case nir_intrinsic_bindless_image_atomic_fadd: - case nir_intrinsic_bindless_image_atomic_inc_wrap: - case nir_intrinsic_bindless_image_atomic_dec_wrap: { + case nir_intrinsic_bindless_image_atomic: + case nir_intrinsic_bindless_image_atomic_swap: { assert(!(nir_intrinsic_access(intrin) & ACCESS_NON_UNIFORM)); enum ac_descriptor_type desc_type; diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 7ffd9ef57e3..a75c393d19d 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -375,6 +375,9 @@ static void si_lower_nir(struct si_screen *sscreen, struct nir_shader *nir) si_late_optimize_16bit_samplers(sscreen, nir); NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_function_temp, NULL); + + /* Temporary stopgap until legacy atomics are removed in the core */ + NIR_PASS_V(nir, nir_lower_legacy_atomics); } static bool si_mark_divergent_texture_non_uniform(struct nir_shader *nir)