1#ifndef LIBSBX_GRAPHICS_COMPUTE_PIPELINE_HPP_
2#define LIBSBX_GRAPHICS_COMPUTE_PIPELINE_HPP_
4#include <vulkan/vulkan.hpp>
8#include <libsbx/math/vector3.hpp>
10#include <libsbx/graphics/pipeline/pipeline.hpp>
12namespace sbx::graphics {
22 auto handle()
const noexcept ->
const VkPipeline&
override {
26 auto has_variable_descriptors()
const noexcept ->
bool override {
30 auto descriptor_counts()
const noexcept ->
const std::unordered_map<std::uint32_t, std::uint32_t>&
override {
31 return _descriptor_count_at_binding;
34 auto descriptor_set_layout()
const noexcept ->
const VkDescriptorSetLayout&
override {
35 return _descriptor_set_layout;
38 auto descriptor_pool()
const noexcept ->
const VkDescriptorPool&
override {
39 return _descriptor_pool;
42 auto layout()
const noexcept ->
const VkPipelineLayout&
override {
46 auto bind_point()
const noexcept -> VkPipelineBindPoint
override {
51 if (
auto it = _uniform_blocks.find(name); it != _uniform_blocks.end()) {
55 throw std::runtime_error(fmt::format(
"Failed to find descriptor block '{}' in graphics pipeline '{}'", name, _name));
58 auto find_descriptor_binding(
const std::string& name)
const -> std::optional<std::uint32_t>
override {
59 if (
auto it = _descriptor_bindings.find(name); it != _descriptor_bindings.end()) {
66 auto find_descriptor_type_at_binding(std::uint32_t binding)
const -> std::optional<VkDescriptorType>
override {
67 if (
auto it = _descriptor_type_at_binding.find(binding); it != _descriptor_type_at_binding.end()) {
80 auto _get_stage_from_name(
const std::string& name)
const noexcept -> VkShaderStageFlagBits;
82 std::unique_ptr<shader> _shader;
84 std::unordered_map<std::string, shader::uniform> _uniforms;
85 std::unordered_map<std::string, shader::uniform_block> _uniform_blocks;
87 std::unordered_map<std::uint32_t, VkDescriptorType> _descriptor_type_at_binding;
88 std::unordered_map<std::uint32_t, std::uint32_t> _descriptor_count_at_binding;
90 std::unordered_map<std::string, std::uint32_t> _descriptor_bindings;
91 std::unordered_map<std::string, std::uint32_t> _descriptor_sizes;
94 VkPipelineLayout _layout;
96 VkPipelineBindPoint _bind_point;
98 VkDescriptorPool _descriptor_pool;
99 VkDescriptorSetLayout _descriptor_set_layout;
Definition: command_buffer.hpp:14
Definition: compute_pipeline.hpp:14
Definition: pipeline.hpp:18
Definition: vector3.hpp:22