diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index e7d098812c1f7397b2bdd9a5d745376a397b415b..3071286eea20b57c0fc909716ed933a968e01197 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 01eec2fc2bf95e616739e0a84a35add13865cdd4..e1bbdf3bda378119a3d90688a2e6a7786f16acfe 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 472f3766de22edbc96776499566ed5c53c02a41f..96fb0f1e9d1287c0df0b9e63196c516bea716f57 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(); };