Restrict Vulkan Dynamic Rendering on Mali-G68 GPUs Dynamic Rendering was crashing in the driver on Mali-G68 GPUs. Disabling Dynamic Rendering on those devices until we can figure out a workaround. Bug: 486866985 Change-Id: I42db9ba6c2915b2998e169cc5a9381dec9a64353 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/293076 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Brandon Jones <bajones@chromium.org> Reviewed-by: Kyle Charbonneau <kylechar@google.com>
diff --git a/src/dawn/common/GPUInfo.cpp b/src/dawn/common/GPUInfo.cpp index 8fe746b..5deab25 100644 --- a/src/dawn/common/GPUInfo.cpp +++ b/src/dawn/common/GPUInfo.cpp
@@ -48,6 +48,9 @@ // gen9 const std::array<PCIDeviceID, 2> IrisPlus655 = {{0x3EA5, 0x3EA8}}; +// ARM +const PCIDeviceID kMaliG68 = 0x92041010; + } // anonymous namespace DriverVersion::DriverVersion() = default; @@ -150,4 +153,9 @@ } } +// ARM GPUs +bool IsMaliG68(PCIDeviceID deviceId) { + return deviceId == kMaliG68; +} + } // namespace dawn::gpu_info
diff --git a/src/dawn/common/GPUInfo.h b/src/dawn/common/GPUInfo.h index 49047c3..511eada 100644 --- a/src/dawn/common/GPUInfo.h +++ b/src/dawn/common/GPUInfo.h
@@ -97,5 +97,9 @@ IntelGen GetIntelGen(PCIVendorID venderId, PCIDeviceID deviceId); QualcommACPIGen GetQualcommACPIGen(PCIVendorID venderId, PCIDeviceID deviceId); + +// ARM +bool IsMaliG68(PCIDeviceID deviceId); + } // namespace dawn::gpu_info #endif // SRC_DAWN_COMMON_GPUINFO_H_
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp index 55e1aaf..9184240 100644 --- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp +++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -957,12 +957,13 @@ // 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, which have been observed to have driver issues with - // the dynamic rendering path. + // Also disable on older Intel devices and ARM Mali-G68 devices 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::GetIntelGen(GetVendorId(), GetDeviceId()) <= gpu_info::IntelGen::Gen9) || + (gpu_info::IsARM(GetVendorId()) && gpu_info::IsMaliG68(GetDeviceId()))) { adapterToggles->ForceSet(Toggle::VulkanUseDynamicRendering, false); } else { adapterToggles->Default(Toggle::VulkanUseDynamicRendering, true);