SPARK  0.1.0
A general purpose game engine written in C++.
Loading...
Searching...
No Matches
VulkanDescriptorSetLayout.h
1#pragma once
2
3#include "spark/render/DescriptorSet.h"
4#include "spark/render/Resource.h"
5#include "spark/render/ShaderStages.h"
6#include "spark/render/vk/Export.h"
7#include "spark/render/vk/Helpers.h"
8#include "spark/render/vk/VulkanDescriptorLayout.h"
9#include "spark/render/vk/VulkanDescriptorSet.h"
10
11#include <memory>
12
13SPARK_FWD_DECLARE_VK_HANDLE(VkDescriptorSetLayout)
14
15namespace spark::render::vk
16{
17 class VulkanDevice;
18 class VulkanDescriptorLayout;
19 class VulkanDescriptorSet;
20
24 class SPARK_RENDER_VK_EXPORT VulkanDescriptorSetLayout final : public DescriptorSetLayout<VulkanDescriptorLayout, VulkanDescriptorSet>, public Resource<VkDescriptorSetLayout>
25 {
26 public:
36 explicit VulkanDescriptorSetLayout(const VulkanDevice& device,
37 std::vector<std::unique_ptr<VulkanDescriptorLayout>>&& descriptor_layouts,
38 unsigned int space,
39 ShaderStage stages,
40 unsigned int pool_size = 1024,
41 unsigned int max_unbounded_array_size = 104857);
42 ~VulkanDescriptorSetLayout() noexcept override;
43
46 VulkanDescriptorSetLayout& operator=(const VulkanDescriptorSetLayout& other) = delete;
47 VulkanDescriptorSetLayout& operator=(VulkanDescriptorSetLayout&& other) noexcept = delete;
48
63 [[nodiscard]] unsigned poolSize() const noexcept;
64
69 [[nodiscard]] std::size_t pools() const noexcept;
70
75 [[nodiscard]] const VulkanDevice& device() const noexcept;
76
78 [[nodiscard]] std::vector<const VulkanDescriptorLayout*> descriptors() const noexcept override;
79
81 [[nodiscard]] const VulkanDescriptorLayout* descriptor(unsigned binding) const override;
82
84 [[nodiscard]] unsigned space() const noexcept override;
85
87 [[nodiscard]] ShaderStage shaderStage() const noexcept override;
88
90 [[nodiscard]] unsigned uniforms() const noexcept override;
91
93 [[nodiscard]] unsigned storages() const noexcept override;
94
96 [[nodiscard]] unsigned images() const noexcept override;
97
99 [[nodiscard]] unsigned samplers() const noexcept override;
100
102 [[nodiscard]] unsigned buffers() const noexcept override;
103
105 [[nodiscard]] unsigned staticSamplers() const noexcept override;
106
108 [[nodiscard]] unsigned inputAttachments() const noexcept override;
109
111 [[nodiscard]] std::unique_ptr<VulkanDescriptorSet> allocate(const std::vector<DescriptorBinding>& bindings = {}) const override;
112
114 [[nodiscard]] std::unique_ptr<VulkanDescriptorSet> allocate(unsigned descriptors, const std::vector<DescriptorBinding>& bindings = {}) const override;
115
117 [[nodiscard]] std::vector<std::unique_ptr<VulkanDescriptorSet>> allocateMultiple(unsigned descriptor_sets,
118 const std::vector<std::vector<DescriptorBinding>>& bindings = {}) const override;
119
121 [[nodiscard]] std::vector<std::unique_ptr<VulkanDescriptorSet>> allocateMultiple(unsigned descriptor_sets,
122 const std::function<std::vector<DescriptorBinding>(
123 unsigned)>& binding_factory) const override;
124
126 [[nodiscard]] std::vector<std::unique_ptr<VulkanDescriptorSet>> allocateMultiple(unsigned descriptor_sets,
127 unsigned descriptors,
128 const std::vector<std::vector<DescriptorBinding>>& bindings = {}) const override;
129
131 [[nodiscard]] std::vector<std::unique_ptr<VulkanDescriptorSet>> allocateMultiple(unsigned descriptor_sets,
132 unsigned descriptors,
133 const std::function<std::vector<DescriptorBinding>(
134 unsigned)>& binding_factory) const override;
135
137 void free(const VulkanDescriptorSet& descriptor_set) const noexcept override;
138
139 private:
140 struct Impl;
141 std::unique_ptr<Impl> m_impl;
142 };
143}
Describes the layout of a descriptor set.
Definition DescriptorSet.h:451
Definition Resource.h:34
Implements a Vulkan IDescriptorLayout.
Definition VulkanDescriptorLayout.h:17
Vulkan implementation of IDescriptorSetLayout.
Definition VulkanDescriptorSetLayout.h:25
Vulkan implementation of IDescriptorSet.
Definition VulkanDescriptorSet.h:24
Vulkan implementation of IGraphicsDevice.
Definition VulkanDevice.h:25
Definition VulkanDescriptorSetLayout.cpp:21