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