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);