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