Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Name
VK_EXT_descriptor_indexing - device extension
VK_EXT_descriptor_indexing
- Name String
VK_EXT_descriptor_indexing
- Extension Type
- Device extension
- Registered Extension Number
- 162
- Revision
- 2
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- VK_KHR_get_physical_device_properties2 and VK_KHR_maintenance3
- Deprecation State
- Promoted to Vulkan 1.2
- Contact
Other Extension Metadata
- Last Modified Date
- 2017-10-02
- Interactions and External Dependencies
- Promoted to Vulkan 1.2 Core
- This extension requires SPV_EXT_descriptor_indexing
- This extension provides API support for GL_EXT_nonuniform_qualifier
- Contributors
- Jeff Bolz, NVIDIA
- Daniel Rakos, AMD
- Slawomir Grajewski, Intel
- Tobias Hector, Imagination Technologies
Description
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 new
NonUniformEXT
decoration defined in the SPV_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
* and maxDescriptorSet
* 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.
New Structures
Extending
DescriptorSetLayoutCreateInfo
:Extending
DescriptorSetLayoutSupport
:Extending
PhysicalDeviceFeatures2
,DeviceCreateInfo
:Extending
PhysicalDeviceProperties2
:
New Enums
New Bitmasks
New Enum Constants
EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
Extending
DescriptorBindingFlagBits
:Extending
DescriptorPoolCreateFlagBits
:Extending
DescriptorSetLayoutCreateFlagBits
:Extending
Result
:Extending
StructureType
:STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT
STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT
STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT
Promotion to Vulkan 1.2
Functionality in this extension is included in core Vulkan 1.2, with the
EXT suffix omitted. However, if Vulkan 1.2 is supported and this
extension is not, the descriptorIndexing
capability is optional. The
original type, enum and command names are still available as aliases of
the core functionality.
Version History
Revision 1, 2017-07-26 (Jeff Bolz)
- Internal revisions
Revision 2, 2017-10-02 (Jeff Bolz)
- ???
See Also
DescriptorBindingFlagBitsEXT
, DescriptorBindingFlagsEXT
,
DescriptorSetLayoutBindingFlagsCreateInfoEXT
,
DescriptorSetVariableDescriptorCountAllocateInfoEXT
,
DescriptorSetVariableDescriptorCountLayoutSupportEXT
,
PhysicalDeviceDescriptorIndexingFeaturesEXT
,
PhysicalDeviceDescriptorIndexingPropertiesEXT
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Documentation
pattern STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT :: StructureType Source #
pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT :: StructureType Source #
pattern STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT :: StructureType Source #
pattern DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT :: DescriptorBindingFlagBits Source #
pattern DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT :: DescriptorSetLayoutCreateFlagBits Source #
pattern ERROR_FRAGMENTATION_EXT :: Result Source #
type PhysicalDeviceDescriptorIndexingFeaturesEXT = PhysicalDeviceDescriptorIndexingFeatures Source #
type PhysicalDeviceDescriptorIndexingPropertiesEXT = PhysicalDeviceDescriptorIndexingProperties Source #
type DescriptorSetLayoutBindingFlagsCreateInfoEXT = DescriptorSetLayoutBindingFlagsCreateInfo Source #
type DescriptorSetVariableDescriptorCountAllocateInfoEXT = DescriptorSetVariableDescriptorCountAllocateInfo Source #
type DescriptorSetVariableDescriptorCountLayoutSupportEXT = DescriptorSetVariableDescriptorCountLayoutSupport Source #
type EXT_DESCRIPTOR_INDEXING_SPEC_VERSION = 2 Source #
pattern EXT_DESCRIPTOR_INDEXING_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME = "VK_EXT_descriptor_indexing" Source #
pattern EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #