sandbox
Loading...
Searching...
No Matches
pipeline.hpp
1#ifndef LIBSBX_GRAPHICS_PIPELINE_PIPELINE_HPP_
2#define LIBSBX_GRAPHICS_PIPELINE_PIPELINE_HPP_
3
4#include <cinttypes>
5#include <optional>
6
7#include <vulkan/vulkan.hpp>
8
9#include <libsbx/utility/noncopyable.hpp>
11
12#include <libsbx/graphics/commands/command_buffer.hpp>
13
14#include <libsbx/graphics/pipeline/shader.hpp>
15
16#include <libsbx/graphics/render_graph.hpp>
17
18namespace sbx::graphics {
19
21
22public:
23
24 pipeline() { }
25
26 virtual ~pipeline() = default;
27
28 auto bind(command_buffer& command_buffer) const noexcept -> void {
29 vkCmdBindPipeline(command_buffer, bind_point(), handle());
30 }
31
32 operator VkPipeline() const noexcept {
33 return handle();
34 }
35
36 virtual auto handle() const noexcept -> VkPipeline = 0;
37
38 virtual auto has_variable_descriptors() const noexcept -> bool = 0;
39
40 virtual auto descriptor_counts(std::uint32_t set) const noexcept -> std::vector<std::uint32_t> = 0;
41
42 virtual auto descriptor_set_layout(std::uint32_t set) const noexcept -> VkDescriptorSetLayout = 0;
43
44 virtual auto descriptor_pool() const noexcept -> VkDescriptorPool = 0;
45
46 virtual auto layout() const noexcept -> VkPipelineLayout = 0;
47
48 virtual auto bind_point() const noexcept -> VkPipelineBindPoint = 0;
49
50 virtual auto descriptor_block(const std::string& name, std::uint32_t set) const -> const shader::uniform_block& = 0;
51
52 virtual auto push_constant() const noexcept -> const std::optional<shader::uniform_block>& = 0;
53
54 virtual auto find_descriptor_binding(const std::string& name, std::uint32_t set) const -> std::optional<std::uint32_t> = 0;
55
56 virtual auto find_descriptor_type_at_binding(std::uint32_t set, std::uint32_t binding) const -> std::optional<VkDescriptorType> = 0;
57
58}; // class pipeline
59
60} // namespace sbx::graphics
61
62#endif // LIBSBX_GRAPHICS_PIPELINE_PIPELINE_HPP_
Definition: command_buffer.hpp:14
Definition: pipeline.hpp:20
Definition: shader.hpp:125
Definition: noncopyable.hpp:6