From 05331786655fe81f498d4e2c4cc6ec8b25ef24b4 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Mon, 19 Jul 2021 12:26:10 +0200
Subject: [PATCH] [#100] Fixed VRAM leak and added dynamic buffers to
 descriptor-set pool

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/voxelization/src/main.cpp | 13 +++++++------
 src/vkcv/DescriptorManager.cpp     | 12 ++++++++----
 src/vkcv/SamplerManager.cpp        |  4 ++--
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index f707bb44..e50f6b18 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -527,6 +527,7 @@ int main(int argc, const char** argv) {
 	core.writeDescriptorSet(forwardShadingDescriptorSet, forwardDescriptorWrites);
 
 	vkcv::upscaling::FSRUpscaling upscaling (core);
+	uint32_t fsrWidth = windowWidth, fsrHeight = windowHeight;
 	
 	float fsrFactor = 1.5f;
 	float rcasSharpness = upscaling.getSharpness();
@@ -566,10 +567,13 @@ int main(int argc, const char** argv) {
 			fsrFactor = 2.0f;
 		}
 		
-		const auto fsrWidth = static_cast<uint32_t>(std::round(static_cast<float>(swapchainWidth) / fsrFactor));
-		const auto fsrHeight = static_cast<uint32_t>(std::round(static_cast<float>(swapchainHeight) / fsrFactor));
+		const auto width = static_cast<uint32_t>(std::round(static_cast<float>(swapchainWidth) / fsrFactor));
+		const auto height = static_cast<uint32_t>(std::round(static_cast<float>(swapchainHeight) / fsrFactor));
 
-		if ((fsrWidth != windowWidth) || ((fsrHeight != windowHeight))) {
+		if ((width != fsrWidth) || ((height != fsrHeight))) {
+			fsrWidth = width;
+			fsrHeight = height;
+			
 			depthBuffer         = core.createImage(depthBufferFormat, fsrWidth, fsrHeight, 1, false, false, false, msaa).getHandle();
 			colorBuffer         = core.createImage(colorBufferFormat, fsrWidth, fsrHeight, 1, false, colorBufferRequiresStorage, true, msaa).getHandle();
 
@@ -581,9 +585,6 @@ int main(int argc, const char** argv) {
 			
 			swapBuffer = core.createImage(colorBufferFormat, fsrWidth, fsrHeight, 1, false, true).getHandle();
 			
-			windowWidth = swapchainWidth;
-			windowHeight = swapchainHeight;
-			
 			bloomFlares.updateImageDimensions(swapchainWidth, swapchainHeight);
 		}
 
diff --git a/src/vkcv/DescriptorManager.cpp b/src/vkcv/DescriptorManager.cpp
index 226cf508..8afd50a3 100644
--- a/src/vkcv/DescriptorManager.cpp
+++ b/src/vkcv/DescriptorManager.cpp
@@ -11,10 +11,14 @@ namespace vkcv
          * Allocate the set size for the descriptor pools, namely 1000 units of each descriptor type below.
 		 * Finally, create an initial pool.
          */
-		m_PoolSizes = { vk::DescriptorPoolSize(vk::DescriptorType::eSampler, 1000),
-													vk::DescriptorPoolSize(vk::DescriptorType::eSampledImage, 1000),
-													vk::DescriptorPoolSize(vk::DescriptorType::eUniformBuffer, 1000),
-													vk::DescriptorPoolSize(vk::DescriptorType::eStorageBuffer, 1000) };
+		m_PoolSizes = {
+				vk::DescriptorPoolSize(vk::DescriptorType::eSampler, 1000),
+				vk::DescriptorPoolSize(vk::DescriptorType::eSampledImage, 1000),
+				vk::DescriptorPoolSize(vk::DescriptorType::eUniformBuffer, 1000),
+				vk::DescriptorPoolSize(vk::DescriptorType::eStorageBuffer, 1000),
+				vk::DescriptorPoolSize(vk::DescriptorType::eUniformBufferDynamic, 1000),
+				vk::DescriptorPoolSize(vk::DescriptorType::eStorageBufferDynamic, 1000)
+		};
 
 		m_PoolInfo = vk::DescriptorPoolCreateInfo(
 				vk::DescriptorPoolCreateFlagBits::eFreeDescriptorSet,
diff --git a/src/vkcv/SamplerManager.cpp b/src/vkcv/SamplerManager.cpp
index a6ebb95b..ecc6de09 100644
--- a/src/vkcv/SamplerManager.cpp
+++ b/src/vkcv/SamplerManager.cpp
@@ -86,8 +86,8 @@ namespace vkcv {
 				16.0f,
 				false,
 				vk::CompareOp::eAlways,
-				0.0f,
-				16.0f,
+				-1000.0f,
+				1000.0f,
 				vk::BorderColor::eIntOpaqueBlack,
 				false
 		);
-- 
GitLab