Module: Mesa
Branch: main
Commit: d26568a6754972efc55f04d574a6a8255dff5133
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d26568a6754972efc55f04d574a6a8255dff5133

Author: Marek Olšák <marek.ol...@amd.com>
Date:   Sat Oct 28 00:52:10 2023 -0400

radeonsi: rewrite gfx11_*push*_sh_reg helpers

to allow reusing the macros for context registers later.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-pra...@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26095>

---

 src/gallium/drivers/radeonsi/si_build_pm4.h | 35 ++++++++++++++++-------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_build_pm4.h 
b/src/gallium/drivers/radeonsi/si_build_pm4.h
index 4ffb84222b0..cfbd27a8d87 100644
--- a/src/gallium/drivers/radeonsi/si_build_pm4.h
+++ b/src/gallium/drivers/radeonsi/si_build_pm4.h
@@ -260,35 +260,40 @@
 } while (0)
 
 /* GFX11 generic packet building helpers for buffered SH registers. Don't use 
these directly. */
-#define gfx11_push_sh_reg(reg, value, type) do { \
-   unsigned __i = sctx->num_buffered_##type##_sh_regs++; \
-   assert(__i / 2 < ARRAY_SIZE(sctx->gfx11.buffered_##type##_sh_regs)); \
-   sctx->gfx11.buffered_##type##_sh_regs[__i / 2].reg_offset[__i % 2] = ((reg) 
- SI_SH_REG_OFFSET) >> 2; \
-   sctx->gfx11.buffered_##type##_sh_regs[__i / 2].reg_value[__i % 2] = value; \
+#define gfx11_push_reg(reg, value, prefix_name, buffer, reg_count) do { \
+   unsigned __i = (reg_count)++; \
+   assert((reg) >= prefix_name##_REG_OFFSET && (reg) < prefix_name##_REG_END); 
\
+   assert(__i / 2 < ARRAY_SIZE(buffer)); \
+   buffer[__i / 2].reg_offset[__i % 2] = ((reg) - prefix_name##_REG_OFFSET) >> 
2; \
+   buffer[__i / 2].reg_value[__i % 2] = value; \
 } while (0)
 
-#define gfx11_opt_push_sh_reg(reg, reg_enum, value, type) do { \
+#define gfx11_opt_push_reg(reg, reg_enum, value, prefix_name, category, 
buffer, reg_count) do { \
    unsigned __value = value; \
-   if (((sctx->tracked_regs.other_reg_saved_mask >> (reg_enum)) & 0x1) != 0x1 
|| \
-       sctx->tracked_regs.other_reg_value[reg_enum] != __value) { \
-      gfx11_push_sh_reg(reg, __value, type); \
-      sctx->tracked_regs.other_reg_saved_mask |= BITFIELD_BIT(reg_enum); \
-      sctx->tracked_regs.other_reg_value[reg_enum] = __value; \
+   if (((sctx->tracked_regs.category##_reg_saved_mask >> (reg_enum)) & 0x1) != 
0x1 || \
+       sctx->tracked_regs.category##_reg_value[reg_enum] != __value) { \
+      gfx11_push_reg(reg, __value, prefix_name, buffer, reg_count); \
+      sctx->tracked_regs.category##_reg_saved_mask |= 
BITFIELD64_BIT(reg_enum); \
+      sctx->tracked_regs.category##_reg_value[reg_enum] = __value; \
    } \
 } while (0)
 
 /* GFX11 packet building helpers for buffered SH registers. */
 #define gfx11_push_gfx_sh_reg(reg, value) \
-   gfx11_push_sh_reg(reg, value, gfx)
+   gfx11_push_reg(reg, value, SI_SH, sctx->gfx11.buffered_gfx_sh_regs, \
+                  sctx->num_buffered_gfx_sh_regs)
 
 #define gfx11_push_compute_sh_reg(reg, value) \
-   gfx11_push_sh_reg(reg, value, compute)
+   gfx11_push_reg(reg, value, SI_SH, sctx->gfx11.buffered_compute_sh_regs, \
+                  sctx->num_buffered_compute_sh_regs)
 
 #define gfx11_opt_push_gfx_sh_reg(reg, reg_enum, value) \
-   gfx11_opt_push_sh_reg(reg, reg_enum, value, gfx)
+   gfx11_opt_push_reg(reg, reg_enum, value, SI_SH, other, 
sctx->gfx11.buffered_gfx_sh_regs, \
+                      sctx->num_buffered_gfx_sh_regs)
 
 #define gfx11_opt_push_compute_sh_reg(reg, reg_enum, value) \
-   gfx11_opt_push_sh_reg(reg, reg_enum, value, compute)
+   gfx11_opt_push_reg(reg, reg_enum, value, SI_SH, other, 
sctx->gfx11.buffered_compute_sh_regs, \
+                      sctx->num_buffered_compute_sh_regs)
 
 #define radeon_set_or_push_gfx_sh_reg(reg, value) do { \
    if (GFX_VERSION >= GFX11 && HAS_SH_PAIRS_PACKED) { \

Reply via email to