diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index c8da089b26e2e422d3e0576b1343c85f4d367406..d0161271607b10380c88f3f7f2ca4e68140196aa 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -315,10 +315,14 @@ namespace vkcv return m_Configs.at(id); } - PipelineHandle PipelineManager::createComputePipeline() { - + PipelineHandle PipelineManager::createComputePipeline(const ShaderProgram &shaderProgram) { + // Temporally handing over the Shader Program instead of a pipeline config // TODO: Set Compute Shader Stage + vk::ShaderModule computeModule{}; + if (createShaderModule(computeModule, shaderProgram, ShaderStage::COMPUTE) != vk::Result::eSuccess) + return PipelineHandle(); + vk::PipelineShaderStageCreateInfo pipelineShaderStageCreateInfo; // TODO: Set params // TODO: Set Compute Pipeline Layout @@ -331,7 +335,16 @@ namespace vkcv { // TODO: Set Params } - return PipelineHandle(); } + + // There is an issue for refactoring the Pipeline Manager. + // While including Compute Pipeline Creation, some private helper functions where introduced: + + vk::Result PipelineManager::createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, const ShaderStage stage) + { + std::vector<char> code = shaderProgram.getShader(stage).shaderCode; + vk::ShaderModuleCreateInfo moduleInfo({}, code.size(), reinterpret_cast<uint32_t*>(code.data())); + return m_Device.createShaderModule(&moduleInfo, nullptr, &module); + } } \ No newline at end of file diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp index 43590dfad2debf9a2a4306391aa2d37e06ca54be..cdff81534788cf2678510607ecdea19d403480a1 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/PipelineManager.hpp @@ -21,6 +21,8 @@ namespace vkcv std::vector<PipelineConfig> m_Configs; void destroyPipelineById(uint64_t id); + + vk::Result createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, const ShaderStage stage); public: PipelineManager() = delete; // no default ctor @@ -35,7 +37,7 @@ namespace vkcv PipelineHandle createPipeline(const PipelineConfig &config, PassManager& passManager); - PipelineHandle createComputePipeline(); + PipelineHandle createComputePipeline(const ShaderProgram &shaderProgram); [[nodiscard]] vk::Pipeline getVkPipeline(const PipelineHandle &handle) const;