From bd04ff972e967f94a4be6a2f795298ddbb986869 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 31 Aug 2021 12:28:20 -0700 Subject: [PATCH] venus: initialize physical devices once Avoid re-enumeration when there is no device or no supported device. Signed-off-by: Chia-I Wu Reviewed-by: Ryan Neph Reviewed-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_instance.c | 2 +- src/virtio/vulkan/vn_instance.h | 1 + src/virtio/vulkan/vn_physical_device.c | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c index 5e1b63a4086..3be1a6ca970 100644 --- a/src/virtio/vulkan/vn_instance.c +++ b/src/virtio/vulkan/vn_instance.c @@ -778,7 +778,7 @@ vn_DestroyInstance(VkInstance _instance, if (!instance) return; - if (instance->physical_device.devices) { + if (instance->physical_device.initialized) { for (uint32_t i = 0; i < instance->physical_device.device_count; i++) vn_physical_device_fini(&instance->physical_device.devices[i]); vk_free(alloc, instance->physical_device.devices); diff --git a/src/virtio/vulkan/vn_instance.h b/src/virtio/vulkan/vn_instance.h index 82a03bf095d..226cc0e2da8 100644 --- a/src/virtio/vulkan/vn_instance.h +++ b/src/virtio/vulkan/vn_instance.h @@ -73,6 +73,7 @@ struct vn_instance { struct { mtx_t mutex; + bool initialized; struct vn_physical_device *devices; uint32_t device_count; diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index 46bd8e5393c..6ce785dd138 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -1267,10 +1267,11 @@ vn_instance_enumerate_physical_devices(struct vn_instance *instance) mtx_lock(&instance->physical_device.mutex); - if (instance->physical_device.devices) { + if (instance->physical_device.initialized) { result = VK_SUCCESS; goto out; } + instance->physical_device.initialized = true; uint32_t count; result = vn_call_vkEnumeratePhysicalDevices(