/ appendices / VK_KHR_variable_pointers.txt
VK_KHR_variable_pointers.txt
 1  // Copyright (c) 2016-2019 Khronos Group. This work is licensed under a
 2  // Creative Commons Attribution 4.0 International License; see
 3  // http://creativecommons.org/licenses/by/4.0/
 4  
 5  include::meta/VK_KHR_variable_pointers.txt[]
 6  
 7  *Last Modified Date*::
 8      2017-09-05
 9  *IP Status*::
10      No known IP claims.
11  *Interactions and External Dependencies*::
12    - Requires the
13      https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_variable_pointers.html[`SPV_KHR_variable_pointers`]
14      SPIR-V extension.
15    - Promoted to Vulkan 1.1 Core
16  *Contributors*::
17    - John Kessenich, Google
18    - Neil Henning, Codeplay
19    - David Neto, Google
20    - Daniel Koch, Nvidia
21    - Graeme Leese, Broadcom
22    - Weifeng Zhang, Qualcomm
23    - Stephen Clarke, Imagination Technologies
24    - Jason Ekstrand, Intel
25    - Jesse Hall, Google
26  
27  The `VK_KHR_variable_pointers` extension allows implementations to indicate
28  their level of support for the `SPV_KHR_variable_pointers` SPIR-V extension.
29  The SPIR-V extension allows shader modules to use invocation-private
30  pointers into uniform and/or storage buffers, where the pointer values can
31  be dynamic and non-uniform.
32  
33  The `SPV_KHR_variable_pointers` extension introduces two capabilities.
34  The first, code:VariablePointersStorageBuffer, must: be supported by all
35  implementations of this extension.
36  The second, code:VariablePointers, is optional.
37  
38  === New Enum Constants
39  
40    * Extending elink:VkStructureType:
41    ** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR
42  
43  === New Structures
44  
45    * slink:VkPhysicalDeviceVariablePointersFeaturesKHR
46  
47  === New SPIR-V Capabilities
48  
49    * <<spirvenv-capabilities-table-variablepointers,VariablePointersStorageBuffer>>
50    * <<spirvenv-capabilities-table-variablepointers,VariablePointers>>
51  
52  === Promotion to Vulkan 1.1
53  
54  All functionality in this extension is included in core Vulkan 1.1, with the
55  KHR suffix omitted, however support for the
56  <<features-variablePointersStorageBuffer,
57  pname:variablePointersStorageBuffer>> feature is made optional.
58  The original type, enum and command names are still available as aliases of
59  the core functionality.
60  
61  === Issues
62  
63  1) Do we need an optional property for the SPIR-V
64  code:VariablePointersStorageBuffer capability or should it be mandatory when
65  this extension is advertised?
66  
67  *RESOLVED*: Add it as a distinct feature, but make support mandatory.
68  Adding it as a feature makes the extension easier to include in a future
69  core API version.
70  In the extension, the feature is mandatory, so that presence of the
71  extension guarantees some functionality.
72  When included in a core API version, the feature would be optional.
73  
74  2) Can support for these capabilities vary between shader stages?
75  
76  *RESOLVED*: No, if the capability is supported in any stage it must be
77  supported in all stages.
78  
79  3) Should the capabilities be features or limits?
80  
81  *RESOLVED*: Features, primarily for consistency with other similar
82  extensions.
83  
84  === Version History
85  
86    * Revision 1, 2017-03-14 (Jesse Hall and John Kessenich)
87      - Internal revisions