From ddf3936a56e4ee78920bf6d1aad770070291cfc7 Mon Sep 17 00:00:00 2001
From: Artur Wasmut <awasmut@uni-koblenz.de>
Date: Sat, 3 Jul 2021 15:46:00 +0200
Subject: [PATCH] [#87] add mesh shader draw call and check for push constant
 data before pushing

---
 projects/mesh_shader/src/main.cpp |  9 +++++++++
 src/vkcv/DrawcallRecording.cpp    | 19 ++++++++++---------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp
index e9f48dcd..5e760256 100644
--- a/projects/mesh_shader/src/main.cpp
+++ b/projects/mesh_shader/src/main.cpp
@@ -148,6 +148,14 @@ int main(int argc, const char** argv) {
 		vkcv::PushConstantData pushConstantData((void*)&mvp, sizeof(glm::mat4));
 		auto cmdStream = core.createCommandStream(vkcv::QueueType::Graphics);
 
+		core.recordMeshShaderDrawcalls(
+			cmdStream,
+			renderPass,
+			meshShaderPipeline,
+			vkcv::PushConstantData(nullptr, 0),
+			{ vkcv::MeshShaderDrawcall({}, 1) },
+			{ swapchainInput });
+
 		core.recordDrawcallsToCmdStream(
 			cmdStream,
 			renderPass,
@@ -156,6 +164,7 @@ int main(int argc, const char** argv) {
 			{ drawcall },
 			{ swapchainInput });
 
+
 		core.prepareSwapchainImageForPresent(cmdStream);
 		core.submitCommandStream(cmdStream);
 		
diff --git a/src/vkcv/DrawcallRecording.cpp b/src/vkcv/DrawcallRecording.cpp
index 6ff3209b..d2112a5a 100644
--- a/src/vkcv/DrawcallRecording.cpp
+++ b/src/vkcv/DrawcallRecording.cpp
@@ -76,17 +76,18 @@ namespace vkcv {
                 nullptr);
         }
 
-        const size_t drawcallPushConstantOffset = pushConstantOffset;
         // char* cast because void* does not support pointer arithmetic
-        const void* drawcallPushConstantData = drawcallPushConstantOffset + (char*)pushConstantData.data;
+        const void* drawcallPushConstantData = pushConstantOffset + (char*)pushConstantData.data;
 
-        cmdBuffer.pushConstants(
-            pipelineLayout,
-            vk::ShaderStageFlagBits::eAll,
-            0,
-            pushConstantData.sizePerDrawcall,
-            drawcallPushConstantData);
+        if (pushConstantData.data) {
+            cmdBuffer.pushConstants(
+                pipelineLayout,
+                vk::ShaderStageFlagBits::eAll,
+                0,
+                pushConstantData.sizePerDrawcall,
+                drawcallPushConstantData);
+        }
 
-        MeshShaderFunctions.cmdDrawMeshTasks(cmdBuffer, drawcall.taskCount, firstTask);
+        MeshShaderFunctions.cmdDrawMeshTasks(VkCommandBuffer(cmdBuffer), drawcall.taskCount, firstTask);
     }
 }
\ No newline at end of file
-- 
GitLab