2 #include <vulkan/vulkan.h>
5 #include <unordered_map>
13 {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000},
14 {VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1000},
15 {VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1000},
16 {VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1000},
17 {VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 1000},
18 {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1000},
19 {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1000},
20 {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1000},
21 {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 1000},
22 {VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1000}});
54 VkDescriptorPool
createPool(VkDevice device, VkDescriptorPoolCreateFlags flags, uint32_t maxSets,
55 const std::vector<VkDescriptorPoolSize>& poolSizes);
103 uint32_t bindingCount);
107 std::vector<VkDescriptorSetLayoutBinding>
bindings;
122 std::unordered_map<DescriptorSetLayoutInfo, VkDescriptorSetLayout, DescriptorLayoutHasher>
layoutCacheM;
142 VkShaderStageFlags stageFlags);
152 DescriptorBuilder&
bindBuffers(
const VkDescriptorBufferInfo* bufferInfos, VkDescriptorType type, VkShaderStageFlags stageFlags, uint32_t count);
162 VkShaderStageFlags stageFlags);
173 VkShaderStageFlags stageFlags, uint32_t count);
182 bool build(VkDescriptorSet& set, VkDescriptorSetLayout& layout);
189 bool build(VkDescriptorSet& set);
197 VkDescriptorSetLayout& layout);
constexpr VkDeviceSize POOL_CHUNK_SIZE
Definition: DescriptorBuilder.hpp:9
const std::vector< VkDescriptorPoolSize > STANDARD_POOL_SIZES({{VK_DESCRIPTOR_TYPE_SAMPLER, 1000}, {VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1000}, {VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1000}, {VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1000}, {VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 1000}, {VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 1000}, {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1000}, {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1000}, {VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1000}, {VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, 1000}, {VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 1000}})
DescriptorBuilder uses PoolManager and DescriptorLayoutCache to manage and create descriptor sets.
Definition: DescriptorBuilder.hpp:129
std::vector< VkWriteDescriptorSet > writeSetsM
Definition: DescriptorBuilder.hpp:203
DescriptorBuilder(PoolManager &poolManager, DescriptorSetLayoutCache &cache)
Definition: DescriptorBuilder.cpp:219
DescriptorBuilder & bindImage(VkDescriptorImageInfo &imageInfo, VkDescriptorType type, VkShaderStageFlags stageFlags)
Creates a descriptor set layout binding and a write descriptor set for an image.
Definition: DescriptorBuilder.cpp:280
~DescriptorBuilder()
Definition: DescriptorBuilder.cpp:226
std::unique_ptr< PoolManager > pPoolManagerM
Definition: DescriptorBuilder.hpp:206
DescriptorBuilder & bindBuffers(const VkDescriptorBufferInfo *bufferInfos, VkDescriptorType type, VkShaderStageFlags stageFlags, uint32_t count)
Creates a descriptor set layout binding and a write descriptor set for multiple buffers.
Definition: DescriptorBuilder.cpp:255
const PoolManager & getPoolManager() const
Definition: DescriptorBuilder.cpp:373
std::vector< VkDescriptorSetLayoutBinding > layoutBindingsM
Definition: DescriptorBuilder.hpp:204
void setDescriptorSetLayout(const VkDescriptorSetLayoutBinding *bindings, uint32_t bindingCount, VkDescriptorSetLayout &layout)
Sets a layout to the supplied parameter from the given bindings.
Definition: DescriptorBuilder.cpp:368
DescriptorBuilder & bindImages(const VkDescriptorImageInfo *imageInfos, VkDescriptorType type, VkShaderStageFlags stageFlags, uint32_t count)
Binds multiple images to the descriptor set as an array.
Definition: DescriptorBuilder.cpp:306
DescriptorBuilder & bindBuffer(VkDescriptorBufferInfo &bufferInfo, VkDescriptorType type, VkShaderStageFlags stageFlags)
Creates a descriptor set layout binding and a write descriptor set for a buffer.
Definition: DescriptorBuilder.cpp:230
std::unique_ptr< DescriptorSetLayoutCache > pLayoutCacheM
Definition: DescriptorBuilder.hpp:207
uint32_t currentBindingM
Definition: DescriptorBuilder.hpp:202
bool build(VkDescriptorSet &set, VkDescriptorSetLayout &layout)
Builds a descriptor set and sets a created layout to the supplied parameter. Also updates the descrip...
Definition: DescriptorBuilder.cpp:332
The use of this class is to cache descriptor set layouts.
Definition: DescriptorBuilder.hpp:84
std::unordered_map< DescriptorSetLayoutInfo, VkDescriptorSetLayout, DescriptorLayoutHasher > layoutCacheM
Definition: DescriptorBuilder.hpp:122
VkDescriptorSetLayout createDescriptorSetLayout(VkDescriptorSetLayoutCreateInfo &layoutInfo)
Creates a descriptor set layout from the given info, or returns one from the cache if it already exis...
Definition: DescriptorBuilder.cpp:131
DescriptorSetLayoutCache(VkDevice device)
Definition: DescriptorBuilder.cpp:118
~DescriptorSetLayoutCache()
Definition: DescriptorBuilder.cpp:123
VkDevice logDeviceM
Definition: DescriptorBuilder.hpp:121
This class manages descriptor pools, and allows for the allocation of descriptor sets.
Definition: DescriptorBuilder.hpp:28
PoolManager(VkDevice device)
Definition: DescriptorBuilder.cpp:7
VkDescriptorPool grabPool()
Returns a pool from free pools or creates a new one. Does not push the returned pool to used pools.
Definition: DescriptorBuilder.cpp:102
~PoolManager()
Definition: DescriptorBuilder.cpp:12
VkDevice logDeviceM
Definition: DescriptorBuilder.hpp:74
VkDevice getDevice() const
Returns the logical device used by this manager.
Definition: DescriptorBuilder.hpp:61
std::vector< VkDescriptorPool > freePoolsM
Definition: DescriptorBuilder.hpp:76
void resetPools()
Resets pools
Definition: DescriptorBuilder.cpp:25
VkDescriptorPool currentPoolM
Definition: DescriptorBuilder.hpp:75
bool allocateDescriptorSet(VkDescriptorSetLayout layout, VkDescriptorSet &descSet)
Allocates a descriptor set from the pool
Definition: DescriptorBuilder.cpp:37
VkDescriptorPool createPool(VkDevice device, VkDescriptorPoolCreateFlags flags, uint32_t maxSets, const std::vector< VkDescriptorPoolSize > &poolSizes)
Allocates a descriptor pool and adds it to the free pools.
Definition: DescriptorBuilder.cpp:83
std::vector< VkDescriptorPool > usedPoolsM
Definition: DescriptorBuilder.hpp:77
Definition: DescriptorBuilder.hpp:114
size_t operator()(const DescriptorSetLayoutInfo &info) const
Definition: DescriptorBuilder.hpp:115
Definition: DescriptorBuilder.hpp:106
size_t hash() const
Definition: DescriptorBuilder.cpp:206
std::vector< VkDescriptorSetLayoutBinding > bindings
Definition: DescriptorBuilder.hpp:107
bool operator==(const DescriptorSetLayoutInfo &other) const
Definition: DescriptorBuilder.cpp:183