Mesa (main): radeonsi: rename si_get_shader_wave_size and make it non-inline

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 26 11:57:32 UTC 2021


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Wed Nov 24 13:21:18 2021 -0500

radeonsi: rename si_get_shader_wave_size and make it non-inline

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13878>

---

 src/gallium/drivers/radeonsi/si_compute.c         |  2 +-
 src/gallium/drivers/radeonsi/si_compute_blit.c    |  4 +--
 src/gallium/drivers/radeonsi/si_get.c             |  2 +-
 src/gallium/drivers/radeonsi/si_pipe.h            | 24 ------------------
 src/gallium/drivers/radeonsi/si_shader.h          |  1 +
 src/gallium/drivers/radeonsi/si_shader_llvm_gs.c  |  2 +-
 src/gallium/drivers/radeonsi/si_shaderlib_tgsi.c  |  2 +-
 src/gallium/drivers/radeonsi/si_state_shaders.cpp | 30 ++++++++++++++++++++---
 8 files changed, 34 insertions(+), 33 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c
index 29c2180d010..e442ba17c79 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -239,7 +239,7 @@ static void *si_create_compute_state(struct pipe_context *ctx, const struct pipe
       si_sampler_and_image_descriptors_idx(PIPE_SHADER_COMPUTE);
    sel->info.base.shared_size = cso->req_local_mem;
    program->shader.selector = &program->sel;
-   program->shader.wave_size = si_get_shader_wave_size(sscreen, &program->shader);
+   program->shader.wave_size = si_determine_wave_size(sscreen, &program->shader);
    program->ir_type = cso->ir_type;
    program->private_size = cso->req_private_mem;
    program->input_size = cso->req_input_mem;
diff --git a/src/gallium/drivers/radeonsi/si_compute_blit.c b/src/gallium/drivers/radeonsi/si_compute_blit.c
index 0ab9993a7e0..917e0092c7d 100644
--- a/src/gallium/drivers/radeonsi/si_compute_blit.c
+++ b/src/gallium/drivers/radeonsi/si_compute_blit.c
@@ -306,7 +306,7 @@ static void si_compute_do_clear_or_copy(struct si_context *sctx, struct pipe_res
    unsigned instructions_per_thread = MAX2(1, dwords_per_thread / 4);
    unsigned dwords_per_instruction = dwords_per_thread / instructions_per_thread;
    /* The shader declares the block size like this: */
-   unsigned block_size = si_get_shader_wave_size(sctx->screen, NULL);
+   unsigned block_size = si_determine_wave_size(sctx->screen, NULL);
    unsigned dwords_per_wave = dwords_per_thread * block_size;
 
    unsigned num_dwords = size / 4;
@@ -599,7 +599,7 @@ void si_compute_copy_image(struct si_context *sctx, struct pipe_resource *dst, u
       info.block[1] = ssrc->surface.u.gfx9.color.dcc_block_height;
       info.block[2] = ssrc->surface.u.gfx9.color.dcc_block_depth;
 
-      unsigned default_wave_size = si_get_shader_wave_size(sctx->screen, NULL);;
+      unsigned default_wave_size = si_determine_wave_size(sctx->screen, NULL);;
 
       /* Make sure the block size is at least the same as wave size. */
       while (info.block[0] * info.block[1] * info.block[2] < default_wave_size) {
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
index a931af4b3d4..0ac3ec45ffd 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -881,7 +881,7 @@ static int si_get_compute_param(struct pipe_screen *screen, enum pipe_shader_ir
    case PIPE_COMPUTE_CAP_SUBGROUP_SIZE:
       if (ret) {
          uint32_t *subgroup_size = ret;
-         *subgroup_size = si_get_shader_wave_size(sscreen, NULL);
+         *subgroup_size = si_determine_wave_size(sscreen, NULL);
       }
       return sizeof(uint32_t);
    case PIPE_COMPUTE_CAP_MAX_VARIABLE_THREADS_PER_BLOCK:
diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
index a7fdfccc086..f01abc3d62a 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -1977,30 +1977,6 @@ static inline void radeon_add_to_gfx_buffer_list_check_mem(struct si_context *sc
    radeon_add_to_buffer_list(sctx, &sctx->gfx_cs, bo, usage);
 }
 
-static inline unsigned si_get_shader_wave_size(struct si_screen *sscreen, struct si_shader *shader)
-{
-   /* There are a few uses that pass shader=NULL here, expecting the default compute wave size. */
-   struct si_shader_info *info = shader ? &shader->selector->info : NULL;
-   gl_shader_stage stage = info ? info->stage : MESA_SHADER_COMPUTE;
-
-   if (sscreen->info.chip_class < GFX10)
-      return 64;
-
-   /* Legacy GS only supports Wave64. */
-   if ((stage == MESA_SHADER_VERTEX && shader->key.ge.as_es && !shader->key.ge.as_ngg) ||
-       (stage == MESA_SHADER_TESS_EVAL && shader->key.ge.as_es && !shader->key.ge.as_ngg) ||
-       (stage == MESA_SHADER_GEOMETRY && !shader->key.ge.as_ngg))
-      return 64;
-
-   if (stage == MESA_SHADER_COMPUTE)
-      return sscreen->debug_flags & DBG(W32_CS) ? 32 : 64;
-
-   if (stage == MESA_SHADER_FRAGMENT)
-      return sscreen->debug_flags & DBG(W32_PS) ? 32 : 64;
-
-   return sscreen->debug_flags & DBG(W32_GE) ? 32 : 64;
-}
-
 static inline void si_select_draw_vbo(struct si_context *sctx)
 {
    pipe_draw_vbo_func draw_vbo = sctx->draw_vbo[!!sctx->shader.tes.cso]
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
index d94490a5a1a..d410b7a547c 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -953,6 +953,7 @@ void si_nir_late_opts(nir_shader *nir);
 char *si_finalize_nir(struct pipe_screen *screen, void *nirptr);
 
 /* si_state_shaders.cpp */
+unsigned si_determine_wave_size(struct si_screen *sscreen, struct si_shader *shader);
 void gfx9_get_gs_info(struct si_shader_selector *es, struct si_shader_selector *gs,
                       struct gfx9_gs_info *out);
 bool gfx10_is_ngg_passthrough(struct si_shader *shader);
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
index 73c3f040698..f3cc145c8a7 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
@@ -425,7 +425,7 @@ struct si_shader *si_generate_gs_copy_shader(struct si_screen *sscreen,
 
    shader->selector = gs_selector;
    shader->is_gs_copy_shader = true;
-   shader->wave_size = si_get_shader_wave_size(sscreen, shader);
+   shader->wave_size = si_determine_wave_size(sscreen, shader);
 
    si_llvm_context_init(&ctx, sscreen, compiler, shader->wave_size);
    ctx.shader = shader;
diff --git a/src/gallium/drivers/radeonsi/si_shaderlib_tgsi.c b/src/gallium/drivers/radeonsi/si_shaderlib_tgsi.c
index 68466cd88d6..f0181f6b98c 100644
--- a/src/gallium/drivers/radeonsi/si_shaderlib_tgsi.c
+++ b/src/gallium/drivers/radeonsi/si_shaderlib_tgsi.c
@@ -134,7 +134,7 @@ void *si_create_dma_compute_shader(struct pipe_context *ctx, unsigned num_dwords
    if (!ureg)
       return NULL;
 
-   unsigned default_wave_size = si_get_shader_wave_size(sscreen, NULL);
+   unsigned default_wave_size = si_determine_wave_size(sscreen, NULL);
 
    ureg_property(ureg, TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH, default_wave_size);
    ureg_property(ureg, TGSI_PROPERTY_CS_FIXED_BLOCK_HEIGHT, 1);
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp
index 07bb806f857..eaf3cf28bdb 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp
@@ -37,6 +37,30 @@
 #include "util/u_prim.h"
 #include "tgsi/tgsi_from_mesa.h"
 
+unsigned si_determine_wave_size(struct si_screen *sscreen, struct si_shader *shader)
+{
+   /* There are a few uses that pass shader=NULL here, expecting the default compute wave size. */
+   struct si_shader_info *info = shader ? &shader->selector->info : NULL;
+   gl_shader_stage stage = info ? info->stage : MESA_SHADER_COMPUTE;
+
+   if (sscreen->info.chip_class < GFX10)
+      return 64;
+
+   /* Legacy GS only supports Wave64. */
+   if ((stage == MESA_SHADER_VERTEX && shader->key.ge.as_es && !shader->key.ge.as_ngg) ||
+       (stage == MESA_SHADER_TESS_EVAL && shader->key.ge.as_es && !shader->key.ge.as_ngg) ||
+       (stage == MESA_SHADER_GEOMETRY && !shader->key.ge.as_ngg))
+      return 64;
+
+   if (stage == MESA_SHADER_COMPUTE)
+      return sscreen->debug_flags & DBG(W32_CS) ? 32 : 64;
+
+   if (stage == MESA_SHADER_FRAGMENT)
+      return sscreen->debug_flags & DBG(W32_PS) ? 32 : 64;
+
+   return sscreen->debug_flags & DBG(W32_GE) ? 32 : 64;
+}
+
 /* SHADER_CACHE */
 
 /**
@@ -2270,7 +2294,7 @@ static bool si_check_missing_main_part(struct si_screen *sscreen, struct si_shad
          main_part->key.ge.as_ngg = key->ge.as_ngg;
       }
       main_part->is_monolithic = false;
-      main_part->wave_size = si_get_shader_wave_size(sscreen, main_part);
+      main_part->wave_size = si_determine_wave_size(sscreen, main_part);
 
       if (!si_compile_shader(sscreen, compiler_state->compiler, main_part,
                              &compiler_state->debug)) {
@@ -2447,7 +2471,7 @@ current_not_ready:
 
    shader->selector = sel;
    *((SHADER_KEY_TYPE*)&shader->key) = *key;
-   shader->wave_size = si_get_shader_wave_size(sscreen, shader);
+   shader->wave_size = si_determine_wave_size(sscreen, shader);
    shader->compiler_ctx_state.compiler = &sctx->compiler;
    shader->compiler_ctx_state.debug = sctx->debug;
    shader->compiler_ctx_state.is_debug_context = sctx->is_debug;
@@ -2714,7 +2738,7 @@ static void si_init_shader_selector_async(void *job, void *gdata, int thread_ind
            sel->info.stage == MESA_SHADER_TESS_EVAL || sel->info.stage == MESA_SHADER_GEOMETRY))
          shader->key.ge.as_ngg = 1;
 
-      shader->wave_size = si_get_shader_wave_size(sscreen, shader);
+      shader->wave_size = si_determine_wave_size(sscreen, shader);
 
       if (sel->nir) {
          if (sel->info.stage <= MESA_SHADER_GEOMETRY) {



More information about the mesa-commit mailing list