SpiecsEngine
 
Loading...
Searching...
No Matches

◆ BuildDescriptorSetLayout()

void Spices::VulkanDescriptorSetLayout::BuildDescriptorSetLayout ( const std::unordered_map< uint32_t, VkDescriptorSetLayoutBinding > & bindings,
const std::string & caption = "" )

Build a VkDescriptorSetLayout with bindings.

Parameters
[in]bindingsall the bindings used in a VkDescriptorSetLayout.
[in]captionDescriptorSetLayout Name.

Get linear binding data and flags.

@breif Instance a VkDescriptorSetLayoutBindingFlagsCreateInfo.

@breif Instance a VkDescriptorSetLayoutCreateInfo.

Create DescriptorSetLayout.

Get linear binding data and flags.

@breif Instance a VkDescriptorSetLayoutBindingFlagsCreateInfo.

@breif Instance a VkDescriptorSetLayoutCreateInfo.

Create DescriptorSetLayout.

Definition at line 108 of file VulkanDescriptor.cpp.

112 {
114
118 std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings{};
119 std::vector<VkDescriptorBindingFlags> setBindingFlags{};
120
121 for (auto& kv : bindings)
122 {
123 setLayoutBindings.push_back(kv.second);
124
125 switch (kv.second.descriptorType)
126 {
127 case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
128 setBindingFlags.push_back(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT); /* @brief VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT not support VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT. */
129 break;
130 default:
131 setBindingFlags.push_back(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT);
132 break;
133 }
134 }
135
139 VkDescriptorSetLayoutBindingFlagsCreateInfo bindingFlags{};
140 bindingFlags.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
141 bindingFlags.pNext = nullptr;
142 bindingFlags.pBindingFlags = setBindingFlags.data();
143 bindingFlags.bindingCount = static_cast<uint32_t>(setBindingFlags.size());
144
148 VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo{};
149 descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
150 descriptorSetLayoutCreateInfo.bindingCount = static_cast<uint32_t>(setLayoutBindings.size());
151 descriptorSetLayoutCreateInfo.pBindings = setLayoutBindings.data();
152 descriptorSetLayoutCreateInfo.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT; /* @brief Create if from a descriptor pool that has update after bind. */
153 descriptorSetLayoutCreateInfo.pNext = &bindingFlags;
154
158 VK_CHECK(vkCreateDescriptorSetLayout(m_VulkanState.m_Device, &descriptorSetLayoutCreateInfo, nullptr, &m_Layout))
159 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, reinterpret_cast<uint64_t>(m_Layout), m_VulkanState.m_Device, "DescriptorSetLayout" + caption)
160 }
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
Definition VulkanUtils.h:68
VkDescriptorSetLayout m_Layout
The VkDescriptorSetLayout this class handled.
VulkanState & m_VulkanState
The global VulkanState Referenced from VulkanRenderBackend.