59 lines
2.5 KiB
C++
59 lines
2.5 KiB
C++
#pragma once
|
|
#include <vulkan/vulkan.hpp>
|
|
#include <map>
|
|
|
|
#include "buffer_vk.h"
|
|
|
|
class texture;
|
|
|
|
/// 1. add_binding
|
|
/// 2. create();
|
|
/// 3. dispatch();
|
|
class pipeline {
|
|
public:
|
|
virtual ~pipeline() = default;
|
|
|
|
virtual void add_binding(uint32_t binding, vk::DescriptorType descriptor_type, uint32_t descriptor_count, const vk::Sampler* immutable_samplers) = 0;
|
|
|
|
void add_uniform_buffer(uint32_t binding, const buffer_vk& buf, uint32_t descriptor_count = 1) {
|
|
add_binding(binding, vk::DescriptorType::eUniformBuffer, descriptor_count, nullptr);
|
|
buffers_[binding] = buf;
|
|
}
|
|
void add_storage_buffer(uint32_t binding, const buffer_vk& buf, uint32_t descriptor_count = 1) {
|
|
add_binding(binding, vk::DescriptorType::eStorageBuffer, descriptor_count, nullptr);
|
|
buffers_[binding] = buf;
|
|
}
|
|
void add_sampled_image(uint32_t binding, uint32_t descriptor_count = 1, const vk::Sampler* immutable_samplers = nullptr) {
|
|
add_binding(binding, vk::DescriptorType::eSampledImage, descriptor_count, immutable_samplers);
|
|
}
|
|
void add_storage_image(uint32_t binding, std::shared_ptr<texture> in_texture, uint32_t descriptor_count = 1) {
|
|
add_binding(binding, vk::DescriptorType::eStorageImage, descriptor_count, nullptr);
|
|
textures_[binding] = in_texture;
|
|
}
|
|
void add_input_attachment(uint32_t binding, uint32_t descriptor_count = 1) {
|
|
add_binding(binding, vk::DescriptorType::eInputAttachment, descriptor_count, nullptr);
|
|
}
|
|
void add_sampler(uint32_t binding, uint32_t descriptor_count = 1, const vk::Sampler* immutable_samplers = nullptr) {
|
|
add_binding(binding, vk::DescriptorType::eSampler, descriptor_count, immutable_samplers);
|
|
}
|
|
void add_uniform_image(uint32_t binding, std::shared_ptr<texture> in_texture, uint32_t descriptor_count = 1, const vk::Sampler* immutable_samplers = nullptr) {
|
|
add_binding(binding, vk::DescriptorType::eCombinedImageSampler, descriptor_count, immutable_samplers);
|
|
textures_[binding] = in_texture;
|
|
}
|
|
|
|
virtual void create() = 0;
|
|
virtual void destroy() = 0;
|
|
|
|
vk::Pipeline pipeline_;
|
|
vk::PipelineCache pipeline_cache_;
|
|
vk::PipelineLayout pipeline_layout_;
|
|
vk::DescriptorSetLayout descriptor_set_layout_;
|
|
vk::DescriptorSet descriptor_set_;
|
|
std::vector<vk::DescriptorSetLayoutBinding> descriptor_set_layout_bindings_;
|
|
|
|
std::map<uint32_t, buffer_vk> buffers_;
|
|
std::map<uint32_t, std::shared_ptr<texture>> textures_;
|
|
protected:
|
|
void create_pipeline_layout();
|
|
};
|