SpiecsEngine
 
Loading...
Searching...
No Matches

◆ BuildBindLessTextureDescriptorSetLayout()

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

Build a bindLess texture 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 162 of file VulkanDescriptor.cpp.

166 {
168
172 std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings{};
173 std::vector<VkDescriptorBindingFlags> setBindingFlags{};
174
175 for (auto& kv : bindings)
176 {
177 setLayoutBindings.push_back(kv.second);
178
179 switch (kv.second.descriptorType)
180 {
181 case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
182 setBindingFlags.push_back(VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT | VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT);
183 break;
184 default:
185 SPICES_CORE_ERROR("BindLess only support COMBINED_IMAGE_SAMPLER type binding")
186 break;
187 }
188 }
189
193 VkDescriptorSetLayoutBindingFlagsCreateInfo bindingFlags{};
194 bindingFlags.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
195 bindingFlags.pNext = nullptr;
196 bindingFlags.pBindingFlags = setBindingFlags.data();
197 bindingFlags.bindingCount = static_cast<uint32_t>(setBindingFlags.size());
198
202 VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo{};
203 descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
204 descriptorSetLayoutCreateInfo.bindingCount = static_cast<uint32_t>(setLayoutBindings.size());
205 descriptorSetLayoutCreateInfo.pBindings = setLayoutBindings.data();
206 descriptorSetLayoutCreateInfo.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT; /* @brief Create if from a descriptor pool that has update after bind. */
207 descriptorSetLayoutCreateInfo.pNext = &bindingFlags;
208
212 VK_CHECK(vkCreateDescriptorSetLayout(m_VulkanState.m_Device, &descriptorSetLayoutCreateInfo, nullptr, &m_Layout))
213 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, reinterpret_cast<uint64_t>(m_Layout), m_VulkanState.m_Device, "DescriptorSetLayout" + caption)
214 }
#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.