From 3dd21e3ae5d36277fcc0ab480a75d895a837a0fc Mon Sep 17 00:00:00 2001
From: Alex Laptop <alexander.gauggel@web.de>
Date: Thu, 16 Sep 2021 15:32:33 +0200
Subject: [PATCH] [#114] Add debug labels to voxelization project

---
 projects/voxelization/src/BloomAndFlares.cpp | 26 ++++++++++++++++----
 projects/voxelization/src/ShadowMapping.cpp  |  9 +++++++
 projects/voxelization/src/Voxelization.cpp   | 16 ++++++++++--
 projects/voxelization/src/main.cpp           | 13 +++++++++-
 4 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/projects/voxelization/src/BloomAndFlares.cpp b/projects/voxelization/src/BloomAndFlares.cpp
index d47f61d0..2014d7a0 100644
--- a/projects/voxelization/src/BloomAndFlares.cpp
+++ b/projects/voxelization/src/BloomAndFlares.cpp
@@ -127,6 +127,8 @@ void BloomAndFlares::execDownsamplePipe(const vkcv::CommandStreamHandle &cmdStre
             1
     };
 
+	p_Core->recordBeginDebugLabel(cmdStream, "Bloom downsample", { 1, 1, 1, 1 });
+
     // downsample dispatch of original color attachment
     p_Core->prepareImageForSampling(cmdStream, colorAttachment);
     p_Core->prepareImageForStorage(cmdStream, m_Blur.getHandle());
@@ -182,10 +184,14 @@ void BloomAndFlares::execDownsamplePipe(const vkcv::CommandStreamHandle &cmdStre
         // image barrier between mips
         p_Core->recordImageMemoryBarrier(cmdStream, m_Blur.getHandle());
     }
+
+    p_Core->recordEndDebugLabel(cmdStream);
 }
 
 void BloomAndFlares::execUpsamplePipe(const vkcv::CommandStreamHandle &cmdStream)
 {
+    p_Core->recordBeginDebugLabel(cmdStream, "Bloom upsample", { 1, 1, 1, 1 });
+
     // upsample dispatch
     p_Core->prepareImageForStorage(cmdStream, m_Blur.getHandle());
 
@@ -227,10 +233,14 @@ void BloomAndFlares::execUpsamplePipe(const vkcv::CommandStreamHandle &cmdStream
         // image barrier between mips
         p_Core->recordImageMemoryBarrier(cmdStream, m_Blur.getHandle());
     }
+
+    p_Core->recordEndDebugLabel(cmdStream);
 }
 
 void BloomAndFlares::execLensFeaturePipe(const vkcv::CommandStreamHandle &cmdStream)
 {
+    p_Core->recordBeginDebugLabel(cmdStream, "Lense flare generation", { 1, 1, 1, 1 });
+
     // lens feature generation descriptor writes
     p_Core->prepareImageForSampling(cmdStream, m_Blur.getHandle());
     p_Core->prepareImageForStorage(cmdStream, m_LensFeatures.getHandle());
@@ -295,11 +305,15 @@ void BloomAndFlares::execLensFeaturePipe(const vkcv::CommandStreamHandle &cmdStr
         // image barrier between mips
         p_Core->recordImageMemoryBarrier(cmdStream, m_LensFeatures.getHandle());
     }
+
+    p_Core->recordEndDebugLabel(cmdStream);
 }
 
 void BloomAndFlares::execCompositePipe(const vkcv::CommandStreamHandle &cmdStream, const vkcv::ImageHandle& colorAttachment,
     const uint32_t attachmentWidth, const uint32_t attachmentHeight, const glm::vec3& cameraForward)
 {
+    p_Core->recordBeginDebugLabel(cmdStream, "Bloom/lense flare composition", { 1, 1, 1, 1 });
+
     p_Core->prepareImageForSampling(cmdStream, m_Blur.getHandle());
     p_Core->prepareImageForSampling(cmdStream, m_LensFeatures.getHandle());
     p_Core->prepareImageForStorage(cmdStream, colorAttachment);
@@ -329,11 +343,13 @@ void BloomAndFlares::execCompositePipe(const vkcv::CommandStreamHandle &cmdStrea
 
     // bloom composite dispatch
     p_Core->recordComputeDispatchToCmdStream(
-            cmdStream,
-            m_CompositePipe,
-            compositeDispatchCount,
-            {vkcv::DescriptorSetUsage(0, p_Core->getDescriptorSet(m_CompositeDescSet).vulkanHandle)},
-			pushConstants);
+        cmdStream,
+        m_CompositePipe,
+        compositeDispatchCount,
+        {vkcv::DescriptorSetUsage(0, p_Core->getDescriptorSet(m_CompositeDescSet).vulkanHandle)},
+        pushConstants);
+
+    p_Core->recordEndDebugLabel(cmdStream);
 }
 
 void BloomAndFlares::execWholePipeline(const vkcv::CommandStreamHandle &cmdStream, const vkcv::ImageHandle &colorAttachment, 
diff --git a/projects/voxelization/src/ShadowMapping.cpp b/projects/voxelization/src/ShadowMapping.cpp
index d8041c1e..ce4261ff 100644
--- a/projects/voxelization/src/ShadowMapping.cpp
+++ b/projects/voxelization/src/ShadowMapping.cpp
@@ -266,6 +266,7 @@ void ShadowMapping::recordShadowMapRendering(
 		drawcalls.push_back(vkcv::DrawcallInfo(mesh, {}));
 	}
 
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Shadow map depth", {1, 1, 1, 1});
 	m_corePtr->recordDrawcallsToCmdStream(
 		cmdStream,
 		m_shadowMapPass,
@@ -275,6 +276,7 @@ void ShadowMapping::recordShadowMapRendering(
 		{ m_shadowMapDepth.getHandle() },
 		windowHandle);
 	m_corePtr->prepareImageForSampling(cmdStream, m_shadowMapDepth.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
 
 	// depth to moments
 	uint32_t dispatchCount[3];
@@ -287,6 +289,8 @@ void ShadowMapping::recordShadowMapRendering(
 	vkcv::PushConstants msaaPushConstants (sizeof(msaaSampleCount));
 	msaaPushConstants.appendDrawcall(msaaSampleCount);
 
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Depth to moments", { 1, 1, 1, 1 });
+
 	m_corePtr->prepareImageForStorage(cmdStream, m_shadowMap.getHandle());
 	m_corePtr->recordComputeDispatchToCmdStream(
 		cmdStream,
@@ -295,6 +299,9 @@ void ShadowMapping::recordShadowMapRendering(
 		{ vkcv::DescriptorSetUsage(0, m_corePtr->getDescriptorSet(m_depthToMomentsDescriptorSet).vulkanHandle) },
 		msaaPushConstants);
 	m_corePtr->prepareImageForSampling(cmdStream, m_shadowMap.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
+
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Moment shadow map blur", { 1, 1, 1, 1 });
 
 	// blur X
 	m_corePtr->prepareImageForStorage(cmdStream, m_shadowMapIntermediate.getHandle());
@@ -316,6 +323,8 @@ void ShadowMapping::recordShadowMapRendering(
 		vkcv::PushConstants(0));
 	m_shadowMap.recordMipChainGeneration(cmdStream);
 	m_corePtr->prepareImageForSampling(cmdStream, m_shadowMap.getHandle());
+
+	m_corePtr->recordEndDebugLabel(cmdStream);
 }
 
 vkcv::ImageHandle ShadowMapping::getShadowMap() {
diff --git a/projects/voxelization/src/Voxelization.cpp b/projects/voxelization/src/Voxelization.cpp
index 3cbff0df..c023af21 100644
--- a/projects/voxelization/src/Voxelization.cpp
+++ b/projects/voxelization/src/Voxelization.cpp
@@ -251,6 +251,7 @@ void Voxelization::voxelizeMeshes(
 	vkcv::PushConstants voxelCountPushConstants (sizeof(voxelCount));
 	voxelCountPushConstants.appendDrawcall(voxelCount);
 
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Voxel reset", { 1, 1, 1, 1 });
 	m_corePtr->recordComputeDispatchToCmdStream(
 		cmdStream,
 		m_voxelResetPipe,
@@ -258,6 +259,7 @@ void Voxelization::voxelizeMeshes(
 		{ vkcv::DescriptorSetUsage(0, m_corePtr->getDescriptorSet(m_voxelResetDescriptorSet).vulkanHandle) },
 		voxelCountPushConstants);
 	m_corePtr->recordBufferMemoryBarrier(cmdStream, m_voxelBuffer.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
 
 	// voxelization
 	std::vector<vkcv::DrawcallInfo> drawcalls;
@@ -270,6 +272,7 @@ void Voxelization::voxelizeMeshes(
 			},1));
 	}
 
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Voxelization", { 1, 1, 1, 1 });
 	m_corePtr->prepareImageForStorage(cmdStream, m_voxelImageIntermediate.getHandle());
 	m_corePtr->recordDrawcallsToCmdStream(
 		cmdStream,
@@ -279,6 +282,7 @@ void Voxelization::voxelizeMeshes(
 		drawcalls,
 		{ m_dummyRenderTarget.getHandle() },
 		windowHandle);
+	m_corePtr->recordEndDebugLabel(cmdStream);
 
 	// buffer to image
 	const uint32_t bufferToImageGroupSize[3] = { 4, 4, 4 };
@@ -287,6 +291,7 @@ void Voxelization::voxelizeMeshes(
 		bufferToImageDispatchCount[i] = glm::ceil(voxelResolution / float(bufferToImageGroupSize[i]));
 	}
 
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Voxel buffer to image", { 1, 1, 1, 1 });
 	m_corePtr->recordComputeDispatchToCmdStream(
 		cmdStream,
 		m_bufferToImagePipe,
@@ -295,14 +300,17 @@ void Voxelization::voxelizeMeshes(
 		vkcv::PushConstants(0));
 
 	m_corePtr->recordImageMemoryBarrier(cmdStream, m_voxelImageIntermediate.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
 
 	// intermediate image mipchain
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Intermediate Voxel mipmap generation", { 1, 1, 1, 1 });
 	m_voxelImageIntermediate.recordMipChainGeneration(cmdStream);
 	m_corePtr->prepareImageForSampling(cmdStream, m_voxelImageIntermediate.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
 
 	// secondary bounce
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Voxel secondary bounce", { 1, 1, 1, 1 });
 	m_corePtr->prepareImageForStorage(cmdStream, m_voxelImage.getHandle());
-
 	m_corePtr->recordComputeDispatchToCmdStream(
 		cmdStream,
 		m_secondaryBouncePipe,
@@ -310,12 +318,14 @@ void Voxelization::voxelizeMeshes(
 		{ vkcv::DescriptorSetUsage(0, m_corePtr->getDescriptorSet(m_secondaryBounceDescriptorSet).vulkanHandle) },
 		vkcv::PushConstants(0));
 	m_voxelImage.recordMipChainGeneration(cmdStream);
-
 	m_corePtr->recordImageMemoryBarrier(cmdStream, m_voxelImage.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
 
 	// final image mipchain
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Voxel mipmap generation", { 1, 1, 1, 1 });
 	m_voxelImage.recordMipChainGeneration(cmdStream);
 	m_corePtr->prepareImageForSampling(cmdStream, m_voxelImage.getHandle());
+	m_corePtr->recordEndDebugLabel(cmdStream);
 }
 
 void Voxelization::renderVoxelVisualisation(
@@ -344,6 +354,7 @@ void Voxelization::renderVoxelVisualisation(
 		vkcv::Mesh({}, nullptr, drawVoxelCount),
 		{ vkcv::DescriptorSetUsage(0, m_corePtr->getDescriptorSet(m_visualisationDescriptorSet).vulkanHandle) },1);
 
+	m_corePtr->recordBeginDebugLabel(cmdStream, "Voxel visualisation", { 1, 1, 1, 1 });
 	m_corePtr->prepareImageForStorage(cmdStream, m_voxelImage.getHandle());
 	m_corePtr->recordDrawcallsToCmdStream(
 		cmdStream,
@@ -353,6 +364,7 @@ void Voxelization::renderVoxelVisualisation(
 		{ drawcall },
 		renderTargets,
 		windowHandle);
+	m_corePtr->recordEndDebugLabel(cmdStream);
 }
 
 void Voxelization::updateVoxelOffset(const vkcv::camera::Camera& camera) {
diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index a7798813..0f9e9fb8 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -765,6 +765,7 @@ int main(int argc, const char** argv) {
 		
 		const std::vector<vkcv::ImageHandle>    prepassRenderTargets = { depthBuffer };
 
+		core.recordBeginDebugLabel(cmdStream, "Depth prepass", { 1, 1, 1, 1 });
 		core.recordDrawcallsToCmdStream(
 			cmdStream,
 			prepassPass,
@@ -775,6 +776,7 @@ int main(int argc, const char** argv) {
 			windowHandle);
 
 		core.recordImageMemoryBarrier(cmdStream, depthBuffer);
+		core.recordEndDebugLabel(cmdStream);
 		
 		vkcv::PushConstants pushConstants (2 * sizeof(glm::mat4));
 		
@@ -791,6 +793,7 @@ int main(int argc, const char** argv) {
 		
 		const std::vector<vkcv::ImageHandle>    renderTargets = { colorBuffer, depthBuffer };
 
+		core.recordBeginDebugLabel(cmdStream, "Forward rendering", { 1, 1, 1, 1 });
 		core.recordDrawcallsToCmdStream(
 			cmdStream,
 			forwardPass,
@@ -799,6 +802,7 @@ int main(int argc, const char** argv) {
 			drawcalls,
 			renderTargets,
 			windowHandle);
+		core.recordEndDebugLabel(cmdStream);
 
 		if (renderVoxelVis) {
 			voxelization.renderVoxelVisualisation(cmdStream, viewProjectionCamera, renderTargets, voxelVisualisationMip, windowHandle);
@@ -808,6 +812,7 @@ int main(int argc, const char** argv) {
 		skySettingsPushConstants.appendDrawcall(skySettings);
 
 		// sky
+		core.recordBeginDebugLabel(cmdStream, "Sky", { 1, 1, 1, 1 });
 		core.recordDrawcallsToCmdStream(
 			cmdStream,
 			skyPass,
@@ -816,6 +821,7 @@ int main(int argc, const char** argv) {
 			{ vkcv::DrawcallInfo(vkcv::Mesh({}, nullptr, 3), {}) },
 			renderTargets,
 			windowHandle);
+		core.recordEndDebugLabel(cmdStream);
 
 		const uint32_t fullscreenLocalGroupSize = 8;
 		
@@ -832,8 +838,8 @@ int main(int argc, const char** argv) {
 		fulsscreenDispatchCount[2] = 1;
 
 		if (usingMsaa) {
+			core.recordBeginDebugLabel(cmdStream, "MSAA resolve", { 1, 1, 1, 1 });
 			if (msaaCustomResolve) {
-
 				core.prepareImageForSampling(cmdStream, colorBuffer);
 				core.prepareImageForStorage(cmdStream, resolvedColorBuffer);
 
@@ -850,6 +856,7 @@ int main(int argc, const char** argv) {
 			else {
 				core.resolveMSAAImage(cmdStream, colorBuffer, resolvedColorBuffer);
 			}
+			core.recordEndDebugLabel(cmdStream);
 		}
 
 		bloomFlares.execWholePipeline(cmdStream, resolvedColorBuffer, fsrWidth, fsrHeight,
@@ -859,6 +866,7 @@ int main(int argc, const char** argv) {
 		core.prepareImageForStorage(cmdStream, swapBuffer);
 		core.prepareImageForSampling(cmdStream, resolvedColorBuffer);
 		
+		core.recordBeginDebugLabel(cmdStream, "Tonemapping", { 1, 1, 1, 1 });
 		core.recordComputeDispatchToCmdStream(
 			cmdStream, 
 			tonemappingPipeline, 
@@ -871,6 +879,7 @@ int main(int argc, const char** argv) {
 		
 		core.prepareImageForStorage(cmdStream, swapBuffer2);
 		core.prepareImageForSampling(cmdStream, swapBuffer);
+		core.recordEndDebugLabel(cmdStream);
 		
 		if (bilinearUpscaling) {
 			upscaling1.recordUpscaling(cmdStream, swapBuffer, swapBuffer2);
@@ -895,6 +904,7 @@ int main(int argc, const char** argv) {
 				glm::ceil(swapchainHeight / static_cast<float>(fullscreenLocalGroupSize))
 		);
 		
+		core.recordBeginDebugLabel(cmdStream, "Post Processing", { 1, 1, 1, 1 });
 		core.recordComputeDispatchToCmdStream(
 				cmdStream,
 				postEffectsPipeline,
@@ -904,6 +914,7 @@ int main(int argc, const char** argv) {
 				).vulkanHandle) },
 				timePushConstants
 		);
+		core.recordEndDebugLabel(cmdStream);
 
 		// present and end
 		core.prepareSwapchainImageForPresent(cmdStream);
-- 
GitLab