From c0d3d3c4304b8eed9c78634b530cfbcd64ab5d08 Mon Sep 17 00:00:00 2001 From: Mark Oliver Mints <mmints@uni-koblenz.de> Date: Wed, 9 Jun 2021 09:30:28 +0200 Subject: [PATCH] [#65][Add] Compute Shader Module --- src/vkcv/PipelineManager.cpp | 19 ++++++++++++++++--- src/vkcv/PipelineManager.hpp | 4 +++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index c8da089b..d0161271 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 43590dfa..cdff8153 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; -- GitLab