diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index 9d57e18955ff04aaef79d88673adb16cd806b5bc..0271adca3aafbfc6afc19a418259b96e55ac8377 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -239,7 +239,6 @@ namespace vkcv } // vertex input state - // Fill up VertexInputBindingDescription and VertexInputAttributeDescription Containers std::vector<vk::VertexInputAttributeDescription> vertexAttributeDescriptions; std::vector<vk::VertexInputBindingDescription> vertexBindingDescriptions; @@ -270,15 +269,16 @@ namespace vkcv vk::PipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo = createPipelineColorBlendStateCreateInfo(config); - // pipeline layout - + // Dynamic State + vk::PipelineDynamicStateCreateInfo dynamicStateCreateInfo = + createPipelineDynamicStateCreateInfo(config); + // pipeline layout vk::PipelineLayoutCreateInfo pipelineLayoutCreateInfo = createPipelineLayoutCreateInfo(config); vk::PipelineLayout vkPipelineLayout{}; - if (m_Device.createPipelineLayout(&pipelineLayoutCreateInfo, nullptr, &vkPipelineLayout) != vk::Result::eSuccess) - { + if (m_Device.createPipelineLayout(&pipelineLayoutCreateInfo, nullptr, &vkPipelineLayout) != vk::Result::eSuccess) { destroyShaderModules(); return PipelineHandle(); } @@ -297,10 +297,7 @@ namespace vkcv } } - // Dynamic State - vk::PipelineDynamicStateCreateInfo dynamicStateCreateInfo = - createPipelineDynamicStateCreateInfo(config); - + // Get all setting structs together and create the Pipeline const vk::GraphicsPipelineCreateInfo graphicsPipelineCreateInfo( {}, static_cast<uint32_t>(shaderStages.size()), @@ -321,6 +318,7 @@ namespace vkcv 0 ); + // Catch runtime error if the creation of the pipeline fails. vk::Pipeline vkPipeline{}; if (m_Device.createGraphicsPipelines(nullptr, 1, &graphicsPipelineCreateInfo, nullptr, &vkPipeline) != vk::Result::eSuccess) { @@ -328,8 +326,10 @@ namespace vkcv return PipelineHandle(); } + // Clean Up destroyShaderModules(); + // Hand over Handler to main Application const uint64_t id = m_Pipelines.size(); m_Pipelines.push_back({ vkPipeline, vkPipelineLayout, config }); return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); }); diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp index 95c375047f8fc88344c311acab7a0293d1bca4ae..a95028c9a3b5a17018a0a95ff9263a1e2b030bea 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/PipelineManager.hpp @@ -130,6 +130,11 @@ namespace vkcv */ vk::PipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateCreateInfo(const PipelineConfig &config); + /** + * Creates a Pipeline Dynamic State Create Info Struct. + * @param config sets whenever a dynamic viewport is used or not. + * @return Pipeline Dynamic State Create Info Struct + */ vk::PipelineDynamicStateCreateInfo createPipelineDynamicStateCreateInfo(const PipelineConfig &config); }; }