diff --git a/backends/vulkan/runtime/vk_api/Adapter.cpp b/backends/vulkan/runtime/vk_api/Adapter.cpp index e0b2f1c978b..57fb4252c74 100644 --- a/backends/vulkan/runtime/vk_api/Adapter.cpp +++ b/backends/vulkan/runtime/vk_api/Adapter.cpp @@ -22,7 +22,8 @@ void find_compute_queues( const PhysicalDevice& physical_device, const uint32_t num_queues_to_create, std::vector& queue_create_infos, - std::vector>& queues_to_get) { + std::vector>& queues_to_get, + std::vector>& queue_priorities) { queue_create_infos.reserve(num_queues_to_create); queues_to_get.reserve(num_queues_to_create); @@ -36,14 +37,14 @@ void find_compute_queues( const uint32_t queues_to_init = std::min(remaining_queues, queue_properties.queueCount); - const std::vector queue_priorities(queues_to_init, 1.0f); + queue_priorities.emplace_back(queues_to_init, 1.0f); queue_create_infos.push_back({ VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // sType nullptr, // pNext 0u, // flags family_i, // queueFamilyIndex queues_to_init, // queueCount - queue_priorities.data(), // pQueuePriorities + queue_priorities.back().data(), // pQueuePriorities }); for (size_t queue_i = 0; queue_i < queues_to_init; ++queue_i) { @@ -90,8 +91,13 @@ VkDevice create_logical_device( std::vector queue_create_infos; std::vector> queues_to_get; + std::vector> queue_priorities; find_compute_queues( - physical_device, num_queues_to_create, queue_create_infos, queues_to_get); + physical_device, + num_queues_to_create, + queue_create_infos, + queues_to_get, + queue_priorities); // Create the VkDevice std::vector requested_device_extensions{ @@ -277,8 +283,13 @@ Adapter::Adapter( owns_device_{false} { std::vector queue_create_infos; std::vector> queues_to_get; + std::vector> queue_priorities; find_compute_queues( - physical_device_, num_queues, queue_create_infos, queues_to_get); + physical_device_, + num_queues, + queue_create_infos, + queues_to_get, + queue_priorities); populate_queue_info( physical_device_, device_.handle, queues_to_get, queues_, queue_usage_); }