From c35d53667ec89944be5fe5496d0e570a122f80c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Sch=C3=BCrmann?= Date: Fri, 10 Oct 2025 11:32:26 +0200 Subject: [PATCH] radv: fix max_waves calculation for tesselation Totals from 337 (0.42% of 79839) affected shaders: (Navi48) MaxWaves: 8084 -> 4474 (-44.66%) Part-of: --- src/amd/vulkan/radv_shader.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 9f0674290e7..cfb76bf533f 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2749,16 +2749,12 @@ radv_get_max_waves(const struct radv_device *device, const struct ac_shader_conf const uint8_t wave_size = info->wave_size; mesa_shader_stage stage = info->stage; unsigned max_simd_waves = gpu_info->max_waves_per_simd; - unsigned lds_per_workgroup = 0; - unsigned waves_per_workgroup = 1; + unsigned lds_per_workgroup = align(conf->lds_size * gpu_info->lds_encode_granularity, + gpu_info->lds_alloc_granularity); + unsigned waves_per_workgroup = DIV_ROUND_UP(info->workgroup_size, wave_size); if (stage == MESA_SHADER_FRAGMENT) { - lds_per_workgroup = conf->lds_size * gpu_info->lds_encode_granularity + info->ps.num_inputs * 48; - lds_per_workgroup = align(lds_per_workgroup, gpu_info->lds_alloc_granularity); - } else if (stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_TASK) { - unsigned max_workgroup_size = info->workgroup_size; - lds_per_workgroup = align(conf->lds_size * gpu_info->lds_encode_granularity, gpu_info->lds_alloc_granularity); - waves_per_workgroup = DIV_ROUND_UP(max_workgroup_size, wave_size); + lds_per_workgroup += align(info->ps.num_inputs * 48, gpu_info->lds_alloc_granularity); } if (conf->num_sgprs && gfx_level < GFX10) {