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--; }
