Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
DescriptorSetUpdater.h
Go to the documentation of this file.
1#pragma once
2#include <vector>
3#include <deque>
4#include <vulkan/vulkan_core.h>
5
6namespace EngineCore {
7
15 public:
16 DescriptorSetUpdater(VkDescriptorSet dstSet);
17
24 [[nodiscard]] DescriptorSetUpdater& addStorageBuffer(uint32_t binding, const VkDescriptorBufferInfo* pBufferInfo);
31 [[nodiscard]] DescriptorSetUpdater& addStorageBuffer(uint32_t binding, const VkDescriptorBufferInfo& bufferInfo);
38 [[nodiscard]] DescriptorSetUpdater& addUniformBuffer(uint32_t binding, const VkDescriptorBufferInfo* pBufferInfo);
45 [[nodiscard]] DescriptorSetUpdater& addUniformBuffer(uint32_t binding, const VkDescriptorBufferInfo& bufferInfo);
53 [[nodiscard]] DescriptorSetUpdater& addTextureArrayIf(const bool condition, uint32_t binding, std::vector<VkDescriptorImageInfo>* imageInfos);
60 [[nodiscard]] DescriptorSetUpdater& addCombinedImageSampler(uint32_t binding, const VkDescriptorImageInfo* pImageInfo);
67 [[nodiscard]] DescriptorSetUpdater& addStorageImage(uint32_t binding, const VkDescriptorImageInfo* pImageInfo);
68
73 void update(VkDevice device) const;
74
75 private:
76 VkDescriptorSet dstSet = VK_NULL_HANDLE;
77 std::vector<VkWriteDescriptorSet> writeDescriptorSets;
78 // Storage for buffer/image infos to ensure they outlive the update() call
79 // VkWriteDescriptorSet stores pointers, so we need stable storage
80 // Using deque because it doesn't invalidate references when elements are added
81 std::deque<VkDescriptorBufferInfo> bufferInfoStorage;
82 std::deque<VkDescriptorImageInfo> imageInfoStorage;
83 };
84
86 public:
88
89 [[nodiscard]] DescriptorSetLayoutBuilder& addStorageBuffer(uint32_t binding, VkShaderStageFlags stageFlags);
90 [[nodiscard]] DescriptorSetLayoutBuilder& addUniformBuffer(uint32_t binding, VkShaderStageFlags stageFlags);
91 [[nodiscard]] DescriptorSetLayoutBuilder& addCombinedImageSampler(uint32_t binding, VkShaderStageFlags stageFlags);
92 [[nodiscard]] DescriptorSetLayoutBuilder& addStorageImage(uint32_t binding, VkShaderStageFlags stageFlags);
93 [[nodiscard]] DescriptorSetLayoutBuilder& addStorageImageArray(uint32_t binding, uint32_t count, VkShaderStageFlags stageFlags);
94
95 [[nodiscard]] std::vector<VkDescriptorSetLayoutBinding> build();
96 private:
97 std::vector<VkDescriptorSetLayoutBinding> layoutBindings;
98 };
99
100
101}
std::vector< VkDescriptorSetLayoutBinding > build()
DescriptorSetLayoutBuilder & addStorageBuffer(uint32_t binding, VkShaderStageFlags stageFlags)
DescriptorSetLayoutBuilder & addCombinedImageSampler(uint32_t binding, VkShaderStageFlags stageFlags)
DescriptorSetLayoutBuilder & addUniformBuffer(uint32_t binding, VkShaderStageFlags stageFlags)
DescriptorSetLayoutBuilder & addStorageImageArray(uint32_t binding, uint32_t count, VkShaderStageFlags stageFlags)
DescriptorSetLayoutBuilder & addStorageImage(uint32_t binding, VkShaderStageFlags stageFlags)
std::vector< VkDescriptorSetLayoutBinding > layoutBindings
void update(VkDevice device) const
Updates the bindings on a descriptor sets.
std::deque< VkDescriptorBufferInfo > bufferInfoStorage
DescriptorSetUpdater(VkDescriptorSet dstSet)
std::vector< VkWriteDescriptorSet > writeDescriptorSets
DescriptorSetUpdater & addCombinedImageSampler(uint32_t binding, const VkDescriptorImageInfo *pImageInfo)
Adds a combined image sampler to the chain of updates.
DescriptorSetUpdater & addUniformBuffer(uint32_t binding, const VkDescriptorBufferInfo *pBufferInfo)
Adds a uniform buffer (glsl std140 buffer) to the chain of updates to execute.
std::deque< VkDescriptorImageInfo > imageInfoStorage
DescriptorSetUpdater & addStorageBuffer(uint32_t binding, const VkDescriptorBufferInfo *pBufferInfo)
Adds a storage buffer (glsl std430 buffer) to the chain of updates to execute.
DescriptorSetUpdater & addTextureArrayIf(const bool condition, uint32_t binding, std::vector< VkDescriptorImageInfo > *imageInfos)
Adds updates to texture array.
DescriptorSetUpdater & addStorageImage(uint32_t binding, const VkDescriptorImageInfo *pImageInfo)
Adds a storage image to the chain of updates.
Log category system implementation.