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

[#71] implement function to get pipeline and layout

parent 68834463
No related branches found
No related tags found
1 merge request!83Resolve "Refactor Pipeline Config and Manager"
Pipeline #26997 passed
#include "ComputePipelineManager.hpp"
#include "vkcv/Logger.hpp"
namespace vkcv {
namespace vkcv
{
ComputePipelineManager::ComputePipelineManager(vk::Device device) noexcept :
m_Device{device},
......@@ -15,6 +15,31 @@ namespace vkcv {
}
}
vk::Pipeline ComputePipelineManager::getVkPipeline(const ComputePipelineHandle &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 ComputePipelineManager::getVkPipelineLayout(const ComputePipelineHandle &handle) const
{
const uint64_t id = handle.getId();
if (id >= m_Pipelines.size()) {
return nullptr;
}
auto& pipeline = m_Pipelines[id];
return pipeline.m_layout;
}
ComputePipelineHandle ComputePipelineManager::createComputePipeline(
const ShaderProgram &shaderProgram,
......@@ -23,7 +48,7 @@ namespace vkcv {
// Temporally handing over the Shader Program instead of a pipeline config
vk::ShaderModule computeModule{};
if (createShaderModule(computeModule, shaderProgram, ShaderStage::COMPUTE) != vk::Result::eSuccess)
return PipelineHandle();
return ComputePipelineHandle();
vk::PipelineShaderStageCreateInfo pipelineComputeShaderStageInfo(
{},
......@@ -46,7 +71,7 @@ namespace vkcv {
if (m_Device.createPipelineLayout(&pipelineLayoutCreateInfo, nullptr, &vkPipelineLayout) !=
vk::Result::eSuccess) {
m_Device.destroy(computeModule);
return PipelineHandle();
return ComputePipelineHandle();
}
vk::ComputePipelineCreateInfo computePipelineCreateInfo{};
......@@ -57,7 +82,7 @@ namespace vkcv {
if (m_Device.createComputePipelines(nullptr, 1, &computePipelineCreateInfo, nullptr, &vkPipeline) !=
vk::Result::eSuccess) {
m_Device.destroy(computeModule);
return PipelineHandle();
return ComputePipelineHandle();
}
m_Device.destroy(computeModule);
......@@ -65,10 +90,9 @@ namespace vkcv {
const uint64_t id = m_Pipelines.size();
m_Pipelines.push_back({vkPipeline, vkPipelineLayout, PipelineConfig()});
return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); });
return ComputePipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); });
}
void vkcv::ComputePipelineManager::destroyPipelineById(uint64_t id) {
if (id >= m_Pipelines.size()) {
return;
......@@ -93,5 +117,4 @@ namespace vkcv {
vk::ShaderModuleCreateInfo moduleInfo({}, code.size(), reinterpret_cast<uint32_t*>(code.data()));
return m_Device.createShaderModule(&moduleInfo, nullptr, &module);
}
}
\ No newline at end of file
#pragma once
#include <vulkan/vulkan.hpp>
#include <vector>
#include "vkcv/Handles.hpp"
#include "PassManager.hpp"
/**
* * @authors Mark Mints
* @authors Mark Mints
* @file src/vkcv/ComputePipelineManager.hpp
* @brief Creation and handling of Compute Pipelines
*/
namespace vkcv {
#include <vulkan/vulkan.hpp>
#include <vector>
#include "vkcv/Handles.hpp"
namespace vkcv
{
class ComputePipelineManager
{
......@@ -26,6 +26,22 @@ namespace vkcv {
ComputePipelineManager & operator=(const ComputePipelineManager &other) = delete; // copy-assign op
ComputePipelineManager & operator=(ComputePipelineManager &&other) = delete; // move-assign op
/**
* Returns a vk::Pipeline object by handle.
* @param handle Directing to the requested pipeline.
* @return vk::Pipeline.
*/
[[nodiscard]]
vk::Pipeline getVkPipeline(const ComputePipelineHandle &handle) const;
/**
* Returns a vk::PipelineLayout object by handle.
* @param handle Directing to the requested pipeline.
* @return vk::PipelineLayout.
*/
[[nodiscard]]
vk::PipelineLayout getVkPipelineLayout(const ComputePipelineHandle &handle) const;
ComputePipelineHandle createComputePipeline(
const ShaderProgram& shaderProgram,
const std::vector<vk::DescriptorSetLayout>& descriptorSetLayouts);
......@@ -42,7 +58,6 @@ namespace vkcv {
void destroyPipelineById(uint64_t id);
// TODO: Move to ComputePipelineManager
vk::Result createShaderModule(vk::ShaderModule &module, const ShaderProgram &shaderProgram, ShaderStage stage);
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment