VkDescriptorSetLayoutBinding
The VkDescriptorSetLayoutBinding
structure is defined as:
typedef struct VkDescriptorSetLayoutBinding {
uint32_t binding;
VkDescriptorType descriptorType;
uint32_t descriptorCount;
VkShaderStageFlags stageFlags;
const VkSampler* pImmutableSamplers;
} VkDescriptorSetLayoutBinding;
binding
is the binding number of this entry and corresponds to a resource of the same binding number in the shader stages.descriptorType
is a VkDescriptorType specifying which type of resource descriptors are used for this binding.descriptorCount
is the number of descriptors contained in the binding, accessed in a shader as an array, except ifdescriptorType
isVK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
in which casedescriptorCount
is the size in bytes of the inline uniform block. IfdescriptorCount
is zero this binding entry is reserved and the resource must not be accessed from any stage via this binding within any pipeline using the set layout.stageFlags
member is a bitmask of VkShaderStageFlagBits specifying which pipeline shader stages can access a resource for this binding.VK_SHADER_STAGE_ALL
is a shorthand specifying that all defined shader stages, including any additional stages defined by extensions, can access the resource.
If a shader stage is not included instageFlags
, then a resource must not be accessed from that stage via this binding within any pipeline using the set layout. Other than input attachments which are limited to the fragment shader, there are no limitations on what combinations of stages can use a descriptor binding, and in particular a binding can be used by both graphics stages and the compute stage.pImmutableSamplers
affects initialization of samplers. IfdescriptorType
specifies aVK_DESCRIPTOR_TYPE_SAMPLER
orVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
type descriptor, thenpImmutableSamplers
can be used to initialize a set of immutable samplers. Immutable samplers are permanently bound into the set layout and must not be changed; updating aVK_DESCRIPTOR_TYPE_SAMPLER
descriptor with immutable samplers is not allowed and updates to aVK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
descriptor with immutable samplers does not modify the samplers (the image views are updated, but the sampler updates are ignored). IfpImmutableSamplers
is notNULL
, then it is a pointer to an array of sampler handles that will be copied into the set layout and used for the corresponding binding. Only the sampler handles are copied; the sampler objects must not be destroyed before the final use of the set layout and any descriptor pools and sets created using it. IfpImmutableSamplers
isNULL
, then the sampler slots are dynamic and sampler handles must be bound into descriptor sets using this layout. IfdescriptorType
is not one of these descriptor types, thenpImmutableSamplers
is ignored.
The above layout definition allows the descriptor bindings to be specified
sparsely such that not all binding numbers between 0 and the maximum binding
number need to be specified in the pBindings
array.
Bindings that are not specified have a descriptorCount
and
stageFlags
of zero, and the value of descriptorType
is
undefined:.
However, all binding numbers between 0 and the maximum binding number in the
VkDescriptorSetLayoutCreateInfo::pBindings
array may consume
memory in the descriptor set layout even if not all descriptor bindings are
used, though it should not consume additional memory from the descriptor
pool.
The maximum binding number specified should be as compact as possible to avoid wasted memory.
Valid Usage
VUID-VkDescriptorSetLayoutBinding-descriptorType-00282
If descriptorType
is VK_DESCRIPTOR_TYPE_SAMPLER
or
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, and
descriptorCount
is not 0
and pImmutableSamplers
is not
NULL
, pImmutableSamplers
must be a valid pointer to an array of
descriptorCount
valid VkSampler
handles
VUID-VkDescriptorSetLayoutBinding-descriptorType-04604
If the inlineUniformBlock
feature
is not enabled, descriptorType
must not be
VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
VUID-VkDescriptorSetLayoutBinding-descriptorType-02209
If descriptorType
is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
then descriptorCount
must be a multiple of 4
VUID-VkDescriptorSetLayoutBinding-descriptorType-08004
If descriptorType
is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
and VkDescriptorSetLayoutCreateInfo::flags
does not contain
VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
then descriptorCount
must be less than or equal to
VkPhysicalDeviceInlineUniformBlockProperties
::maxInlineUniformBlockSize
VUID-VkDescriptorSetLayoutBinding-flags-08005
If VkDescriptorSetLayoutCreateInfo::flags
contains
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT
,
descriptorType
must be VK_DESCRIPTOR_TYPE_SAMPLER
VUID-VkDescriptorSetLayoutBinding-flags-08006
If VkDescriptorSetLayoutCreateInfo::flags
contains
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT
,
descriptorCount
must less than or equal to 1
VUID-VkDescriptorSetLayoutBinding-flags-08007
If VkDescriptorSetLayoutCreateInfo::flags
contains
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT
,
and descriptorCount
is equal to 1
, pImmutableSamplers
must not be NULL
VUID-VkDescriptorSetLayoutBinding-descriptorCount-09465
If descriptorCount
is not 0
, stageFlags
must be
VK_SHADER_STAGE_ALL
or a valid combination of other
VkShaderStageFlagBits values
VUID-VkDescriptorSetLayoutBinding-descriptorType-01510
If descriptorType
is VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
and
descriptorCount
is not 0
, then stageFlags
must be 0
or
VK_SHADER_STAGE_FRAGMENT_BIT
VUID-VkDescriptorSetLayoutBinding-pImmutableSamplers-04009
The sampler objects indicated by pImmutableSamplers
must not have
a borderColor
with one of the values
VK_BORDER_COLOR_FLOAT_CUSTOM_EXT
or
VK_BORDER_COLOR_INT_CUSTOM_EXT
VUID-VkDescriptorSetLayoutBinding-descriptorType-04605
If descriptorType
is VK_DESCRIPTOR_TYPE_MUTABLE_EXT
, then
pImmutableSamplers
must be NULL
VUID-VkDescriptorSetLayoutBinding-flags-09466
If VkDescriptorSetLayoutCreateInfo::flags
contains
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV
, and
descriptorCount
is not 0
, then stageFlags
must be a valid
combination of VK_SHADER_STAGE_VERTEX_BIT
,
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
,
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
,
VK_SHADER_STAGE_GEOMETRY_BIT
, VK_SHADER_STAGE_FRAGMENT_BIT
and VK_SHADER_STAGE_COMPUTE_BIT
values
Valid Usage (Implicit)
VUID-VkDescriptorSetLayoutBinding-descriptorType-parameter
descriptorType
must be a valid VkDescriptorType value