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