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

Author: Samuel Pitoiset <[email protected]>
Date:   Tue Nov  1 16:45:22 2022 +0100

radv: use defines instead of magic values for GDS counters offset

Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19442>

---

 src/amd/vulkan/radv_constants.h     |  9 +++++++++
 src/amd/vulkan/radv_nir_lower_abi.c | 14 +++++---------
 src/amd/vulkan/radv_query.c         | 20 ++++++++++----------
 3 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/src/amd/vulkan/radv_constants.h b/src/amd/vulkan/radv_constants.h
index 5bdeaee53a1..1e66dd03983 100644
--- a/src/amd/vulkan/radv_constants.h
+++ b/src/amd/vulkan/radv_constants.h
@@ -137,4 +137,13 @@
 #define PERF_CTR_BO_LOCK_OFFSET  0
 #define PERF_CTR_BO_FENCE_OFFSET 8
 
+/* NGG GDS counters:
+ *   offset  0           - pipeline statistics counter for all streams
+ *   offset  4| 8|12|16  - generated primitive counter for stream 0|1|2|3
+ *   offset 20|24|28|32  - written primitive counter for stream 0|1|2|3
+ */
+#define RADV_NGG_QUERY_PIPELINE_STAT_OFFSET 0
+#define RADV_NGG_QUERY_PRIM_GEN_OFFSET(stream) (4 + stream * 4)
+#define RADV_NGG_QUERY_PRIM_XFB_OFFSET(stream) (20 + stream * 4)
+
 #endif /* RADV_CONSTANTS_H */
diff --git a/src/amd/vulkan/radv_nir_lower_abi.c 
b/src/amd/vulkan/radv_nir_lower_abi.c
index 215795f8c29..9fb4f2c55cf 100644
--- a/src/amd/vulkan/radv_nir_lower_abi.c
+++ b/src/amd/vulkan/radv_nir_lower_abi.c
@@ -350,23 +350,19 @@ lower_abi_instr(nir_builder *b, nir_instr *instr, void 
*state)
       replacement = nir_imm_int(b, provoking_vertex);
       break;
    }
-
-   /* GDS counters:
-    *   offset  0           - pipeline statistics counter for all streams
-    *   offset  4| 8|12|16  - generated primitive counter for stream 0|1|2|3
-    *   offset 20|24|28|32  - written primitive counter for stream 0|1|2|3
-    */
    case nir_intrinsic_atomic_add_gs_emit_prim_count_amd:
-      nir_gds_atomic_add_amd(b, 32, intrin->src[0].ssa, nir_imm_int(b, 0), 
nir_imm_int(b, 0x100));
+      nir_gds_atomic_add_amd(b, 32, intrin->src[0].ssa,
+                             nir_imm_int(b, 
RADV_NGG_QUERY_PIPELINE_STAT_OFFSET),
+                             nir_imm_int(b, 0x100));
       break;
    case nir_intrinsic_atomic_add_gen_prim_count_amd:
       nir_gds_atomic_add_amd(b, 32, intrin->src[0].ssa,
-                             nir_imm_int(b, 4 + 
nir_intrinsic_stream_id(intrin) * 4),
+                             nir_imm_int(b, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(nir_intrinsic_stream_id(intrin))),
                              nir_imm_int(b, 0x100));
       break;
    case nir_intrinsic_atomic_add_xfb_prim_count_amd:
       nir_gds_atomic_add_amd(b, 32, intrin->src[0].ssa,
-                             nir_imm_int(b, 20 + 
nir_intrinsic_stream_id(intrin) * 4),
+                             nir_imm_int(b, 
RADV_NGG_QUERY_PRIM_XFB_OFFSET(nir_intrinsic_stream_id(intrin))),
                              nir_imm_int(b, 0x100));
       break;
 
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index 4ff4aab5fb9..389e5938bf1 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -1815,7 +1815,7 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, 
struct radv_query_pool *poo
          va += pipelinestat_block_size * 2;
 
          /* pipeline statistics counter for all streams */
-         gfx10_copy_gds_query(cmd_buffer, 0, va);
+         gfx10_copy_gds_query(cmd_buffer, RADV_NGG_QUERY_PIPELINE_STAT_OFFSET, 
va);
 
          /* Record that the command buffer needs GDS. */
          cmd_buffer->gds_needed = true;
@@ -1827,11 +1827,11 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, 
struct radv_query_pool *poo
    case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:
       if (cmd_buffer->device->physical_device->use_ngg_streamout) {
          /* generated prim counter */
-         gfx10_copy_gds_query(cmd_buffer,  4 + index * 4, va);
+         gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va);
          radv_emit_write_data_imm(cs, V_370_ME, va + 4, 0x80000000);
 
          /* written prim counter */
-         gfx10_copy_gds_query(cmd_buffer, 20 + index * 4, va + 8);
+         gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_XFB_OFFSET(index), va + 8);
          radv_emit_write_data_imm(cs, V_370_ME, va + 12, 0x80000000);
 
          cmd_buffer->state.active_prims_xfb_gds_queries++;
@@ -1842,7 +1842,7 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, 
struct radv_query_pool *poo
    case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT: {
       if (cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX11) {
          /* On GFX11+, primitives generated query always use GDS. */
-         gfx10_copy_gds_query(cmd_buffer, 4 + index * 4, va);
+         gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va);
          radv_emit_write_data_imm(cs, V_370_ME, va + 4, 0x80000000);
 
          /* Record that the command buffer needs GDS. */
@@ -1866,7 +1866,7 @@ emit_begin_query(struct radv_cmd_buffer *cmd_buffer, 
struct radv_query_pool *poo
 
          if (pool->uses_gds) {
             /* generated prim counter */
-            gfx10_copy_gds_query(cmd_buffer, 4 + index * 4, va + 32);
+            gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va + 32);
 
             /* Record that the command buffer needs GDS. */
             cmd_buffer->gds_needed = true;
@@ -1940,7 +1940,7 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct 
radv_query_pool *pool,
          va += pipelinestat_block_size + 8;
 
          /* pipeline statistics counter for all streams */
-         gfx10_copy_gds_query(cmd_buffer, 0, va);
+         gfx10_copy_gds_query(cmd_buffer, RADV_NGG_QUERY_PIPELINE_STAT_OFFSET, 
va);
 
          cmd_buffer->state.active_pipeline_gds_queries--;
       }
@@ -1949,11 +1949,11 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, 
struct radv_query_pool *pool,
    case VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT:
       if (cmd_buffer->device->physical_device->use_ngg_streamout) {
          /* generated prim counter */
-         gfx10_copy_gds_query(cmd_buffer,  4 + index * 4, va + 16);
+         gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va + 16);
          radv_emit_write_data_imm(cs, V_370_ME, va + 20, 0x80000000);
 
          /* written prim counter */
-         gfx10_copy_gds_query(cmd_buffer, 20 + index * 4, va + 24);
+         gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_XFB_OFFSET(index), va + 24);
          radv_emit_write_data_imm(cs, V_370_ME, va + 28, 0x80000000);
 
          cmd_buffer->state.active_prims_xfb_gds_queries--;
@@ -1964,7 +1964,7 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct 
radv_query_pool *pool,
    case VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT: {
       if (cmd_buffer->device->physical_device->rad_info.gfx_level >= GFX11) {
          /* On GFX11+, primitives generated query always use GDS. */
-         gfx10_copy_gds_query(cmd_buffer, 4 + index * 4, va + 16);
+         gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va + 16);
          radv_emit_write_data_imm(cs, V_370_ME, va + 20, 0x80000000);
 
          cmd_buffer->state.active_prims_gen_gds_queries--;
@@ -1985,7 +1985,7 @@ emit_end_query(struct radv_cmd_buffer *cmd_buffer, struct 
radv_query_pool *pool,
 
          if (pool->uses_gds) {
             /* generated prim counter */
-            gfx10_copy_gds_query(cmd_buffer, 4 + index * 4, va + 36);
+            gfx10_copy_gds_query(cmd_buffer, 
RADV_NGG_QUERY_PRIM_GEN_OFFSET(index), va + 36);
 
             cmd_buffer->state.active_prims_gen_gds_queries--;
          }

Reply via email to