Commit 2c50d50b authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

Vulkan: fix crash with remote desktop environment

For remote desktop environment, vkEnumeratePhysicalDevices() will
fail to get any available GPU. In this case, we should fallback
to GL instead of continuing using Vulkan.

Bug: 1062696
Change-Id: I610a62364cb7ca9120451edfec1ef3f97f0a8d53
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2110080
Commit-Queue: Peng Huang <penghuang@chromium.org>
Reviewed-by: default avatarVasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#751771}
parent 81022a2f
......@@ -237,15 +237,22 @@ bool VulkanInstance::Initialize(
}
#endif
CollectInfo();
if (!CollectInfo())
return false;
return true;
}
void VulkanInstance::CollectInfo() {
bool VulkanInstance::CollectInfo() {
uint32_t count = 0;
VkResult result = vkEnumeratePhysicalDevices(vk_instance_, &count, nullptr);
if (result != VK_SUCCESS) {
DLOG(ERROR) << "vkEnumeratePhysicalDevices failed: " << result;
return false;
}
if (!count) {
DLOG(ERROR) << "vkEnumeratePhysicalDevices returns zero device.";
return false;
}
std::vector<VkPhysicalDevice> physical_devices(count);
......@@ -253,7 +260,7 @@ void VulkanInstance::CollectInfo() {
vkEnumeratePhysicalDevices(vk_instance_, &count, physical_devices.data());
if (VK_SUCCESS != result) {
DLOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << result;
return;
return false;
}
vulkan_info_.physical_devices.reserve(count);
......@@ -307,6 +314,7 @@ void VulkanInstance::CollectInfo() {
info.queue_families.data());
}
}
return true;
}
void VulkanInstance::Destroy() {
......
......@@ -35,7 +35,7 @@ class VULKAN_EXPORT VulkanInstance {
VkInstance vk_instance() { return vk_instance_; }
private:
void CollectInfo();
bool CollectInfo();
void Destroy();
VulkanInfo vulkan_info_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment