Don't call EnumeratePhysicalDevices with count = 0
Some PowerVR devices return a device count of 0, which may be causing
a crash on the subsequent vkEnumeratePhysicalDevices call, so only call
it if at least one physical device is reported.
BUG: chromium:1475146
Change-Id: I93d3fe606e0f9746baf4683beaa4653680bcbeda
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/153440
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/native/vulkan/VulkanInfo.cpp b/src/dawn/native/vulkan/VulkanInfo.cpp
index f4a5e84..9acda0f 100644
--- a/src/dawn/native/vulkan/VulkanInfo.cpp
+++ b/src/dawn/native/vulkan/VulkanInfo.cpp
@@ -132,9 +132,15 @@
}
std::vector<VkPhysicalDevice> vkPhysicalDevices(count);
- DAWN_TRY(CheckVkSuccess(
- vkFunctions.EnumeratePhysicalDevices(instance, &count, vkPhysicalDevices.data()),
- "vkEnumeratePhysicalDevices"));
+
+ // crbug.com/1475146: Some PowerVR devices return a device count of 0, which may be causing a
+ // crash on the subsequent vkEnumeratePhysicalDevices call, so only call it if at least one
+ // physical device is reported.
+ if (count > 0) {
+ DAWN_TRY(CheckVkSuccess(
+ vkFunctions.EnumeratePhysicalDevices(instance, &count, vkPhysicalDevices.data()),
+ "vkEnumeratePhysicalDevices"));
+ }
return std::move(vkPhysicalDevices);
}