From 257f07f499f8b7794f4e4ca49fda98ccdb10a396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 24 Nov 2023 18:18:17 -0500 Subject: [PATCH] radeonsi: clean up how debug flags and shader profiles determine the wave size - remove DBG_W32_PS_DISCARD - just return the wave size instead of setting local variables dbg_wave_size and profile_wave_size Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/radeonsi/si_pipe.c | 1 - src/gallium/drivers/radeonsi/si_pipe.h | 1 - .../drivers/radeonsi/si_state_shaders.cpp | 36 +++++-------------- 3 files changed, 8 insertions(+), 30 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 5a2111d6698..c00fb1e923b 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -56,7 +56,6 @@ static const struct debug_named_value radeonsi_debug_options[] = { /* Shader compiler options the shader cache should be aware of: */ {"w32ge", DBG(W32_GE), "Use Wave32 for vertex, tessellation, and geometry shaders."}, {"w32ps", DBG(W32_PS), "Use Wave32 for pixel shaders."}, - {"w32psdiscard", DBG(W32_PS_DISCARD), "Use Wave32 for pixel shaders even if they contain discard and LLVM is buggy."}, {"w32cs", DBG(W32_CS), "Use Wave32 for computes shaders."}, {"w64ge", DBG(W64_GE), "Use Wave64 for vertex, tessellation, and geometry shaders."}, {"w64ps", DBG(W64_PS), "Use Wave64 for pixel shaders."}, diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 5cf091451b6..20fdcf180ee 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -196,7 +196,6 @@ enum /* Shader compiler options the shader cache should be aware of: */ DBG_W32_GE, DBG_W32_PS, - DBG_W32_PS_DISCARD, DBG_W32_CS, DBG_W64_GE, DBG_W64_PS, diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index ebb846d1e39..18646a5f00c 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -48,44 +48,24 @@ unsigned si_determine_wave_size(struct si_screen *sscreen, struct si_shader *sha info->base.workgroup_size[2]) % 64 != 0) return 32; - /* Debug flags. */ - unsigned dbg_wave_size = 0; + /* AMD_DEBUG wave flags override everything else. */ if (sscreen->debug_flags & (stage == MESA_SHADER_COMPUTE ? DBG(W32_CS) : - stage == MESA_SHADER_FRAGMENT ? DBG(W32_PS) | DBG(W32_PS_DISCARD) : DBG(W32_GE))) - dbg_wave_size = 32; + stage == MESA_SHADER_FRAGMENT ? DBG(W32_PS) : DBG(W32_GE))) + return 32; if (sscreen->debug_flags & (stage == MESA_SHADER_COMPUTE ? DBG(W64_CS) : - stage == MESA_SHADER_FRAGMENT ? DBG(W64_PS) : DBG(W64_GE))) { - assert(!dbg_wave_size); - dbg_wave_size = 64; - } + stage == MESA_SHADER_FRAGMENT ? DBG(W64_PS) : DBG(W64_GE))) + return 64; /* Shader profiles. */ - unsigned profile_wave_size = 0; if (info && info->options & SI_PROFILE_WAVE32) - profile_wave_size = 32; + return 32; if (info && info->options & SI_PROFILE_GFX10_WAVE64 && - (sscreen->info.gfx_level == GFX10 || sscreen->info.gfx_level == GFX10_3)) { - assert(!profile_wave_size); - profile_wave_size = 64; - } - - if (profile_wave_size) { - /* Only debug flags override shader profiles. */ - if (dbg_wave_size) - return dbg_wave_size; - - return profile_wave_size; - } - - /* Debug flags except w32psdiscard don't override the discard bug workaround, - * but they override everything else. - */ - if (dbg_wave_size) - return dbg_wave_size; + (sscreen->info.gfx_level == GFX10 || sscreen->info.gfx_level == GFX10_3)) + return 64; /* Gfx10: Pixel shaders without interp instructions don't suffer from reduced interpolation * performance in Wave32, so use Wave32. This helps Piano and Voloplosion.