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