Add xml section for memory operand bit allocation tracking, and reserve two bits...
[platform/upstream/SPIRV-Headers.git] / include / spirv / spir-v.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <registry>
3     <!--
4     Copyright (c) 2015 The Khronos Group Inc.
5
6     Permission is hereby granted, free of charge, to any person obtaining a
7     copy of this software and/or associated documentation files (the
8     "Materials"), to deal in the Materials without restriction, including
9     without limitation the rights to use, copy, modify, merge, publish,
10     distribute, sublicense, and/or sell copies of the Materials, and to
11     permit persons to whom the Materials are furnished to do so, subject to
12     the following conditions:
13
14     The above copyright notice and this permission notice shall be included
15     in all copies or substantial portions of the Materials.
16
17     THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23     MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
24     -->
25     <!--
26     This file, spir-v.xml, is the SPIR-V Tool ID, opcode and enumerant registry.
27     The canonical version of the registry, together with related schema and
28     documentation, can be found in the Khronos Registry at
29     include/spirv/spir-v.xml in the master branch at
30     https://github.com/KhronosGroup/SPIRV-Headers
31     -->
32
33     <!-- SECTION: SPIR-V Tool ID Definitions  -->
34
35     <!-- A SPIR-V Generator Magic Number is a 32 bit word: The high order 16
36          bits are a tool ID, which should be unique across all SPIR-V
37          generators. The low order 16 bits are reserved for use as a tool
38          version number, or any other purpose the tool supplier chooses.
39          Only the tool IDs are reserved with Khronos.
40
41          Add new tool ID reservations contiguously with the first available
42          number (the "start" attribute of the <unused> tag below), and
43          modify that <unused> tag accordingly. Please add a vendor/tool
44          supplier name in a 'vendor="name"' attribute; a tool name in a
45          'tool="name"' attribute; and a contact person/address in a
46          'comment' attribute. Remember that this value is the high 16 bits
47          of a 32-bit word.
48
49          Note: a single vendor/tool supplier may have multiple tool IDs
50          reserved for different SPIR-V generators -->
51
52     <ids type="vendor" start="0" end="0xFFFF" comment="SPIR-V Tool IDs">
53         <id value="0"   vendor="Khronos"    comment="Reserved by Khronos"/>
54         <id value="1"   vendor="LunarG"     comment="Contact TBD"/>
55         <id value="2"   vendor="Valve"      comment="Contact TBD"/>
56         <id value="3"   vendor="Codeplay"   comment="Contact Victor Lomuller, victor@codeplay.com"/>
57         <id value="4"   vendor="NVIDIA"     comment="Contact Kerch Holt, kholt@nvidia.com"/>
58         <id value="5"   vendor="ARM"        comment="Contact Alexander Galazin, alexander.galazin@arm.com"/>
59         <id value="6"   vendor="Khronos" tool="LLVM/SPIR-V Translator" comment="Contact Yaxun (Sam) Liu, yaxun.liu@amd.com"/>
60         <id value="7"   vendor="Khronos" tool="SPIR-V Tools Assembler" comment="Contact David Neto, dneto@google.com"/>
61         <id value="8"   vendor="Khronos" tool="Glslang Reference Front End" comment="Contact John Kessenich, johnkessenich@google.com"/>
62         <id value="9"   vendor="Qualcomm"   comment="Contact weifengz@qti.qualcomm.com"/>
63         <id value="10"  vendor="AMD"        comment="Contact Daniel Rakos, daniel.rakos@amd.com"/>
64         <id value="11"  vendor="Intel"      comment="Contact Alexey, alexey.bader@intel.com"/>
65         <id value="12"  vendor="Imagination" comment="Contact James Jones"/>
66         <id value="13"  vendor="Google" tool="Shaderc over Glslang" comment="Contact David Neto, dneto@google.com"/>
67         <id value="14"  vendor="Google" tool="spiregg" comment="Contact Lei Zhang, antiagainst@google.com"/>
68         <id value="15"  vendor="Google" tool="rspirv" comment="Contact Lei Zhang, antiagainst@gmail.com"/>
69         <id value="16"  vendor="X-LEGEND"   tool="Mesa-IR/SPIR-V Translator" comment="Contact Metora Wang, github:metora/MesaGLSLCompiler"/>
70         <id value="17"  vendor="Khronos" tool="SPIR-V Tools Linker" comment="Contact David Neto, dneto@google.com"/>
71         <id value="18"  vendor="Wine" tool="VKD3D Shader Compiler" comment="Contact wine-devel@winehq.org"/>
72         <id value="19"  vendor="Clay" tool="Clay Shader Compiler" comment="Contact info@clayengine.com"/>
73         <id value="20"  vendor="W3C WebGPU Group" tool="WHLSL Shader Translator" comment="https://github.com/gpuweb/WHLSL"/>
74         <id value="21"  vendor="Google" tool="Clspv" comment="Contact David Neto, dneto@google.com"/>
75         <id value="22"  vendor="Google" tool="MLIR SPIR-V Serializer" comment="Contact Lei Zhang, antiagainst@google.com"/>
76         <id value="23"  vendor="Google" tool="Tint Compiler" comment="Contact David Neto, dneto@google.com"/>
77         <id value="24"  vendor="Google" tool="ANGLE Shader Compiler" comment="Contact Shahbaz Youssefi, syoussefi@google.com"/>
78         <id value="25"  vendor="Netease Games" tool="Messiah Shader Compiler" comment="Contact Yuwen Wu, atyuwen@gmail.com"/>
79         <id value="26"  vendor="Xenia" tool="Xenia Emulator Microcode Translator" comment="Contact Vitaliy Kuzmin, triang3l@yandex.ru, https://github.com/xenia-project/xenia"/>
80         <id value="27"  vendor="Embark Studios" tool="Rust GPU Compiler Backend" comment="https://github.com/embarkstudios/rust-gpu"/>
81         <id value="28"  vendor="gfx-rs community" tool="Naga" comment="https://github.com/gfx-rs/naga"/>
82         <unused start="29" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/>
83     </ids>
84
85     <!-- SECTION: SPIR-V Opcodes and Enumerants -->
86
87     <!-- Vendors reserve new ranges of:
88            - opcode enumerants in the "opcode" list below, and
89            - non-opcode enumerants in the non-opcodes "enumerant" list below.
90          Both are reserved by contiguous blocks of 64, preceding the given
91          "Future use" blocks.
92
93          SPIR-V background:
94            - SPIR-V currently has well over 30 enums, including the opcode enum
95            - each enum has its own name space, allowing reuse of enumerants
96            - SPIR-V restricts opcode enumerants to 16 bits
97            - all other enums use 32-bit enumerants
98
99          Reservation rules:
100            - opcode reservations ("opcode") are only valid for opcodes
101            - non-opcode reservations ("enumerant") are not valid for opcodes
102            - reservations in the enumerant list are valid for all non-opcode enums
103            - it is simpler to use each non-opcode enumerant for only one purpose
104              but this is left to the discretion of the vendor
105            - all enumerants in a range should be used before allocating a new range
106              (several extensions can use enumerants from the same range)
107
108          Each vendor determines the use of enumerants in the ranges they
109          reserve. Vendors are not required to disclose those uses.  If the use
110          of an enumerant is included in an extension that is adopted by a Khronos
111          extension or specification, then that enumerant's use may be permanently
112          fixed as if originally reserved in a Khronos range.
113
114          -->
115
116     <!-- Begin reservations of opcode enumerants -->
117     <ids type="opcode" start="0" end="4095" vendor="Khronos" comment="Reserved opcodes, not available to vendors - see the SPIR-V Specification"/>
118     <ids type="opcode" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/>
119     <ids type="opcode" start="4160" end="4415" vendor="ARM"/>
120     <ids type="opcode" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, neil.henning@amd.com"/>
121     <ids type="opcode" start="4480" end="4991" vendor="Qualcomm" comment="Contact weifengz@qti.qualcomm.com"/>
122     <ids type="opcode" start="4992" end="5247" vendor="AMD"/>
123     <ids type="opcode" start="5248" end="5503" vendor="NVIDIA"/>
124     <ids type="opcode" start="5504" end="5567" vendor="Imagination"/>
125     <ids type="opcode" start="5568" end="5631" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
126     <ids type="opcode" start="5632" end="5695" vendor="Google" comment="Contact dneto@google.com"/>
127     <ids type="opcode" start="5696" end="5823" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
128     <ids type="opcode" start="5824" end="5951" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
129     <ids type="opcode" start="5952" end="6015" vendor="Codeplay" comment="Contact victor@codeplay.com"/>
130     <ids type="opcode" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/>
131     <ids type="opcode" start="6080" end="6143" vendor="Intel" comment="Contact mariusz.merecki@intel.com"/>
132     <!-- Opcode enumerants to reserve for future use. To get a block, allocate
133          multiples of 64 starting at the lowest available point in this
134          block and add a corresponding <ids> tag immediately above. Make
135          sure to fill in the vendor attribute, and preferably add a contact
136          person/address in a comment attribute. -->
137     <!-- Example new block: <ids type="opcode" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> -->
138     <ids type="opcode" start="6144" end="65535" comment="Opcode range reservable for future use by vendors"/>
139     <!-- End reservations of opcodes -->
140
141
142     <!-- Begin reservations of non-opcode enumerants -->
143     <ids type="enumerant" start="0" end="4095" vendor="Khronos" comment="Reserved enumerants, not available to vendors - see the SPIR-V Specification"/>
144     <ids type="enumerant" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/>
145     <ids type="enumerant" start="4160" end="4415" vendor="ARM"/>
146     <ids type="enumerant" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, neil.henning@amd.com"/>
147     <ids type="enumerant" start="4480" end="4991" vendor="Qualcomm" comment="Contact weifengz@qti.qualcomm.com"/>
148     <ids type="enumerant" start="4992" end="5247" vendor="AMD"/>
149     <ids type="enumerant" start="5248" end="5503" vendor="NVIDIA"/>
150     <ids type="enumerant" start="5504" end="5567" vendor="Imagination"/>
151     <ids type="enumerant" start="5568" end="5631" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
152     <ids type="enumerant" start="5632" end="5695" vendor="Google" comment="Contact dneto@google.com"/>
153     <ids type="enumerant" start="5696" end="5823" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
154     <ids type="enumerant" start="5824" end="5951" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
155     <ids type="enumerant" start="5952" end="6015" vendor="Codeplay" comment="Contact victor@codeplay.com"/>
156     <ids type="enumerant" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/>
157     <ids type="enumerant" start="6080" end="6143" vendor="Intel" comment="Contact mariusz.merecki@intel.com"/>
158     <!-- Enumerants to reserve for future use. To get a block, allocate
159          multiples of 64 starting at the lowest available point in this
160          block and add a corresponding <ids> tag immediately above. Make
161          sure to fill in the vendor attribute, and preferably add a contact
162          person/address in a comment attribute. -->
163     <!-- Example new block: <ids type="enumerant" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> -->
164     <ids type="enumerant" start="6144" end="4294967295" comment="Enumerant range reservable for future use by vendors"/>
165     <!-- End reservations of enumerants -->
166
167
168     <!-- SECTION: SPIR-V Loop Control Bit Reservations -->
169     <!-- Reserve ranges of bits in the loop control bitfield.
170
171          Each vendor determines the use of values in their own ranges.
172          Vendors are not required to disclose those uses.  If the use of a
173          value is included in an extension that is adopted by a Khronos
174          extension or specification, then that value's use may be permanently
175          fixed as if originally reserved in a Khronos range.
176
177          The SPIR Working Group strongly recommends:
178          - Each value is used for only one purpose.
179          - All values in a range should be used before allocating a new range.
180          -->
181
182     <!-- Reserved loop control bits -->
183     <ids type="LoopControl" start="0" end="15" vendor="Khronos" comment="Reserved LoopControl bits, not available to vendors - see the SPIR-V Specification"/>
184     <ids type="LoopControl" start="16" end="23" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
185     <ids type="LoopControl" start="24" end="30" comment="Unreserved bits reservable for use by vendors"/>
186     <ids type="LoopControl" start="31" end="31" vendor="Khronos" comment="Reserved LoopControl bit, not available to vendors"/>
187
188
189     <!-- SECTION: SPIR-V Function Control Bit Reservations -->
190     <!-- Reserve ranges of bits in the function control bitfield.
191
192          Each vendor determines the use of values in their own ranges.
193          Vendors are not required to disclose those uses.  If the use of a
194          value is included in an extension that is adopted by a Khronos
195          extension or specification, then that value's use may be permanently
196          fixed as if originally reserved in a Khronos range.
197
198          The SPIR Working Group strongly recommends:
199          - Each value is used for only one purpose.
200          - All values in a range should be used before allocating a new range.
201          -->
202
203     <!-- Reserved function control bits -->
204     <ids type="FunctionControl" start="0" end="15" vendor="Khronos" comment="Reserved FunctionControl bits, not available to vendors - see the SPIR-V Specification"/>
205     <ids type="FunctionControl" start="16" end="16" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/>
206     <ids type="FunctionControl" start="17" end="30" comment="Unreserved bits reservable for use by vendors"/>
207     <ids type="FunctionControl" start="31" end="31" vendor="Khronos" comment="Reserved FunctionControl bit, not available to vendors"/>
208
209
210     <!-- SECTION: SPIR-V FP Fast Math Mode Bit Reservations -->
211     <!-- Reserve ranges of bits in the "FP Fast Math Mode" bitfield.
212          Each vendor determines the use of values in their own ranges.
213          Vendors are not required to disclose those uses.  If the use of a
214          value is included in an extension that is adopted by a Khronos
215          extension or specification, then that value's use may be permanently
216          fixed as if originally reserved in a Khronos range.
217          The SPIR Working Group strongly recommends:
218          - Each value is used for only one purpose.
219          - All values in a range should be used before allocating a new range.
220          -->
221
222     <!-- Reserved FP fast math mode bits -->
223     <ids type="FPFastMathMode" start="0" end="15" vendor="Khronos" comment="Reserved FPFastMathMode bits, not available to vendors - see the SPIR-V Specification"/>
224     <ids type="FPFastMathMode" start="16" end="17" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
225     <ids type="FPFastMathMode" start="18" end="31" comment="Unreserved bits reservable for use by vendors"/>
226
227
228     <!-- SECTION: SPIR-V Memory Operand Bit Reservations -->
229     <!-- Reserve ranges of bits in the memory operands bitfield.
230
231          Each vendor determines the use of values in their own ranges.
232          Vendors are not required to disclose those uses.  If the use of a
233          value is included in an extension that is adopted by a Khronos
234          extension or specification, then that value's use may be permanently
235          fixed as if originally reserved in a Khronos range.
236
237          The SPIR Working Group strongly recommends:
238          - Each value is used for only one purpose.
239          - All values in a range should be used before allocating a new range.
240          -->
241
242     <!-- Reserved memory operand bits -->
243     <ids type="MemoryOperand" start="0" end="15" vendor="Khronos" comment="Reserved MemoryOperand bits, not available to vendors - see the SPIR-V Specification"/>
244     <ids type="MemoryOperand" start="16" end="17" vendor="Intel" comment="Contact michael.kinsner@intel.com"/>
245     <ids type="MemoryOperand" start="18" end="30" comment="Unreserved bits reservable for use by vendors"/>
246     <ids type="MemoryOperand" start="31" end="31" vendor="Khronos" comment="Reserved MemoryOperand bit, not available to vendors"/>
247
248 </registry>