Mesa (main): radv: declare the NGG query argument for primitives generated query

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 9 08:50:09 UTC 2022


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Fri Apr 29 16:25:57 2022 +0200

radv: declare the NGG query argument for primitives generated query

To emulare counting for NGG VS/TES.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15639>

---

 src/amd/vulkan/radv_shader_args.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_shader_args.c b/src/amd/vulkan/radv_shader_args.c
index 42561db6d7c..9c4a61a6249 100644
--- a/src/amd/vulkan/radv_shader_args.c
+++ b/src/amd/vulkan/radv_shader_args.c
@@ -104,11 +104,11 @@ count_ms_user_sgprs(const struct radv_shader_info *info)
 }
 
 static unsigned
-count_ngg_sgprs(const struct radv_shader_info *info, bool has_api_gs)
+count_ngg_sgprs(const struct radv_shader_info *info, bool has_ngg_query)
 {
    unsigned count = 0;
 
-   if (has_api_gs)
+   if (has_ngg_query)
       count += 1; /* ngg_query_state */
    if (info->has_ngg_culling)
       count += 5; /* ngg_culling_settings + 4x ngg_viewport_* */
@@ -150,7 +150,7 @@ allocate_inline_push_consts(const struct radv_shader_info *info,
 static void
 allocate_user_sgprs(enum amd_gfx_level gfx_level, const struct radv_shader_info *info,
                     struct radv_shader_args *args, gl_shader_stage stage, bool has_previous_stage,
-                    gl_shader_stage previous_stage, bool needs_view_index, bool has_api_gs,
+                    gl_shader_stage previous_stage, bool needs_view_index, bool has_ngg_query,
                     struct user_sgpr_info *user_sgpr_info)
 {
    uint8_t user_sgpr_count = 0;
@@ -198,7 +198,7 @@ allocate_user_sgprs(enum amd_gfx_level gfx_level, const struct radv_shader_info
    case MESA_SHADER_GEOMETRY:
       if (has_previous_stage) {
          if (info->is_ngg)
-            user_sgpr_count += count_ngg_sgprs(info, has_api_gs);
+            user_sgpr_count += count_ngg_sgprs(info, has_ngg_query);
 
          if (previous_stage == MESA_SHADER_VERTEX) {
             user_sgpr_count += count_vs_user_sgprs(info);
@@ -450,11 +450,10 @@ declare_ps_input_vgprs(const struct radv_shader_info *info, struct radv_shader_a
 
 static void
 declare_ngg_sgprs(const struct radv_shader_info *info, struct radv_shader_args *args,
-                  bool has_api_gs)
+                  bool has_ngg_query)
 {
-   if (has_api_gs) {
+   if (has_ngg_query)
       ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ngg_query_state);
-   }
 
    if (info->has_ngg_culling) {
       ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_INT, &args->ngg_culling_settings);
@@ -531,7 +530,7 @@ radv_declare_shader_args(enum amd_gfx_level gfx_level, const struct radv_pipelin
 {
    struct user_sgpr_info user_sgpr_info;
    bool needs_view_index = info->uses_view_index;
-   bool has_api_gs = stage == MESA_SHADER_GEOMETRY;
+   bool has_ngg_query = stage == MESA_SHADER_GEOMETRY || key->primitives_generated_query;
 
    if (gfx_level >= GFX10 && info->is_ngg && stage != MESA_SHADER_GEOMETRY) {
       /* Handle all NGG shaders as GS to simplify the code here. */
@@ -546,7 +545,7 @@ radv_declare_shader_args(enum amd_gfx_level gfx_level, const struct radv_pipelin
       args->user_sgprs_locs.shader_data[i].sgpr_idx = -1;
 
    allocate_user_sgprs(gfx_level, info, args, stage, has_previous_stage, previous_stage,
-                       needs_view_index, has_api_gs, &user_sgpr_info);
+                       needs_view_index, has_ngg_query, &user_sgpr_info);
 
    if (args->explicit_scratch_args) {
       ac_add_arg(&args->ac, AC_ARG_SGPR, 2, AC_ARG_CONST_DESC_PTR, &args->ring_offsets);
@@ -740,7 +739,7 @@ radv_declare_shader_args(enum amd_gfx_level gfx_level, const struct radv_pipelin
          }
 
          if (info->is_ngg) {
-            declare_ngg_sgprs(info, args, has_api_gs);
+            declare_ngg_sgprs(info, args, has_ngg_query);
          }
 
          ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_INT, &args->ac.gs_vtx_offset[0]);



More information about the mesa-commit mailing list