Suppress Vulkan Dynamic Rendering path on PowerVR There's a known driver issue with Imagination devices that can cause a use-after-free when the dynamic rendering Vulkan codepath is used. Blocklist dynamic rendering on Imagination GPUs to avoid the issue. Fixes: 529878021 Change-Id: I8d41e6d521c90a0b76e6a1033da7947a9ca5513c Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/324115 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp index 0a8b8aa..be51e7b 100644 --- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp +++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -987,13 +987,14 @@ // because they affect whether or not the MSAARenderToSingleSampled feature is available. // Use dynamic rendering by default if the corresponding extension is available. - // Also disable on older Intel devices and ARM Mali-G68 devices which have been observed to have - // driver issues with the dynamic rendering path. + // Also disable on older Intel devices, ARM Mali-G68 devices, and PowerVR devices, all of which + // have been observed to have driver issues with the dynamic rendering path. if (!GetDeviceInfo().HasExt(DeviceExt::DynamicRendering) || GetDeviceInfo().dynamicRenderingFeatures.dynamicRendering == VK_FALSE || (gpu_info::IsIntel(GetVendorId()) && gpu_info::GetIntelGen(GetVendorId(), GetDeviceId()) <= gpu_info::IntelGen::Gen9) || - (gpu_info::IsARM(GetVendorId()) && gpu_info::IsMaliG68(GetDeviceId()))) { + (gpu_info::IsARM(GetVendorId()) && gpu_info::IsMaliG68(GetDeviceId())) || + gpu_info::IsImgTec(GetVendorId())) { adapterToggles->ForceSet(Toggle::VulkanUseDynamicRendering, false); } else { adapterToggles->Default(Toggle::VulkanUseDynamicRendering, true);