1#ifndef LIBSBX_GRAPHICS_PIPELINE_PIPELINE_HPP_
2#define LIBSBX_GRAPHICS_PIPELINE_PIPELINE_HPP_
7#include <vulkan/vulkan.hpp>
9#include <libsbx/utility/noncopyable.hpp>
12#include <libsbx/graphics/commands/command_buffer.hpp>
14#include <libsbx/graphics/pipeline/shader.hpp>
16namespace sbx::graphics {
23 std::uint32_t renderpass;
24 std::uint32_t subpass;
26 auto operator==(
const stage& rhs)
const noexcept ->
bool {
27 return renderpass == rhs.renderpass && subpass == rhs.subpass;
30 auto operator<(
const stage& rhs)
const noexcept ->
bool {
31 return renderpass < rhs.renderpass || (renderpass == rhs.renderpass && subpass < rhs.subpass);
43 operator const VkPipeline&()
const noexcept {
47 virtual auto handle() const noexcept -> const VkPipeline& = 0;
49 virtual auto has_variable_descriptors() const noexcept ->
bool = 0;
51 virtual auto descriptor_counts() const noexcept -> const std::unordered_map<std::uint32_t, std::uint32_t>& = 0;
53 virtual auto descriptor_set_layout() const noexcept -> const VkDescriptorSetLayout& = 0;
55 virtual auto descriptor_pool() const noexcept -> const VkDescriptorPool& = 0;
57 virtual auto layout() const noexcept -> const VkPipelineLayout& = 0;
59 virtual auto bind_point() const noexcept -> VkPipelineBindPoint = 0;
61 virtual auto descriptor_block(const std::
string& name) const -> const shader::uniform_block& = 0;
63 virtual auto find_descriptor_binding(const std::
string& name) const -> std::optional<std::uint32_t> = 0;
65 virtual auto find_descriptor_type_at_binding(std::uint32_t binding) const -> std::optional<VkDescriptorType> = 0;
72struct std::hash<sbx::graphics::pipeline::stage> {
74 auto hash = std::size_t{0};
75 sbx::utility::hash_combine(hash, stage.renderpass, stage.subpass);
Definition: command_buffer.hpp:14
Definition: pipeline.hpp:18
Definition: pipeline.hpp:22
Definition: noncopyable.hpp:6