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