1// Copyright 2017-2024 The Khronos Group Inc. 2// 3// SPDX-License-Identifier: CC-BY-4.0 4 5include::{generated}/meta/{refprefix}VK_EXT_descriptor_indexing.adoc[] 6 7=== Other Extension Metadata 8 9*Last Modified Date*:: 10 2017-10-02 11*Interactions and External Dependencies*:: 12 - This extension provides API support for 13 {GLSLregistry}/ext/GL_EXT_nonuniform_qualifier.txt[`GL_EXT_nonuniform_qualifier`] 14*Contributors*:: 15 - Jeff Bolz, NVIDIA 16 - Daniel Rakos, AMD 17 - Slawomir Grajewski, Intel 18 - Tobias Hector, Imagination Technologies 19 20=== Description 21 22This extension adds several small features which together enable 23applications to create large descriptor sets containing substantially all of 24their resources, and selecting amongst those resources with dynamic 25(non-uniform) indexes in the shader. 26There are feature enables and SPIR-V capabilities for non-uniform descriptor 27indexing in the shader, and non-uniform indexing in the shader requires use 28of a new code:NonUniformEXT decoration defined in the 29`SPV_EXT_descriptor_indexing` SPIR-V extension. 30There are descriptor set layout binding creation flags enabling several 31features: 32 33 * Descriptors can be updated after they are bound to a command buffer, 34 such that the execution of the command buffer reflects the most recent 35 update to the descriptors. 36 * Descriptors that are not used by any pending command buffers can be 37 updated, which enables writing new descriptors for frame N+1 while frame 38 N is executing. 39 * Relax the requirement that all descriptors in a binding that is 40 "`statically used`" must be valid, such that descriptors that are not 41 accessed by a submission need not be valid and can be updated while that 42 submission is executing. 43 * The final binding in a descriptor set layout can have a variable size 44 (and unsized arrays of resources are allowed in the 45 `GL_EXT_nonuniform_qualifier` and `SPV_EXT_descriptor_indexing` 46 extensions). 47 48Note that it is valid for multiple descriptor arrays in a shader to use the 49same set and binding number, as long as they are all compatible with the 50descriptor type in the pipeline layout. 51This means a single array binding in the descriptor set can serve multiple 52texture dimensionalities, or an array of buffer descriptors can be used with 53multiple different block layouts. 54 55There are new descriptor set layout and descriptor pool creation flags that 56are required to opt in to the update-after-bind functionality, and there are 57separate pname:maxPerStage* and pname:maxDescriptorSet* limits that apply to 58these descriptor set layouts which may: be much higher than the pre-existing 59limits. 60The old limits only count descriptors in non-updateAfterBind descriptor set 61layouts, and the new limits count descriptors in all descriptor set layouts 62in the pipeline layout. 63 64include::{generated}/interfaces/VK_EXT_descriptor_indexing.adoc[] 65 66=== Promotion to Vulkan 1.2 67 68Functionality in this extension is included in core Vulkan 1.2, with the EXT 69suffix omitted. 70However, if Vulkan 1.2 is supported and this extension is not, the 71code:descriptorIndexing capability is optional. 72The original type, enum and command names are still available as aliases of 73the core functionality. 74 75=== Version History 76 77 * Revision 1, 2017-07-26 (Jeff Bolz) 78 ** Internal revisions 79 * Revision 2, 2017-10-02 (Jeff Bolz) 80 ** ??? 81