From 3042e8c1674b50d783b8d741fdc01229b8f9e078 Mon Sep 17 00:00:00 2001
From: Alexander Gauggel <agauggel@uni-koblenz.de>
Date: Fri, 4 Jun 2021 22:29:36 +0200
Subject: [PATCH] [#66] Put push constant data into struct

---
 include/vkcv/Core.hpp               | 10 ++++++++--
 projects/cmd_sync_test/src/main.cpp |  3 +--
 src/vkcv/Core.cpp                   | 12 +++++++++---
 3 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp
index e7d09881..3071286e 100644
--- a/include/vkcv/Core.hpp
+++ b/include/vkcv/Core.hpp
@@ -37,6 +37,13 @@ namespace vkcv
 		size_t                              indexCount;
 	};
 
+	struct PushConstantData {
+        inline PushConstantData(void* data, size_t sizePerDrawcall) : data(data), sizePerDrawcall(sizePerDrawcall){}
+
+		void*   data;
+		size_t  sizePerDrawcall;
+	};
+
     // forward declarations
     class PassManager;
     class PipelineManager;
@@ -232,8 +239,7 @@ namespace vkcv
 		void renderMesh(
 			const PassHandle                        renderpassHandle, 
 			const PipelineHandle                    pipelineHandle,
-			const size_t                            pushConstantSize, 
-			const void*                             pushConstantData, 
+			const PushConstantData                  &pushConstantData,
 			const Mesh                              &mesh,
 			const std::vector<DescriptorSetUsage>   &descriptorSets,
 			const std::vector<ImageHandle>	        &renderTargets);
diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp
index 01eec2fc..e1bbdf3b 100644
--- a/projects/cmd_sync_test/src/main.cpp
+++ b/projects/cmd_sync_test/src/main.cpp
@@ -164,8 +164,7 @@ int main(int argc, const char** argv) {
 		core.renderMesh(
 			trianglePass,
 			trianglePipeline,
-			sizeof(mvp),
-			&mvp,
+			vkcv::PushConstantData((void*) &mvp, sizeof(mvp)),
 			boxMesh,
 			{ vkcv::DescriptorSetUsage(0, descriptorSet) },
 			{ swapchainInput, depthBuffer });
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index 472f3766..96fb0f1e 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -144,8 +144,7 @@ namespace vkcv
 	void Core::renderMesh(
 		const PassHandle                        renderpassHandle, 
 		const PipelineHandle                    pipelineHandle, 
-		const size_t                            pushConstantSize, 
-		const void                              *pushConstantData,
+        const PushConstantData                  &pushConstantData,
 		const Mesh                              &mesh,
         const std::vector<DescriptorSetUsage>   &descriptorSets,
 		const std::vector<ImageHandle>          &renderTargets) {
@@ -273,7 +272,14 @@ namespace vkcv
             const vk::Buffer indexBuffer = m_BufferManager->getBuffer(mesh.indexBuffer);
 
             cmdBuffer.bindIndexBuffer(indexBuffer, 0, vk::IndexType::eUint16);	//FIXME: choose proper size
-            cmdBuffer.pushConstants(pipelineLayout, vk::ShaderStageFlagBits::eAll, 0, pushConstantSize, pushConstantData);
+
+            cmdBuffer.pushConstants(
+                pipelineLayout, 
+                vk::ShaderStageFlagBits::eAll, 
+                0, 
+                pushConstantData.sizePerDrawcall, 
+                pushConstantData.data);
+
             cmdBuffer.drawIndexed(mesh.indexCount, 1, 0, 0, {});
             cmdBuffer.endRenderPass();
         };
-- 
GitLab