Skip to content
Snippets Groups Projects
Commit c0d3d3c4 authored by Mark Oliver Mints's avatar Mark Oliver Mints
Browse files

[#65][Add] Compute Shader Module

parent 8331c9cf
No related branches found
No related tags found
1 merge request!58Resolve "Compute Pipeline"
...@@ -315,10 +315,14 @@ namespace vkcv ...@@ -315,10 +315,14 @@ namespace vkcv
return m_Configs.at(id); 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 // 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 vk::PipelineShaderStageCreateInfo pipelineShaderStageCreateInfo; // TODO: Set params
// TODO: Set Compute Pipeline Layout // TODO: Set Compute Pipeline Layout
...@@ -331,7 +335,16 @@ namespace vkcv ...@@ -331,7 +335,16 @@ namespace vkcv
{ {
// TODO: Set Params // TODO: Set Params
} }
return PipelineHandle(); 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
...@@ -21,6 +21,8 @@ namespace vkcv ...@@ -21,6 +21,8 @@ namespace vkcv
std::vector<PipelineConfig> m_Configs; std::vector<PipelineConfig> m_Configs;
void destroyPipelineById(uint64_t id); void destroyPipelineById(uint64_t id);
vk::Result createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, const ShaderStage stage);
public: public:
PipelineManager() = delete; // no default ctor PipelineManager() = delete; // no default ctor
...@@ -35,7 +37,7 @@ namespace vkcv ...@@ -35,7 +37,7 @@ namespace vkcv
PipelineHandle createPipeline(const PipelineConfig &config, PassManager& passManager); PipelineHandle createPipeline(const PipelineConfig &config, PassManager& passManager);
PipelineHandle createComputePipeline(); PipelineHandle createComputePipeline(const ShaderProgram &shaderProgram);
[[nodiscard]] [[nodiscard]]
vk::Pipeline getVkPipeline(const PipelineHandle &handle) const; vk::Pipeline getVkPipeline(const PipelineHandle &handle) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment