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 <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26307>
This commit is contained in:
Marek Olšák 2023-11-24 18:18:17 -05:00 committed by Marge Bot
parent 716b521515
commit 257f07f499
3 changed files with 8 additions and 30 deletions

View file

@ -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."},

View file

@ -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,

View file

@ -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.