Module: Mesa Branch: main Commit: b3aeaee5eb5e5f211b045eb3b96fcca6a55455e4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b3aeaee5eb5e5f211b045eb3b96fcca6a55455e4
Author: Samuel Pitoiset <[email protected]> Date: Wed Jul 19 09:35:43 2023 +0200 radv: implement nir_intrinsic_atomic_add_gs_invocation_count_amd Signed-off-by: Samuel Pitoiset <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24231> --- src/amd/vulkan/nir/radv_nir_lower_abi.c | 4 ++-- src/amd/vulkan/radv_constants.h | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/amd/vulkan/nir/radv_nir_lower_abi.c b/src/amd/vulkan/nir/radv_nir_lower_abi.c index b0252ba977b..247d050f3c7 100644 --- a/src/amd/vulkan/nir/radv_nir_lower_abi.c +++ b/src/amd/vulkan/nir/radv_nir_lower_abi.c @@ -361,9 +361,9 @@ lower_abi_instr(nir_builder *b, nir_instr *instr, void *state) nir_imm_int(b, 0x100)); break; case nir_intrinsic_atomic_add_gs_invocation_count_amd: - /* TODO: add gs invocation query emulation. */ + nir_gds_atomic_add_amd(b, 32, intrin->src[0].ssa, nir_imm_int(b, RADV_SHADER_QUERY_GS_INVOCATION_OFFSET), + nir_imm_int(b, 0x100)); break; - case nir_intrinsic_load_streamout_config_amd: replacement = ac_nir_load_arg(b, &s->args->ac, s->args->ac.streamout_config); break; diff --git a/src/amd/vulkan/radv_constants.h b/src/amd/vulkan/radv_constants.h index f508e1e5828..afbdebebf77 100644 --- a/src/amd/vulkan/radv_constants.h +++ b/src/amd/vulkan/radv_constants.h @@ -144,12 +144,14 @@ /* Shader GDS counters: * offset 0| 4| 8|12 - reserved for NGG streamout counters * offset 16 - number of primitives generated by geometry shader invocations - * offset 20|24|28|32 - generated primitive counter for stream 0|1|2|3 - * offset 36|40|44|48 - written primitive counter for stream 0|1|2|3 + * offset 20 - number of geometry shader invocations + * offset 24|28|32|36 - generated primitive counter for stream 0|1|2|3 + * offset 40|44|48|52 - written primitive counter for stream 0|1|2|3 */ #define RADV_SHADER_QUERY_GS_PRIM_EMIT_OFFSET 16 -#define RADV_SHADER_QUERY_PRIM_GEN_OFFSET(stream) (20 + stream * 4) -#define RADV_SHADER_QUERY_PRIM_XFB_OFFSET(stream) (36 + stream * 4) +#define RADV_SHADER_QUERY_GS_INVOCATION_OFFSET 20 +#define RADV_SHADER_QUERY_PRIM_GEN_OFFSET(stream) (24 + stream * 4) +#define RADV_SHADER_QUERY_PRIM_XFB_OFFSET(stream) (40 + stream * 4) /* Number of samples for line smooth lowering (hw requirement). */ #define RADV_NUM_SMOOTH_AA_SAMPLES 4
