vkGetDescriptorSetLayoutSizeEXT
To determine the amount of memory needed to store all descriptors with a given layout, call:
void vkGetDescriptorSetLayoutSizeEXT(
VkDevice device,
VkDescriptorSetLayout layout,
VkDeviceSize* pLayoutSizeInBytes);
deviceis the logical device that gets the size.layoutis the descriptor set layout being queried.pLayoutSizeInBytesis a pointer to VkDeviceSize where the size in bytes will be written.
The size of a descriptor set layout will be at least as large as the sum total of the size of all descriptors in the layout, and may be larger. This size represents the amount of memory that will be required to store all of the descriptors for this layout in memory, when placed according to the layout’s offsets as obtained by vkGetDescriptorSetLayoutBindingOffsetEXT.
If any binding in layout is
VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, the returned size
includes space for the maximum descriptorCount descriptors as declared
for that binding.
To compute the required size of a descriptor set with a
VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT:
- size = offset + descriptorSize × variableDescriptorCount
where offset is obtained by
vkGetDescriptorSetLayoutBindingOffsetEXT and descriptorSize is
the size of the relevant descriptor as obtained from
VkPhysicalDeviceDescriptorBufferPropertiesEXT, and
variableDescriptorCount is the equivalent of
VkDescriptorSetVariableDescriptorCountAllocateInfo::pDescriptorCounts.
For VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
variableDescriptorCount is the size in bytes for the inline uniform
block, and descriptorSize is 1.
If
VkPhysicalDeviceDescriptorBufferPropertiesEXT::combinedImageSamplerDescriptorSingleArray
is VK_FALSE and the variable descriptor type is
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
variableDescriptorCount is always considered to be the upper bound.
Valid Usage
VUID-vkGetDescriptorSetLayoutSizeEXT-None-08011
The descriptorBuffer feature must
be enabled
VUID-vkGetDescriptorSetLayoutSizeEXT-layout-08012
layout must have been created with the
VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT flag set
Valid Usage (Implicit)
VUID-vkGetDescriptorSetLayoutSizeEXT-device-parameter
device must be a valid VkDevice handle
VUID-vkGetDescriptorSetLayoutSizeEXT-layout-parameter
layout must be a valid VkDescriptorSetLayout handle
VUID-vkGetDescriptorSetLayoutSizeEXT-pLayoutSizeInBytes-parameter
pLayoutSizeInBytes must be a valid pointer to a VkDeviceSize value
VUID-vkGetDescriptorSetLayoutSizeEXT-layout-parent
layout must have been created, allocated, or retrieved from device