From 9366c6ff51ebae648cc13a999363c64655aeea8a Mon Sep 17 00:00:00 2001
From: Mark Oliver Mints <mmints@uni-koblenz.de>
Date: Sat, 4 Sep 2021 14:08:34 +0200
Subject: [PATCH] [#71] update all compute pipeline create calls to new version
 with config

---
 .../src/vkcv/upscaling/FSRUpscaling.cpp       | 23 ++++++-----
 projects/indirect_dispatch/src/AppSetup.cpp   |  9 +++--
 .../src/BloomAndFlares.cpp                    | 40 +++++++++++++++----
 projects/particle_simulation/src/main.cpp     | 17 ++++++--
 projects/voxelization/src/BloomAndFlares.cpp  | 39 +++++++++++++-----
 projects/voxelization/src/ShadowMapping.cpp   | 26 ++++++++++--
 projects/voxelization/src/Voxelization.cpp    | 33 +++++++++------
 projects/voxelization/src/main.cpp            | 33 +++++++++------
 8 files changed, 157 insertions(+), 63 deletions(-)

diff --git a/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp b/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp
index b1105127..af3c8294 100644
--- a/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp
+++ b/modules/upscaling/src/vkcv/upscaling/FSRUpscaling.cpp
@@ -1,4 +1,3 @@
-
 #include "vkcv/upscaling/FSRUpscaling.hpp"
 
 #include <stdint.h>
@@ -205,10 +204,13 @@ namespace vkcv::upscaling {
 					const std::filesystem::path& path) {
 				program.addShader(shaderStage, path);
 			});
-			
-			m_easuPipeline = m_core.createComputePipeline(program, {
-				m_core.getDescriptorSet(m_easuDescriptorSet).layout
-			});
+
+			ComputePipelineConfig easuComputePipelineConfig {
+			    program,
+                { m_core.getDescriptorSet(m_easuDescriptorSet).layout }
+			};
+
+			m_easuPipeline = m_core.createComputePipeline(easuComputePipelineConfig);
 			
 			DescriptorWrites writes;
 			writes.uniformBufferWrites.emplace_back(
@@ -226,10 +228,13 @@ namespace vkcv::upscaling {
 					const std::filesystem::path& path) {
 				program.addShader(shaderStage, path);
 			});
-			
-			m_rcasPipeline = m_core.createComputePipeline(program, {
-				m_core.getDescriptorSet(m_rcasDescriptorSet).layout
-			});
+
+			ComputePipelineConfig rcasComputePipelineConfig {
+			    program,
+                { m_core.getDescriptorSet(m_rcasDescriptorSet).layout }
+			};
+
+			m_rcasPipeline = m_core.createComputePipeline(rcasComputePipelineConfig);
 			
 			DescriptorWrites writes;
 			writes.uniformBufferWrites.emplace_back(
diff --git a/projects/indirect_dispatch/src/AppSetup.cpp b/projects/indirect_dispatch/src/AppSetup.cpp
index 267ac6bd..ec113aa0 100644
--- a/projects/indirect_dispatch/src/AppSetup.cpp
+++ b/projects/indirect_dispatch/src/AppSetup.cpp
@@ -256,9 +256,12 @@ bool loadComputePass(vkcv::Core& core, const std::filesystem::path& path, Comput
 
 	outComputePass->descriptorSet = core.createDescriptorSet(shaderProgram.getReflectedDescriptors()[0]);
 
-	outComputePass->pipeline = core.createComputePipeline(
-		shaderProgram,
-		{ core.getDescriptorSet(outComputePass->descriptorSet).layout });
+	vkcv::ComputePipelineConfig computePipelineConfig {
+            shaderProgram,
+            { core.getDescriptorSet(outComputePass->descriptorSet).layout }
+	};
+
+	outComputePass->pipeline = core.createComputePipeline(computePipelineConfig);
 
 	if (!outComputePass->pipeline) {
 		vkcv_log(vkcv::LogLevel::ERROR, "Compute shader pipeline creation failed");
diff --git a/projects/particle_simulation/src/BloomAndFlares.cpp b/projects/particle_simulation/src/BloomAndFlares.cpp
index 5961aae6..f506b29b 100644
--- a/projects/particle_simulation/src/BloomAndFlares.cpp
+++ b/projects/particle_simulation/src/BloomAndFlares.cpp
@@ -33,8 +33,13 @@ BloomAndFlares::BloomAndFlares(
 		m_DownsampleDescSets.push_back(
                 p_Core->createDescriptorSet(dsProg.getReflectedDescriptors()[0]));
     }
-    m_DownsamplePipe = p_Core->createComputePipeline(
-            dsProg, { p_Core->getDescriptorSet(m_DownsampleDescSets[0]).layout });
+
+    vkcv::ComputePipelineConfig dsComputePipelineConfig {
+        dsProg,
+        {p_Core->getDescriptorSet(m_DownsampleDescSets[0]).layout}
+    };
+
+    m_DownsamplePipe = p_Core->createComputePipeline(dsComputePipelineConfig);
 
     // UPSAMPLE
     vkcv::ShaderProgram usProg;
@@ -49,8 +54,15 @@ BloomAndFlares::BloomAndFlares(
         m_UpsampleDescSets.push_back(
                 p_Core->createDescriptorSet(usProg.getReflectedDescriptors()[0]));
     }
-    m_UpsamplePipe = p_Core->createComputePipeline(
-            usProg, { p_Core->getDescriptorSet(m_UpsampleDescSets[0]).layout });
+
+
+    vkcv::ComputePipelineConfig usComputePipelineConfig {
+            usProg,
+            {p_Core->getDescriptorSet(m_UpsampleDescSets[0]).layout}
+    };
+
+
+    m_UpsamplePipe = p_Core->createComputePipeline(usComputePipelineConfig);
 
     // LENS FEATURES
     vkcv::ShaderProgram lensProg;
@@ -60,9 +72,15 @@ BloomAndFlares::BloomAndFlares(
                      {
                          lensProg.addShader(shaderStage, path);
                      });
+
     m_LensFlareDescSet = p_Core->createDescriptorSet(lensProg.getReflectedDescriptors()[0]);
-    m_LensFlarePipe = p_Core->createComputePipeline(
-            lensProg, { p_Core->getDescriptorSet(m_LensFlareDescSet).layout });
+
+    vkcv::ComputePipelineConfig lensComputePipelineConfig {
+            lensProg,
+            {p_Core->getDescriptorSet(m_LensFlareDescSet).layout}
+    };
+
+    m_LensFlarePipe = p_Core->createComputePipeline(lensComputePipelineConfig);
 
     // COMPOSITE
     vkcv::ShaderProgram compProg;
@@ -72,9 +90,15 @@ BloomAndFlares::BloomAndFlares(
                      {
                          compProg.addShader(shaderStage, path);
                      });
+
     m_CompositeDescSet = p_Core->createDescriptorSet(compProg.getReflectedDescriptors()[0]);
-    m_CompositePipe = p_Core->createComputePipeline(
-            compProg, { p_Core->getDescriptorSet(m_CompositeDescSet).layout });
+
+    vkcv::ComputePipelineConfig compComputePipelineConfig{
+        compProg,
+        { p_Core->getDescriptorSet(m_CompositeDescSet).layout }
+    };
+
+    m_CompositePipe = p_Core->createComputePipeline(compComputePipelineConfig);
 }
 
 void BloomAndFlares::execDownsamplePipe(const vkcv::CommandStreamHandle &cmdStream,
diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp
index a3e34e70..f8d56c46 100644
--- a/projects/particle_simulation/src/main.cpp
+++ b/projects/particle_simulation/src/main.cpp
@@ -137,7 +137,12 @@ int main(int argc, const char **argv) {
 
     vkcv::PipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition);
 
-    vkcv::ComputePipelineHandle computePipeline = core.createComputePipeline(computeShaderProgram, {core.getDescriptorSet(computeDescriptorSet).layout} );
+    vkcv::ComputePipelineConfig computePipelineDefinition {
+        computeShaderProgram,
+        {core.getDescriptorSet(computeDescriptorSet).layout}
+    };
+
+    vkcv::ComputePipelineHandle computePipeline = core.createComputePipeline(computePipelineDefinition);
 
     vkcv::Buffer<glm::vec4> color = core.createBuffer<glm::vec4>(
             vkcv::BufferType::UNIFORM,
@@ -228,9 +233,13 @@ int main(int argc, const char **argv) {
     });
 
     vkcv::DescriptorSetHandle tonemappingDescriptor = core.createDescriptorSet(tonemappingShader.getReflectedDescriptors()[0]);
-    vkcv::ComputePipelineHandle tonemappingPipe = core.createComputePipeline(
-        tonemappingShader, 
-        { core.getDescriptorSet(tonemappingDescriptor).layout });
+
+    vkcv::ComputePipelineConfig tonemappingConputePipelineConfig {
+        tonemappingShader,
+        { core.getDescriptorSet(tonemappingDescriptor).layout }
+    };
+
+    vkcv::ComputePipelineHandle tonemappingPipe = core.createComputePipeline(tonemappingConputePipelineConfig);
 
     std::uniform_real_distribution<float> rdm = std::uniform_real_distribution<float>(0.95f, 1.05f);
     std::default_random_engine rdmEngine;
diff --git a/projects/voxelization/src/BloomAndFlares.cpp b/projects/voxelization/src/BloomAndFlares.cpp
index 6cb02e90..a413c525 100644
--- a/projects/voxelization/src/BloomAndFlares.cpp
+++ b/projects/voxelization/src/BloomAndFlares.cpp
@@ -47,8 +47,13 @@ BloomAndFlares::BloomAndFlares(
 		m_DownsampleDescSets.push_back(
                 p_Core->createDescriptorSet(dsProg.getReflectedDescriptors()[0]));
     }
-    m_DownsamplePipe = p_Core->createComputePipeline(
-            dsProg, { p_Core->getDescriptorSet(m_DownsampleDescSets[0]).layout });
+
+    vkcv::ComputePipelineConfig dsCompPipeConfig {
+        dsProg,
+        { p_Core->getDescriptorSet(m_DownsampleDescSets[0]).layout }
+    };
+
+    m_DownsamplePipe = p_Core->createComputePipeline(dsCompPipeConfig);
 
     // UPSAMPLE
     vkcv::ShaderProgram usProg;
@@ -68,8 +73,12 @@ BloomAndFlares::BloomAndFlares(
             p_Core->createDescriptorSet(usProg.getReflectedDescriptors()[0]));
     }
 
-    m_UpsamplePipe = p_Core->createComputePipeline(
-            usProg, { p_Core->getDescriptorSet(m_UpsampleDescSets[0]).layout });
+    vkcv::ComputePipelineConfig usCompPipeConfig {
+            usProg,
+            { p_Core->getDescriptorSet(m_UpsampleDescSets[0]).layout }
+    };
+
+    m_UpsamplePipe = p_Core->createComputePipeline(usCompPipeConfig);
 
     // LENS FEATURES
     vkcv::ShaderProgram lensProg;
@@ -80,8 +89,13 @@ BloomAndFlares::BloomAndFlares(
                          lensProg.addShader(shaderStage, path);
                      });
     m_LensFlareDescSet = p_Core->createDescriptorSet(lensProg.getReflectedDescriptors()[0]);
-    m_LensFlarePipe = p_Core->createComputePipeline(
-            lensProg, { p_Core->getDescriptorSet(m_LensFlareDescSet).layout });
+
+    vkcv::ComputePipelineConfig lensCompPipeConfig {
+            lensProg,
+            { p_Core->getDescriptorSet(m_LensFlareDescSet).layout }
+    };
+
+    m_LensFlarePipe = p_Core->createComputePipeline(lensCompPipeConfig);
 
     // COMPOSITE
     vkcv::ShaderProgram compProg;
@@ -92,8 +106,13 @@ BloomAndFlares::BloomAndFlares(
                          compProg.addShader(shaderStage, path);
                      });
     m_CompositeDescSet = p_Core->createDescriptorSet(compProg.getReflectedDescriptors()[0]);
-    m_CompositePipe = p_Core->createComputePipeline(
-            compProg, { p_Core->getDescriptorSet(m_CompositeDescSet).layout });
+
+    vkcv::ComputePipelineConfig compPipeConfig {
+            compProg,
+            { p_Core->getDescriptorSet(m_CompositeDescSet).layout }
+    };
+
+    m_CompositePipe = p_Core->createComputePipeline(compPipeConfig);
 
     // radial LUT
     const auto texture = vkcv::asset::loadTexture("resources/RadialLUT.png");
@@ -339,6 +358,4 @@ void BloomAndFlares::updateImageDimensions(uint32_t width, uint32_t height)
     p_Core->getContext().getDevice().waitIdle();
     m_Blur = p_Core->createImage(m_ColorBufferFormat, m_Width, m_Height, 1, true, true, false);
     m_LensFeatures = p_Core->createImage(m_ColorBufferFormat, m_Width, m_Height, 1, true, true, false);
-}
-
-
+}
\ No newline at end of file
diff --git a/projects/voxelization/src/ShadowMapping.cpp b/projects/voxelization/src/ShadowMapping.cpp
index 32dd5457..9aa0bf8f 100644
--- a/projects/voxelization/src/ShadowMapping.cpp
+++ b/projects/voxelization/src/ShadowMapping.cpp
@@ -190,7 +190,13 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert
 	// depth to moments
 	vkcv::ShaderProgram depthToMomentsShader    = loadDepthToMomentsShader();
 	m_depthToMomentsDescriptorSet               = corePtr->createDescriptorSet(depthToMomentsShader.getReflectedDescriptors()[0]);
-	m_depthToMomentsPipe                        = corePtr->createComputePipeline(depthToMomentsShader, { corePtr->getDescriptorSet(m_depthToMomentsDescriptorSet).layout });
+
+    vkcv::ComputePipelineConfig depthToMomentPipeConfig {
+            depthToMomentsShader,
+            { corePtr->getDescriptorSet(m_depthToMomentsDescriptorSet).layout }
+    };
+
+    m_depthToMomentsPipe = corePtr->createComputePipeline(depthToMomentPipeConfig);
 
 	vkcv::DescriptorWrites depthToMomentDescriptorWrites;
 	depthToMomentDescriptorWrites.sampledImageWrites    = { vkcv::SampledImageDescriptorWrite(0, m_shadowMapDepth.getHandle()) };
@@ -201,7 +207,13 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert
 	// shadow blur X
 	vkcv::ShaderProgram shadowBlurXShader    = loadShadowBlurXShader();
 	m_shadowBlurXDescriptorSet              = corePtr->createDescriptorSet(shadowBlurXShader.getReflectedDescriptors()[0]);
-	m_shadowBlurXPipe                       = corePtr->createComputePipeline(shadowBlurXShader, { corePtr->getDescriptorSet(m_shadowBlurXDescriptorSet).layout });
+
+	vkcv::ComputePipelineConfig shadowBlurXPipeConfig {
+	    shadowBlurXShader,
+        { corePtr->getDescriptorSet(m_shadowBlurXDescriptorSet).layout }
+	};
+
+	m_shadowBlurXPipe = corePtr->createComputePipeline(shadowBlurXPipeConfig);
 
 	vkcv::DescriptorWrites shadowBlurXDescriptorWrites;
 	shadowBlurXDescriptorWrites.sampledImageWrites   = { vkcv::SampledImageDescriptorWrite(0, m_shadowMap.getHandle()) };
@@ -212,9 +224,15 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert
 	// shadow blur Y
 	vkcv::ShaderProgram shadowBlurYShader = loadShadowBlurYShader();
 	m_shadowBlurYDescriptorSet = corePtr->createDescriptorSet(shadowBlurYShader.getReflectedDescriptors()[0]);
-	m_shadowBlurYPipe = corePtr->createComputePipeline(shadowBlurYShader, { corePtr->getDescriptorSet(m_shadowBlurYDescriptorSet).layout });
 
-	vkcv::DescriptorWrites shadowBlurYDescriptorWrites;
+    vkcv::ComputePipelineConfig shadowBlurYPipeConfig {
+            shadowBlurYShader,
+            { corePtr->getDescriptorSet(m_shadowBlurYDescriptorSet).layout }
+    };
+
+    m_shadowBlurYPipe = corePtr->createComputePipeline(shadowBlurYPipeConfig);
+
+    vkcv::DescriptorWrites shadowBlurYDescriptorWrites;
 	shadowBlurYDescriptorWrites.sampledImageWrites  = { vkcv::SampledImageDescriptorWrite(0, m_shadowMapIntermediate.getHandle()) };
 	shadowBlurYDescriptorWrites.samplerWrites       = { vkcv::SamplerDescriptorWrite(1, m_shadowSampler) };
 	shadowBlurYDescriptorWrites.storageImageWrites  = { vkcv::StorageImageDescriptorWrite(2, m_shadowMap.getHandle()) };
diff --git a/projects/voxelization/src/Voxelization.cpp b/projects/voxelization/src/Voxelization.cpp
index f7e03709..67acf852 100644
--- a/projects/voxelization/src/Voxelization.cpp
+++ b/projects/voxelization/src/Voxelization.cpp
@@ -173,11 +173,14 @@ Voxelization::Voxelization(
 	const vkcv::DescriptorSetUsage voxelizationDescriptorUsage(0, m_corePtr->getDescriptorSet(m_visualisationDescriptorSet).vulkanHandle);
 
 	vkcv::ShaderProgram resetVoxelShader = loadVoxelResetShader();
-
 	m_voxelResetDescriptorSet = m_corePtr->createDescriptorSet(resetVoxelShader.getReflectedDescriptors()[0]);
-	m_voxelResetPipe = m_corePtr->createComputePipeline(
-		resetVoxelShader,
-		{ m_corePtr->getDescriptorSet(m_voxelResetDescriptorSet).layout });
+
+	const vkcv::ComputePipelineConfig resetVoxelPipeConfig {
+            resetVoxelShader,
+            { m_corePtr->getDescriptorSet(m_voxelResetDescriptorSet).layout }
+	};
+
+	m_voxelResetPipe = m_corePtr->createComputePipeline(resetVoxelPipeConfig);
 
 	vkcv::DescriptorWrites resetVoxelWrites;
 	resetVoxelWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0, m_voxelBuffer.getHandle()) };
@@ -185,11 +188,14 @@ Voxelization::Voxelization(
 
 	// buffer to image
 	vkcv::ShaderProgram bufferToImageShader = loadVoxelBufferToImageShader();
-
 	m_bufferToImageDescriptorSet = m_corePtr->createDescriptorSet(bufferToImageShader.getReflectedDescriptors()[0]);
-	m_bufferToImagePipe = m_corePtr->createComputePipeline(
-		bufferToImageShader,
-		{ m_corePtr->getDescriptorSet(m_bufferToImageDescriptorSet).layout });
+
+	const vkcv::ComputePipelineConfig bufferToImagePipeConfig {
+            bufferToImageShader,
+            { m_corePtr->getDescriptorSet(m_bufferToImageDescriptorSet).layout }
+    };
+
+	m_bufferToImagePipe = m_corePtr->createComputePipeline(bufferToImagePipeConfig);
 
 	vkcv::DescriptorWrites bufferToImageDescriptorWrites;
 	bufferToImageDescriptorWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0, m_voxelBuffer.getHandle()) };
@@ -198,11 +204,14 @@ Voxelization::Voxelization(
 
 	// secondary bounce
 	vkcv::ShaderProgram secondaryBounceShader = loadSecondaryBounceShader();
-
 	m_secondaryBounceDescriptorSet = m_corePtr->createDescriptorSet(secondaryBounceShader.getReflectedDescriptors()[0]);
-	m_secondaryBouncePipe = m_corePtr->createComputePipeline(
-		secondaryBounceShader,
-		{ m_corePtr->getDescriptorSet(m_secondaryBounceDescriptorSet).layout });
+
+	const vkcv::ComputePipelineConfig secondaryBouncePipeConfig {
+            secondaryBounceShader,
+            { m_corePtr->getDescriptorSet(m_secondaryBounceDescriptorSet).layout }
+	};
+
+	m_secondaryBouncePipe = m_corePtr->createComputePipeline(secondaryBouncePipeConfig);
 
 	vkcv::DescriptorWrites secondaryBounceDescriptorWrites;
 	secondaryBounceDescriptorWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0, m_voxelBuffer.getHandle()) };
diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index 8ef294dc..96062e45 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -427,9 +427,11 @@ int main(int argc, const char** argv) {
 	});
 	vkcv::DescriptorSetHandle tonemappingDescriptorSet = core.createDescriptorSet(
 		tonemappingProgram.getReflectedDescriptors()[0]);
-	vkcv::ComputePipelineHandle tonemappingPipeline = core.createComputePipeline(
-		tonemappingProgram,
-		{ core.getDescriptorSet(tonemappingDescriptorSet).layout });
+	vkcv::ComputePipelineConfig tonemappingPipeConfig {
+            tonemappingProgram,
+            { core.getDescriptorSet(tonemappingDescriptorSet).layout }
+	};
+	vkcv::ComputePipelineHandle tonemappingPipeline = core.createComputePipeline(tonemappingPipeConfig);
 	
 	// tonemapping compute shader
 	vkcv::ShaderProgram postEffectsProgram;
@@ -439,9 +441,11 @@ int main(int argc, const char** argv) {
 	});
 	vkcv::DescriptorSetHandle postEffectsDescriptorSet = core.createDescriptorSet(
 			postEffectsProgram.getReflectedDescriptors()[0]);
-	vkcv::ComputePipelineHandle postEffectsPipeline = core.createComputePipeline(
-			postEffectsProgram,
-			{ core.getDescriptorSet(postEffectsDescriptorSet).layout });
+	vkcv::ComputePipelineConfig postEffectsPipeConfig {
+            postEffectsProgram,
+            { core.getDescriptorSet(postEffectsDescriptorSet).layout }
+	};
+	vkcv::ComputePipelineHandle postEffectsPipeline = core.createComputePipeline(postEffectsPipeConfig);
 
 	// resolve compute shader
 	vkcv::ShaderProgram resolveProgram;
@@ -451,9 +455,11 @@ int main(int argc, const char** argv) {
 	});
 	vkcv::DescriptorSetHandle resolveDescriptorSet = core.createDescriptorSet(
 		resolveProgram.getReflectedDescriptors()[0]);
-	vkcv::ComputePipelineHandle resolvePipeline = core.createComputePipeline(
-		resolveProgram,
-		{ core.getDescriptorSet(resolveDescriptorSet).layout });
+	vkcv::ComputePipelineConfig resolvePipeConfig {
+            resolveProgram,
+            { core.getDescriptorSet(resolveDescriptorSet).layout }
+	};
+	vkcv::ComputePipelineHandle resolvePipeline = core.createComputePipeline(resolvePipeConfig);
 
 	vkcv::SamplerHandle resolveSampler = core.createSampler(
 		vkcv::SamplerFilterType::NEAREST,
@@ -939,9 +945,12 @@ int main(int argc, const char** argv) {
 					[&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
 					newProgram.addShader(shaderStage, path);
 				});
-				vkcv::ComputePipelineHandle newPipeline = core.createComputePipeline(
-					newProgram,
-					{ core.getDescriptorSet(tonemappingDescriptorSet).layout });
+
+				vkcv::ComputePipelineConfig newPipeConfig {
+                        newProgram,
+                        { core.getDescriptorSet(tonemappingDescriptorSet).layout }
+				};
+				vkcv::ComputePipelineHandle newPipeline = core.createComputePipeline(newPipeConfig);
 
 				if (newPipeline) {
 					tonemappingPipeline = newPipeline;
-- 
GitLab