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(