diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index fd268acc511823f1692296933b52c24ab7b02399..29c7cbde4bf3da908800701de79c038fe22a6048 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -17,6 +17,63 @@ namespace vkcv } } + vk::Pipeline PipelineManager::getVkPipeline(const PipelineHandle &handle) const + { + const uint64_t id = handle.getId(); + + if (id >= m_Pipelines.size()) { + return nullptr; + } + + auto& pipeline = m_Pipelines[id]; + + return pipeline.m_handle; + } + + vk::PipelineLayout PipelineManager::getVkPipelineLayout(const PipelineHandle &handle) const + { + const uint64_t id = handle.getId(); + + if (id >= m_Pipelines.size()) { + return nullptr; + } + + auto& pipeline = m_Pipelines[id]; + + return pipeline.m_layout; + } + + const PipelineConfig& PipelineManager::getPipelineConfig(const PipelineHandle &handle) const + { + const uint64_t id = handle.getId(); + + if (id >= m_Pipelines.size()) { + static PipelineConfig dummyConfig; + vkcv_log(LogLevel::ERROR, "Invalid handle"); + return dummyConfig; + } + + return m_Pipelines[id].m_config; + } + + void PipelineManager::destroyPipelineById(uint64_t id) { + if (id >= m_Pipelines.size()) { + return; + } + + auto& pipeline = m_Pipelines[id]; + + if (pipeline.m_handle) { + m_Device.destroy(pipeline.m_handle); + pipeline.m_handle = nullptr; + } + + if (pipeline.m_layout) { + m_Device.destroy(pipeline.m_layout); + pipeline.m_layout = nullptr; + } + } + // TODO: Move to Header // currently assuming default 32 bit formats, no lower precision or normalized variants supported vk::Format vertexFormatToVulkanFormat(const VertexAttachmentFormat format) { @@ -360,63 +417,6 @@ namespace vkcv return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); }); } - vk::Pipeline PipelineManager::getVkPipeline(const PipelineHandle &handle) const - { - const uint64_t id = handle.getId(); - - if (id >= m_Pipelines.size()) { - return nullptr; - } - - auto& pipeline = m_Pipelines[id]; - - return pipeline.m_handle; - } - - vk::PipelineLayout PipelineManager::getVkPipelineLayout(const PipelineHandle &handle) const - { - const uint64_t id = handle.getId(); - - if (id >= m_Pipelines.size()) { - return nullptr; - } - - auto& pipeline = m_Pipelines[id]; - - return pipeline.m_layout; - } - - void PipelineManager::destroyPipelineById(uint64_t id) { - if (id >= m_Pipelines.size()) { - return; - } - - auto& pipeline = m_Pipelines[id]; - - if (pipeline.m_handle) { - m_Device.destroy(pipeline.m_handle); - pipeline.m_handle = nullptr; - } - - if (pipeline.m_layout) { - m_Device.destroy(pipeline.m_layout); - pipeline.m_layout = nullptr; - } - } - - const PipelineConfig& PipelineManager::getPipelineConfig(const PipelineHandle &handle) const - { - const uint64_t id = handle.getId(); - - if (id >= m_Pipelines.size()) { - static PipelineConfig dummyConfig; - vkcv_log(LogLevel::ERROR, "Invalid handle"); - return dummyConfig; - } - - return m_Pipelines[id].m_config; - } - PipelineHandle PipelineManager::createComputePipeline( const ShaderProgram &shaderProgram, const std::vector<vk::DescriptorSetLayout> &descriptorSetLayouts) {