From f2ce0b998b95f7b6fca738e2c3cd69eb1f8b7e1d Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Sun, 16 May 2021 18:04:34 +0200 Subject: [PATCH] [#18]Fix dead pointers in queue device create infi --- include/vkcv/Queues.hpp | 3 ++- src/vkcv/Core.cpp | 3 ++- src/vkcv/Queues.cpp | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/vkcv/Queues.hpp b/include/vkcv/Queues.hpp index 9b6cbae0..c1cca709 100644 --- a/include/vkcv/Queues.hpp +++ b/include/vkcv/Queues.hpp @@ -21,6 +21,7 @@ namespace vkcv { QueueFamilyIndices getQueueFamilyIndices(const vk::PhysicalDevice& physicalDevice, const vk::SurfaceKHR surface); // TODO: try to use specialised queues - std::vector<vk::DeviceQueueCreateInfo> createDeviceQueueCreateInfo(const QueueFamilyIndices& indices); + std::vector<vk::DeviceQueueCreateInfo> createDeviceQueueCreateInfo(const QueueFamilyIndices& indices, + std::vector<float> *outQueuePriorities); } diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index a8a5a6c1..da17d6ec 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -202,7 +202,8 @@ namespace vkcv const vk::SurfaceKHR surface = createSurface(window.getWindow(), instance, physicalDevice); const QueueFamilyIndices queueFamilyIndices = getQueueFamilyIndices(physicalDevice, surface); - const std::vector<vk::DeviceQueueCreateInfo> qCreateInfos = createDeviceQueueCreateInfo(queueFamilyIndices); + std::vector<float> queuePriorities; + const std::vector<vk::DeviceQueueCreateInfo> qCreateInfos = createDeviceQueueCreateInfo(queueFamilyIndices, &queuePriorities); vk::DeviceCreateInfo deviceCreateInfo( vk::DeviceCreateFlags(), diff --git a/src/vkcv/Queues.cpp b/src/vkcv/Queues.cpp index a0b7967f..36b3a0a0 100644 --- a/src/vkcv/Queues.cpp +++ b/src/vkcv/Queues.cpp @@ -45,7 +45,8 @@ namespace vkcv { return indices; } - std::vector<vk::DeviceQueueCreateInfo> createDeviceQueueCreateInfo(const QueueFamilyIndices& indices) { + std::vector<vk::DeviceQueueCreateInfo> createDeviceQueueCreateInfo(const QueueFamilyIndices& indices, + std::vector<float>* outQueuePriorities) { // use set to avoid duplicate queues std::unordered_set<int> familyIndexSet; @@ -55,12 +56,16 @@ namespace vkcv { familyIndexSet.insert(indices.presentIndex); const vk::DeviceQueueCreateFlagBits flags = {}; - const float priority = 1.f; std::vector<vk::DeviceQueueCreateInfo> createInfos; + outQueuePriorities->resize(familyIndexSet.size(), 1.f); + int priorityIndex = 0; + for (const auto index : familyIndexSet) { - const vk::DeviceQueueCreateInfo graphicsCreateInfo(flags, index, 1, &priority); + outQueuePriorities->push_back(1.f); + const vk::DeviceQueueCreateInfo graphicsCreateInfo(flags, index, 1, &outQueuePriorities->at(priorityIndex)); createInfos.push_back(graphicsCreateInfo); + priorityIndex++; } return createInfos; } -- GitLab