From: Rhys Perry Date: Thu, 3 Dec 2020 17:38:51 +0000 (+0000) Subject: radv: workaround games which assume full subgroups if cswave32 is enabled X-Git-Tag: upstream/21.0.0~545 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cacce76db9b4e4da516d692208280e74fb2437ab;p=platform%2Fupstream%2Fmesa.git radv: workaround games which assume full subgroups if cswave32 is enabled This assumption becomes incorrect with RADV_PERFTEST=cswave32. Games include Detroit: Become Human and Doom Eternal. Signed-off-by: Rhys Perry Reviewed-by: Samuel Pitoiset Part-of: --- diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 0f37678..92bace2 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -2776,6 +2776,18 @@ radv_fill_shader_keys(struct radv_device *device, if (!subgroup_size) subgroup_size = device->physical_device->cs_wave_size; + unsigned local_size = nir[MESA_SHADER_COMPUTE]->info.cs.local_size[0] * + nir[MESA_SHADER_COMPUTE]->info.cs.local_size[1] * + nir[MESA_SHADER_COMPUTE]->info.cs.local_size[2]; + + /* Games don't always request full subgroups when they should, + * which can cause bugs if cswave32 is enabled. + */ + if (device->physical_device->cs_wave_size == 32 && + nir[MESA_SHADER_COMPUTE]->info.cs.uses_wide_subgroup_intrinsics && + !req_subgroup_size && local_size % RADV_SUBGROUP_SIZE == 0) + require_full_subgroups = true; + if (require_full_subgroups && !req_subgroup_size) { /* don't use wave32 pretending to be wave64 */ subgroup_size = RADV_SUBGROUP_SIZE;