From 87c3435b073f29fde705cd1eff012b3a2610d26f Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Fri, 25 Jun 2021 20:53:06 +0200
Subject: [PATCH] [#77] Fixed crash because of unmatching amount of miplevels
 and descriptor-sets after resizing

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/bloom/src/BloomAndFlares.cpp | 9 ++++++---
 projects/bloom/src/main.cpp           | 2 +-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/projects/bloom/src/BloomAndFlares.cpp b/projects/bloom/src/BloomAndFlares.cpp
index e4ca9357..6f26db9d 100644
--- a/projects/bloom/src/BloomAndFlares.cpp
+++ b/projects/bloom/src/BloomAndFlares.cpp
@@ -30,7 +30,7 @@ BloomAndFlares::BloomAndFlares(
                      });
     for(uint32_t mipLevel = 0; mipLevel < m_Blur.getMipCount(); mipLevel++)
     {
-        m_DownsampleDescSets.push_back(
+		m_DownsampleDescSets.push_back(
                 p_Core->createDescriptorSet(dsProg.getReflectedDescriptors()[0]));
     }
     m_DownsamplePipe = p_Core->createComputePipeline(
@@ -109,7 +109,7 @@ void BloomAndFlares::execDownsamplePipe(const vkcv::CommandStreamHandle &cmdStre
     // downsample dispatches of blur buffer's mip maps
     float mipDispatchCountX = dispatchCountX;
     float mipDispatchCountY = dispatchCountY;
-    for(uint32_t mipLevel = 1; mipLevel < m_Blur.getMipCount(); mipLevel++)
+    for(uint32_t mipLevel = 1; mipLevel < m_DownsampleDescSets.size(); mipLevel++)
     {
         // mip descriptor writes
         vkcv::DescriptorWrites mipDescriptorWrites;
@@ -151,7 +151,10 @@ void BloomAndFlares::execUpsamplePipe(const vkcv::CommandStreamHandle &cmdStream
     // upsample dispatch
     p_Core->prepareImageForStorage(cmdStream, m_Blur.getHandle());
 
-    uint32_t upsampleMipLevels = std::min(m_Blur.getMipCount(), static_cast<uint32_t>(5));
+    const uint32_t upsampleMipLevels = std::min(
+    		static_cast<uint32_t>(m_UpsampleDescSets.size() - 1),
+    		static_cast<uint32_t>(5)
+	);
 
     // upsample dispatch for each mip map
     for(uint32_t mipLevel = upsampleMipLevels; mipLevel > 0; mipLevel--)
diff --git a/projects/bloom/src/main.cpp b/projects/bloom/src/main.cpp
index e2f37544..14a3533b 100644
--- a/projects/bloom/src/main.cpp
+++ b/projects/bloom/src/main.cpp
@@ -293,7 +293,6 @@ int main(int argc, const char** argv) {
 	std::vector<vkcv::DrawcallInfo> drawcalls;
 	std::vector<vkcv::DrawcallInfo> shadowDrawcalls;
 	for (int i = 0; i < meshes.size(); i++) {
-
 		drawcalls.push_back(vkcv::DrawcallInfo(meshes[i], { 
 			vkcv::DescriptorSetUsage(0, core.getDescriptorSet(forwardShadingDescriptorSet).vulkanHandle),
 			vkcv::DescriptorSetUsage(1, core.getDescriptorSet(perMeshDescriptorSets[i]).vulkanHandle) }));
@@ -395,6 +394,7 @@ int main(int argc, const char** argv) {
         baf.execWholePipeline(cmdStream, colorBuffer);
 
         core.prepareImageForStorage(cmdStream, swapchainInput);
+        
         // gamma correction descriptor write
         vkcv::DescriptorWrites gammaCorrectionDescriptorWrites;
         gammaCorrectionDescriptorWrites.storageImageWrites = {
-- 
GitLab