From 43108824ecc93dc4f666efcde04d0916feef8794 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 28 Jan 2021 11:44:43 +0000 Subject: [PATCH] radv: fix max_lds_per_simd on GFX10 num_simd_per_compute_unit was the number of SIMDs per compute unit, but lds_size_per_workgroup was the bytes of LDS per WGP. Signed-off-by: Rhys Perry Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_shader.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index 2c64c9a7f4a..46a14b7a2ac 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -1599,7 +1599,11 @@ radv_get_max_waves(struct radv_device *device, device->physical_device->rad_info.num_physical_wave64_vgprs_per_simd / vgprs); } - unsigned max_lds_per_simd = device->physical_device->rad_info.lds_size_per_workgroup / device->physical_device->rad_info.num_simd_per_compute_unit; + unsigned simd_per_workgroup = device->physical_device->rad_info.num_simd_per_compute_unit; + if (chip_class >= GFX10) + simd_per_workgroup *= 2; /* like lds_size_per_workgroup, assume WGP on GFX10+ */ + + unsigned max_lds_per_simd = device->physical_device->rad_info.lds_size_per_workgroup / simd_per_workgroup; if (lds_per_wave) max_simd_waves = MIN2(max_simd_waves, max_lds_per_simd / lds_per_wave);