Class EXTDescriptorIndexing
- java.lang.Object
-
- org.lwjgl.vulkan.EXTDescriptorIndexing
-
public final class EXTDescriptorIndexing extends java.lang.Object
This extension adds several small features which together enable applications to create large descriptor sets containing substantially all of their resources, and selecting amongst those resources with dynamic (non-uniform) indexes in the shader. There are feature enables and SPIR-V capabilities for non-uniform descriptor indexing in the shader, and non-uniform indexing in the shader requires use of a newNonUniformEXT
decoration defined in theSPV_EXT_descriptor_indexing
SPIR-V extension. There are descriptor set layout binding creation flags enabling several features:- Descriptors can be updated after they are bound to a command buffer, such that the execution of the command buffer reflects the most recent update to the descriptors.
- Descriptors that are not used by any pending command buffers can be updated, which enables writing new descriptors for frame N+1 while frame N is executing.
- Relax the requirement that all descriptors in a binding that is “statically used” must be valid, such that descriptors that are not accessed by a submission need not be valid and can be updated while that submission is executing.
- The final binding in a descriptor set layout can have a variable size (and unsized arrays of resources are allowed in the
GL_EXT_nonuniform_qualifier
andSPV_EXT_descriptor_indexing
extensions).
Note that it is valid for multiple descriptor arrays in a shader to use the same set and binding number, as long as they are all compatible with the descriptor type in the pipeline layout. This means a single array binding in the descriptor set can serve multiple texture dimensionalities, or an array of buffer descriptors can be used with multiple different block layouts.
There are new descriptor set layout and descriptor pool creation flags that are required to opt in to the update-after-bind functionality, and there are separate
maxPerStage
* andmaxDescriptorSet
* limits that apply to these descriptor set layouts which may be much higher than the pre-existing limits. The old limits only count descriptors in non-updateAfterBind descriptor set layouts, and the new limits count descriptors in all descriptor set layouts in the pipeline layout.- Name String
VK_EXT_descriptor_indexing
- Extension Type
- Device extension
- Registered Extension Number
- 162
- Revision
- 2
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Requires
VK_KHR_get_physical_device_properties2
- Requires
VK_KHR_maintenance3
- Contact
- Jeff Bolz jeffbolznv
- Status
- Complete
- Last Modified Data
- 2017-10-02
- Contributors
- Jeff Bolz, NVIDIA
- Daniel Rakos, AMD
- Slawomir Grajewski, Intel
- Tobias Hector, Imagination Technologies
-
-
Field Summary
-
-
-
Field Detail
-
VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
The extension specification version.
-
VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
The extension name.
-
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
ExtendsVkStructureType
.Enum values:
STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT
STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT
STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
-
VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
ExtendsVkDescriptorPoolCreateFlagBits
.
-
VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
ExtendsVkDescriptorSetLayoutCreateFlagBits
.
-
VK_ERROR_FRAGMENTATION_EXT
ExtendsVkResult
.
-
VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT, VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT, VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT, VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
VkDescriptorBindingFlagBitsEXT - Bitmask specifying descriptor set layout binding propertiesDescription
DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
indicates that if descriptors in this binding are updated between when the descriptor set is bound in a command buffer and when that command buffer is submitted to a queue, then the submission will use the most recently set descriptors for this binding and the updates do not invalidate the command buffer. Descriptor bindings created with this flag are also partially exempt from the external synchronization requirement inUpdateDescriptorSetWithTemplateKHR
andUpdateDescriptorSets
. They can be updated concurrently with the set being bound to a command buffer in another thread, but not concurrently with the set being reset or freed.DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
indicates that descriptors in this binding that are not dynamically used need not contain valid descriptors at the time the descriptors are consumed. A descriptor is dynamically used if any shader invocation executes an instruction that performs any memory access using the descriptor.DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
indicates that descriptors in this binding can be updated after a command buffer has bound this descriptor set, or while a command buffer that uses this descriptor set is pending execution, as long as the descriptors that are updated are not used by those command buffers. IfDESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
is also set, then descriptors can be updated as long as they are not dynamically used by any shader invocations. IfDESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
is not set, then descriptors can be updated as long as they are not statically used by any shader invocations.DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
indicates that this descriptor binding has a variable size that will be specified when a descriptor set is allocated using this layout. The value ofdescriptorCount
is treated as an upper bound on the size of the binding. This must only be used for the last binding in the descriptor set layout (i.e. the binding with the largest value ofbinding
). For the purposes of counting against limits such asmaxDescriptorSet
* andmaxPerStageDescriptor
*, the full value ofdescriptorCount
is counted , except for descriptor bindings with a descriptor type ofDESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
wheredescriptorCount
specifies the upper bound on the byte size of the binding, thus it counts against themaxInlineUniformBlockSize
limit instead. .
Note
Note that while
DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
andDESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
both involve updates to descriptor sets after they are bound,DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
is a weaker requirement since it is only about descriptors that are not used, whereasDESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
requires the implementation to observe updates to descriptors that are used.See Also
VkDescriptorBindingFlagsEXT
-
-