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