diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp index e9f48dcd2e0e34395407983c3ec46d173940368f..5e760256170ab43147823f64d2a861497e9070dc 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 6ff3209b0cfb834c20cdb72be925981f51862d84..d2112a5a330d5373249ae4999ea8b2d84b3730b4 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