Class EXTDescriptorIndexing
- java.lang.Object
-
- org.lwjgl.vulkan.EXTDescriptorIndexing
-
public final class EXTDescriptorIndexing extends java.lang.ObjectThis 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 newNonUniformEXTdecoration defined in theSPV_EXT_descriptor_indexingSPIR-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_qualifierandSPV_EXT_descriptor_indexingextensions).
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_EXTSTRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXTSTRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXTSTRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXTSTRUCTURE_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_EXTindicates 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 inUpdateDescriptorSetWithTemplateKHRandUpdateDescriptorSets. 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_EXTindicates 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_EXTindicates 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_EXTis also set, then descriptors can be updated as long as they are not dynamically used by any shader invocations. IfDESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXTis 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_EXTindicates that this descriptor binding has a variable size that will be specified when a descriptor set is allocated using this layout. The value ofdescriptorCountis 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 ofdescriptorCountis counted , except for descriptor bindings with a descriptor type ofDESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXTwheredescriptorCountspecifies the upper bound on the byte size of the binding, thus it counts against themaxInlineUniformBlockSizelimit instead. .
Note
Note that while
DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXTandDESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXTboth involve updates to descriptor sets after they are bound,DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXTis a weaker requirement since it is only about descriptors that are not used, whereasDESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXTrequires the implementation to observe updates to descriptors that are used.See Also
VkDescriptorBindingFlagsEXT
-
-