From 5aec6d05b037fcc95da8b8a0dbc496411ae6f8dd Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Mon, 14 Oct 2024 16:39:33 +0200 Subject: [PATCH] vk: (lr) use one vk::DeviceQueueCreateInfo when possible Using 2 with the same queue index causes a validation error and crash. --- core/rend/vulkan/vk_context_lr.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/core/rend/vulkan/vk_context_lr.cpp b/core/rend/vulkan/vk_context_lr.cpp index a49eeeebb..84a67f0f9 100644 --- a/core/rend/vulkan/vk_context_lr.cpp +++ b/core/rend/vulkan/vk_context_lr.cpp @@ -216,21 +216,18 @@ bool VkCreateDevice(retro_vulkan_context* context, VkInstance instance, VkPhysic vk::DeviceQueueCreateInfo(vk::DeviceQueueCreateFlags(), context->queue_family_index, 1, &queuePriority), vk::DeviceQueueCreateInfo(vk::DeviceQueueCreateFlags(), context->presentation_queue_family_index, 1, &queuePriority), }; - - - vk::Device newDevice{}; - if (getPhysicalDeviceProperties2Supported) - { - vk::DeviceCreateInfo deviceCreateInfo(vk::DeviceCreateFlags(), deviceQueueCreateInfo, - nullptr, enabledExtensions); - deviceCreateInfo.pNext = &featuresChain; - newDevice = physicalDevice.createDevice(deviceCreateInfo); - } + bool singleQueue = context->queue_family_index == context->presentation_queue_family_index; + vk::DeviceCreateInfo deviceCreateInfo; + if (singleQueue) + deviceCreateInfo = vk::DeviceCreateInfo(vk::DeviceCreateFlags(), deviceQueueCreateInfo[0], nullptr, enabledExtensions); else - { - newDevice = physicalDevice.createDevice(vk::DeviceCreateInfo(vk::DeviceCreateFlags(), deviceQueueCreateInfo, - nullptr, enabledExtensions, &features)); - } + deviceCreateInfo = vk::DeviceCreateInfo(vk::DeviceCreateFlags(), deviceQueueCreateInfo, nullptr, enabledExtensions); + + if (getPhysicalDeviceProperties2Supported) + deviceCreateInfo.pNext = &featuresChain; + else + deviceCreateInfo.setPEnabledFeatures(&features); + vk::Device newDevice = physicalDevice.createDevice(deviceCreateInfo); context->device = (VkDevice)newDevice; #if VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1