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

Reply via email to