1<?xml version="1.0" encoding="UTF-8"?> 2<registry> 3 <!-- 4 Copyright (c) 2015-2024 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, [email protected]"/> 57 <id value="4" vendor="NVIDIA" comment="Contact Kerch Holt, [email protected]"/> 58 <id value="5" vendor="ARM" comment="Contact Kevin Petit, [email protected]"/> 59 <id value="6" vendor="Khronos" tool="LLVM/SPIR-V Translator" comment="Contact Yaxun (Sam) Liu, [email protected]"/> 60 <id value="7" vendor="Khronos" tool="SPIR-V Tools Assembler" comment="Contact David Neto, [email protected]"/> 61 <id value="8" vendor="Khronos" tool="Glslang Reference Front End" comment="Contact John Kessenich, [email protected]"/> 62 <id value="9" vendor="Qualcomm" comment="Contact [email protected]"/> 63 <id value="10" vendor="AMD" comment="Contact Daniel Rakos, [email protected]"/> 64 <id value="11" vendor="Intel" comment="Contact Alexey, [email protected]"/> 65 <id value="12" vendor="Imagination" comment="Contact Stephen Clarke, [email protected]"/> 66 <id value="13" vendor="Google" tool="Shaderc over Glslang" comment="Contact David Neto, [email protected]"/> 67 <id value="14" vendor="Google" tool="spiregg" comment="Contact Steven Perron, [email protected]"/> 68 <id value="15" vendor="Google" tool="rspirv" comment="Contact Lei Zhang, [email protected]"/> 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, [email protected]"/> 71 <id value="18" vendor="Wine" tool="VKD3D Shader Compiler" comment="Contact [email protected]"/> 72 <id value="19" vendor="Tellusim" tool="Clay Shader Compiler" comment="Contact [email protected]"/> 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, [email protected]"/> 75 <id value="22" vendor="LLVM" tool="MLIR SPIR-V Serializer" comment="Contact Jakub Kuderski, [email protected], https://mlir.llvm.org/docs/Dialects/SPIR-V/"/> 76 <id value="23" vendor="Google" tool="Tint Compiler" comment="Contact David Neto, [email protected]"/> 77 <id value="24" vendor="Google" tool="ANGLE Shader Compiler" comment="Contact Shahbaz Youssefi, [email protected]"/> 78 <id value="25" vendor="Netease Games" tool="Messiah Shader Compiler" comment="Contact Yuwen Wu, [email protected]"/> 79 <id value="26" vendor="Xenia" tool="Xenia Emulator Microcode Translator" comment="Contact Vitaliy Kuzmin, [email protected], 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 <id value="29" vendor="Mikkosoft Productions" tool="MSP Shader Compiler" comment="Contact Mikko Rasa, [email protected]"/> 83 <id value="30" vendor="SpvGenTwo community" tool="SpvGenTwo SPIR-V IR Tools" comment="https://github.com/rAzoR8/SpvGenTwo"/> 84 <id value="31" vendor="Google" tool="Skia SkSL" comment="Contact Ethan Nicholas, [email protected]"/> 85 <id value="32" vendor="TornadoVM" tool="Beehive SPIRV Toolkit" comment="https://github.com/beehive-lab/beehive-spirv-toolkit"/> 86 <id value="33" vendor="DragonJoker" tool="ShaderWriter" comment="Contact Sylvain Doremus, https://github.com/DragonJoker/ShaderWriter"/> 87 <id value="34" vendor="Rayan Hatout" tool="SPIRVSmith" comment="Contact Rayan Hatout [email protected], Repo https://github.com/rayanht/SPIRVSmith"/> 88 <id value="35" vendor="Saarland University" tool="Shady" comment="Contact Hugo Devillers [email protected], Repo https://github.com/Hugobros3/shady"/> 89 <id value="36" vendor="Taichi Graphics" tool="Taichi" comment="Contact Rendong Liang [email protected], Repo https://github.com/taichi-dev/taichi"/> 90 <id value="37" vendor="heroseh" tool="Hero C Compiler" comment="https://github.com/heroseh/hcc"/> 91 <id value="38" vendor="Meta" tool="SparkSL" comment="Contact Dunfan Lu, [email protected], https://sparkar.facebook.com/ar-studio/learn/sparksl/sparksl-overview"/> 92 <id value="39" vendor="SirLynix" tool="Nazara ShaderLang Compiler" comment="Contact Jérôme Leclercq, https://github.com/NazaraEngine/ShaderLang"/> 93 <id value="40" vendor="NVIDIA" tool="Slang Compiler" comment="Contact Theresa Foley, [email protected], https://github.com/shader-slang/slang/"/> 94 <id value="41" vendor="Zig Software Foundation" tool="Zig Compiler" comment="Contact Robin Voetter, https://github.com/Snektron"/> 95 <id value="42" vendor="Rendong Liang" tool="spq" comment="Contact Rendong Liang, [email protected], https://github.com/PENGUINLIONG/spq-rs"/> 96 <id value="43" vendor="LLVM" tool="LLVM SPIR-V Backend" comment="Contact Michal Paszkowski, [email protected], https://github.com/llvm/llvm-project/tree/main/llvm/lib/Target/SPIRV"/> 97 <id value="44" vendor="Robert Konrad" tool="Kongruent" comment="Contact Robert Konrad, https://github.com/Kode/Kongruent"/> 98 <unused start="45" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/> 99 </ids> 100 101 <!-- SECTION: SPIR-V Opcodes and Enumerants --> 102 103 <!-- Vendors reserve new ranges of: 104 - opcode enumerants in the "opcode" list below, and 105 - non-opcode enumerants in the non-opcodes "enumerant" list below. 106 Both are reserved by contiguous blocks of 64, preceding the given 107 "Future use" blocks. 108 109 SPIR-V background: 110 - SPIR-V currently has well over 30 enums, including the opcode enum 111 - each enum has its own name space, allowing reuse of enumerants 112 - SPIR-V restricts opcode enumerants to 16 bits 113 - all other enums use 32-bit enumerants 114 115 Reservation rules: 116 - opcode reservations ("opcode") are only valid for opcodes 117 - non-opcode reservations ("enumerant") are not valid for opcodes 118 - reservations in the enumerant list are valid for all non-opcode enums 119 - it is simpler to use each non-opcode enumerant for only one purpose 120 but this is left to the discretion of the vendor 121 - all enumerants in a range should be used before allocating a new range 122 (several extensions can use enumerants from the same range) 123 124 Each vendor determines the use of enumerants in the ranges they 125 reserve. Vendors are not required to disclose those uses. If the use 126 of an enumerant is included in an extension that is adopted by a Khronos 127 extension or specification, then that enumerant's use may be permanently 128 fixed as if originally reserved in a Khronos range. 129 130 --> 131 132 <!-- Begin reservations of opcode enumerants --> 133 <ids type="opcode" start="0" end="4095" vendor="Khronos" comment="Reserved opcodes, not available to vendors - see the SPIR-V Specification"/> 134 <ids type="opcode" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/> 135 <ids type="opcode" start="4160" end="4415" vendor="ARM" comment="Contact [email protected]"/> 136 <ids type="opcode" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, [email protected]"/> 137 <ids type="opcode" start="4480" end="4991" vendor="Qualcomm" comment="Contact [email protected]"/> 138 <ids type="opcode" start="4992" end="5247" vendor="AMD"/> 139 <ids type="opcode" start="5248" end="5503" vendor="NVIDIA"/> 140 <ids type="opcode" start="5504" end="5567" vendor="Imagination"/> 141 <ids type="opcode" start="5568" end="5631" vendor="Intel" comment="Contact [email protected]"/> 142 <ids type="opcode" start="5632" end="5695" vendor="Google" comment="Contact [email protected]"/> 143 <ids type="opcode" start="5696" end="5823" vendor="Intel" comment="Contact [email protected]"/> 144 <ids type="opcode" start="5824" end="5951" vendor="Intel" comment="Contact [email protected]"/> 145 <ids type="opcode" start="5952" end="6015" vendor="Codeplay" comment="Contact [email protected]"/> 146 <ids type="opcode" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/> 147 <ids type="opcode" start="6080" end="6143" vendor="Intel" comment="Contact [email protected]"/> 148 <ids type="opcode" start="6144" end="6271" vendor="Intel" comment="Contact [email protected]"/> 149 <ids type="opcode" start="6272" end="6399" vendor="Huawei" comment="Contact [email protected]"/> 150 <ids type="opcode" start="6400" end="6463" vendor="Intel" comment="Contact [email protected]"/> 151 <ids type="opcode" start="6464" end="6527" vendor="N/A" comment="Blank range to keep alignment with non-opcodes"/> 152 <ids type="opcode" start="6528" end="6591" vendor="Codeplay" comment="Contact [email protected]"/> 153 <ids type="opcode" start="6592" end="6655" vendor="Saarland University" comment="Contact [email protected]"/> 154 <ids type="opcode" start="6656" end="6719" vendor="Meta" comment="Contact [email protected]"/> 155 <!-- Opcode enumerants to reserve for future use. To get a block, allocate 156 multiples of 64 starting at the lowest available point in this 157 block and add a corresponding <ids> tag immediately above. Make 158 sure to fill in the vendor attribute, and preferably add a contact 159 person/address in a comment attribute. --> 160 <!-- Example new block: <ids type="opcode" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> --> 161 <ids type="opcode" start="6720" end="65535" comment="Opcode range reservable for future use by vendors"/> 162 <!-- End reservations of opcodes --> 163 164 165 <!-- Begin reservations of non-opcode enumerants --> 166 <ids type="enumerant" start="0" end="4095" vendor="Khronos" comment="Reserved enumerants, not available to vendors - see the SPIR-V Specification"/> 167 <ids type="enumerant" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/> 168 <ids type="enumerant" start="4160" end="4415" vendor="ARM" comment="Contact [email protected]"/> 169 <ids type="enumerant" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, [email protected]"/> 170 <ids type="enumerant" start="4480" end="4991" vendor="Qualcomm" comment="Contact [email protected]"/> 171 <ids type="enumerant" start="4992" end="5247" vendor="AMD"/> 172 <ids type="enumerant" start="5248" end="5503" vendor="NVIDIA"/> 173 <ids type="enumerant" start="5504" end="5567" vendor="Imagination"/> 174 <ids type="enumerant" start="5568" end="5631" vendor="Intel" comment="Contact [email protected]"/> 175 <ids type="enumerant" start="5632" end="5695" vendor="Google" comment="Contact [email protected]"/> 176 <ids type="enumerant" start="5696" end="5823" vendor="Intel" comment="Contact [email protected]"/> 177 <ids type="enumerant" start="5824" end="5951" vendor="Intel" comment="Contact [email protected]"/> 178 <ids type="enumerant" start="5952" end="6015" vendor="Codeplay" comment="Contact [email protected]"/> 179 <ids type="enumerant" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/> 180 <ids type="enumerant" start="6080" end="6143" vendor="Intel" comment="Contact [email protected]"/> 181 <ids type="enumerant" start="6144" end="6271" vendor="Intel" comment="Contact [email protected]"/> 182 <ids type="enumerant" start="6272" end="6399" vendor="Huawei" comment="Contact [email protected]"/> 183 <ids type="enumerant" start="6400" end="6463" vendor="Intel" comment="Contact [email protected]"/> 184 <ids type="enumerant" start="6464" end="6527" vendor="Mikkosoft Productions" comment="Contact Mikko Rasa, [email protected]"/> 185 <ids type="enumerant" start="6528" end="6591" vendor="Codeplay" comment="Contact [email protected]"/> 186 <ids type="enumerant" start="6592" end="6655" vendor="Saarland University" comment="Contact [email protected]"/> 187 <ids type="enumerant" start="6656" end="6719" vendor="Meta" comment="Contact [email protected]"/> 188 <!-- Enumerants to reserve for future use. To get a block, allocate 189 multiples of 64 starting at the lowest available point in this 190 block and add a corresponding <ids> tag immediately above. Make 191 sure to fill in the vendor attribute, and preferably add a contact 192 person/address in a comment attribute. --> 193 <!-- Example new block: <ids type="enumerant" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> --> 194 <ids type="enumerant" start="6720" end="4294967295" comment="Enumerant range reservable for future use by vendors"/> 195 <!-- End reservations of enumerants --> 196 197 198 <!-- SECTION: SPIR-V Loop Control Bit Reservations --> 199 <!-- Reserve ranges of bits in the loop control bitfield. 200 201 Each vendor determines the use of values in their own ranges. 202 Vendors are not required to disclose those uses. If the use of a 203 value is included in an extension that is adopted by a Khronos 204 extension or specification, then that value's use may be permanently 205 fixed as if originally reserved in a Khronos range. 206 207 The SPIR Working Group strongly recommends: 208 - Each value is used for only one purpose. 209 - All values in a range should be used before allocating a new range. 210 --> 211 212 <!-- Reserved loop control bits --> 213 <ids type="LoopControl" start="0" end="15" vendor="Khronos" comment="Reserved LoopControl bits, not available to vendors - see the SPIR-V Specification"/> 214 <ids type="LoopControl" start="16" end="27" vendor="Intel" comment="Contact [email protected]"/> 215 <ids type="LoopControl" start="28" end="30" comment="Unreserved bits reservable for use by vendors"/> 216 <ids type="LoopControl" start="31" end="31" vendor="Khronos" comment="Reserved LoopControl bit, not available to vendors"/> 217 218 219 <!-- SECTION: SPIR-V Function Control Bit Reservations --> 220 <!-- Reserve ranges of bits in the function control bitfield. 221 222 Each vendor determines the use of values in their own ranges. 223 Vendors are not required to disclose those uses. If the use of a 224 value is included in an extension that is adopted by a Khronos 225 extension or specification, then that value's use may be permanently 226 fixed as if originally reserved in a Khronos range. 227 228 The SPIR Working Group strongly recommends: 229 - Each value is used for only one purpose. 230 - All values in a range should be used before allocating a new range. 231 --> 232 233 <!-- Reserved function control bits --> 234 <ids type="FunctionControl" start="0" end="15" vendor="Khronos" comment="Reserved FunctionControl bits, not available to vendors - see the SPIR-V Specification"/> 235 <ids type="FunctionControl" start="16" end="16" vendor="Intel" comment="Contact [email protected]"/> 236 <ids type="FunctionControl" start="17" end="30" comment="Unreserved bits reservable for use by vendors"/> 237 <ids type="FunctionControl" start="31" end="31" vendor="Khronos" comment="Reserved FunctionControl bit, not available to vendors"/> 238 239 240 <!-- SECTION: SPIR-V FP Fast Math Mode Bit Reservations --> 241 <!-- Reserve ranges of bits in the "FP Fast Math Mode" bitfield. 242 Each vendor determines the use of values in their own ranges. 243 Vendors are not required to disclose those uses. If the use of a 244 value is included in an extension that is adopted by a Khronos 245 extension or specification, then that value's use may be permanently 246 fixed as if originally reserved in a Khronos range. 247 The SPIR Working Group strongly recommends: 248 - Each value is used for only one purpose. 249 - All values in a range should be used before allocating a new range. 250 --> 251 252 <!-- Reserved FP fast math mode bits --> 253 <ids type="FPFastMathMode" start="0" end="15" vendor="Khronos" comment="Reserved FPFastMathMode bits, not available to vendors - see the SPIR-V Specification"/> 254 <ids type="FPFastMathMode" start="16" end="17" vendor="Intel" comment="Contact [email protected]"/> 255 <ids type="FPFastMathMode" start="18" end="18" vendor="khronos" comment="Reserved FPFastMathMode bit, not available to vendors - see SPV_KHR_float_controls2"/> 256 <ids type="FPFastMathMode" start="19" end="31" comment="Unreserved bits reservable for use by vendors"/> 257 258 259 <!-- SECTION: SPIR-V Memory Operand Bit Reservations --> 260 <!-- Reserve ranges of bits in the memory operands bitfield. 261 262 Each vendor determines the use of values in their own ranges. 263 Vendors are not required to disclose those uses. If the use of a 264 value is included in an extension that is adopted by a Khronos 265 extension or specification, then that value's use may be permanently 266 fixed as if originally reserved in a Khronos range. 267 268 The SPIR Working Group strongly recommends: 269 - Each value is used for only one purpose. 270 - All values in a range should be used before allocating a new range. 271 --> 272 273 <!-- Reserved memory operand bits --> 274 <ids type="MemoryOperand" start="0" end="15" vendor="Khronos" comment="Reserved MemoryOperand bits, not available to vendors - see the SPIR-V Specification"/> 275 <ids type="MemoryOperand" start="16" end="18" vendor="Intel" comment="Contact [email protected]"/> 276 <ids type="MemoryOperand" start="19" end="22" vendor="Arm" comment="Contact [email protected]"/> 277 <ids type="MemoryOperand" start="23" end="30" comment="Unreserved bits reservable for use by vendors"/> 278 <ids type="MemoryOperand" start="31" end="31" vendor="Khronos" comment="Reserved MemoryOperand bit, not available to vendors"/> 279 280 <!-- SECTION: SPIR-V Image Operand Bit Reservations --> 281 <!-- Reserve ranges of bits in the image operands bitfield. 282 283 Each vendor determines the use of values in their own ranges. 284 Vendors are not required to disclose those uses. If the use of a 285 value is included in an extension that is adopted by a Khronos 286 extension or specification, then that value's use may be permanently 287 fixed as if originally reserved in a Khronos range. 288 289 The SPIR Working Group strongly recommends: 290 - Each value is used for only one purpose. 291 - All values in a range should be used before allocating a new range. 292 --> 293 294 <!-- Reserved image operand bits --> 295 <ids type="ImageOperand" start="0" end="15" vendor="Khronos" comment="Reserved ImageOperand bits, not available to vendors - see the SPIR-V Specification"/> 296 <ids type="ImageOperand" start="16" end="16" vendor="Nvidia" comment="Contact [email protected]"/> 297 <ids type="ImageOperand" start="17" end="30" comment="Unreserved bits reservable for use by vendors"/> 298 <ids type="ImageOperand" start="31" end="31" vendor="Khronos" comment="Reserved ImageOperand bit, not available to vendors"/> 299 300</registry> 301