| // Copyright 2017-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_descriptor_indexing.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2017-10-02 |
| *Interactions and External Dependencies*:: |
| - Promoted to Vulkan 1.2 Core |
| *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 code: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` and `SPV_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 pname:maxPerStage* and pname: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. |
| |
| include::{generated}/interfaces/VK_EXT_descriptor_indexing.txt[] |
| |
| === 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 |
| code: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) |
| - ??? |