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