• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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