From 769510f1ccfe65167e833f9d2a7d735227defd0c Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Fri, 11 Apr 2025 14:53:07 +0200 Subject: [PATCH] r600: implement EXT_shader_image_load_store Evergreen and cayman have the hardware support for this extension. This is described by the manual as EXPORT_RAT_INST_INC_UINT_RTN and EXPORT_RAT_INST_DEC_UINT_RTN. This change was tested and passes the piglit tests (17/17) on cypress, palm and cayman. Signed-off-by: Patrick Lerda Reviewed-by: Gert Wollny Part-of: --- src/gallium/drivers/r600/r600_pipe.c | 3 ++- src/gallium/drivers/r600/sfn/sfn_instr_mem.cpp | 4 ++++ src/gallium/drivers/r600/sfn/sfn_instr_mem.h | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index ef031169c97..0f3078d1fcc 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -440,7 +440,8 @@ static void r600_init_screen_caps(struct r600_screen *rscreen) caps->shader_array_components = caps->query_buffer_object = caps->image_store_formatted = - caps->alpha_to_coverage_dither_control = family >= CHIP_CEDAR; + caps->alpha_to_coverage_dither_control = + caps->image_atomic_inc_wrap = family >= CHIP_CEDAR; caps->max_texture_gather_components = family >= CHIP_CEDAR ? 4 : 0; /* kernel command checker support is also required */ caps->draw_indirect = family >= CHIP_CEDAR; diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_mem.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_mem.cpp index 8a484fcfe21..ba1e87b1e21 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_mem.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_instr_mem.cpp @@ -457,6 +457,10 @@ get_rat_opcode(const nir_atomic_op opcode) return RatInstr::CMPXCHG_INT_RTN; case nir_atomic_op_xchg: return RatInstr::XCHG_RTN; + case nir_atomic_op_inc_wrap: + return RatInstr::WRAP_INC_RTN; + case nir_atomic_op_dec_wrap: + return RatInstr::WRAP_DEC_RTN; default: unreachable("Unsupported atomic"); } diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_mem.h b/src/gallium/drivers/r600/sfn/sfn_instr_mem.h index d6941e3d7aa..89d59d2feaf 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_mem.h +++ b/src/gallium/drivers/r600/sfn/sfn_instr_mem.h @@ -98,7 +98,8 @@ public: OR_RTN, XOR_RTN, MSKOR_RTN, - UINT_RTN, + WRAP_INC_RTN, + WRAP_DEC_RTN, UNSUPPORTED };