| <?xml version="1.0" encoding="UTF-8"?> | 
 | <registry> | 
 |     <!-- | 
 |     Copyright (c) 2015 The Khronos Group Inc. | 
 |  | 
 |     Permission is hereby granted, free of charge, to any person obtaining a | 
 |     copy of this software and/or associated documentation files (the | 
 |     "Materials"), to deal in the Materials without restriction, including | 
 |     without limitation the rights to use, copy, modify, merge, publish, | 
 |     distribute, sublicense, and/or sell copies of the Materials, and to | 
 |     permit persons to whom the Materials are furnished to do so, subject to | 
 |     the following conditions: | 
 |  | 
 |     The above copyright notice and this permission notice shall be included | 
 |     in all copies or substantial portions of the Materials. | 
 |  | 
 |     THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
 |     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
 |     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | 
 |     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | 
 |     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | 
 |     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | 
 |     MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | 
 |     --> | 
 |     <!-- | 
 |     This file, spir-v.xml, is the SPIR-V Tool ID, opcode and enumerant registry. | 
 |     The canonical version of the registry, together with related schema and | 
 |     documentation, can be found in the Khronos Registry at | 
 |     include/spirv/spir-v.xml in the master branch at | 
 |     https://github.com/KhronosGroup/SPIRV-Headers | 
 |     --> | 
 |  | 
 |     <!-- SECTION: SPIR-V Tool ID Definitions  --> | 
 |  | 
 |     <!-- A SPIR-V Generator Magic Number is a 32 bit word: The high order 16 | 
 |          bits are a tool ID, which should be unique across all SPIR-V | 
 |          generators. The low order 16 bits are reserved for use as a tool | 
 |          version number, or any other purpose the tool supplier chooses. | 
 |          Only the tool IDs are reserved with Khronos. | 
 |  | 
 |          Add new tool ID reservations contiguously with the first available | 
 |          number (the "start" attribute of the <unused> tag below), and | 
 |          modify that <unused> tag accordingly. Please add a vendor/tool | 
 |          supplier name in a 'vendor="name"' attribute; a tool name in a | 
 |          'tool="name"' attribute; and a contact person/address in a | 
 |          'comment' attribute. Remember that this value is the high 16 bits | 
 |          of a 32-bit word. | 
 |  | 
 |          Note: a single vendor/tool supplier may have multiple tool IDs | 
 |          reserved for different SPIR-V generators --> | 
 |  | 
 |     <ids type="vendor" start="0" end="0xFFFF" comment="SPIR-V Tool IDs"> | 
 |         <id value="0"   vendor="Khronos"    comment="Reserved by Khronos"/> | 
 |         <id value="1"   vendor="LunarG"     comment="Contact TBD"/> | 
 |         <id value="2"   vendor="Valve"      comment="Contact TBD"/> | 
 |         <id value="3"   vendor="Codeplay"   comment="Contact Victor Lomuller, victor@codeplay.com"/> | 
 |         <id value="4"   vendor="NVIDIA"     comment="Contact Kerch Holt, kholt@nvidia.com"/> | 
 |         <id value="5"   vendor="ARM"        comment="Contact Kevin Petit, kevin.petit@arm.com"/> | 
 |         <id value="6"   vendor="Khronos" tool="LLVM/SPIR-V Translator" comment="Contact Yaxun (Sam) Liu, yaxun.liu@amd.com"/> | 
 |         <id value="7"   vendor="Khronos" tool="SPIR-V Tools Assembler" comment="Contact David Neto, dneto@google.com"/> | 
 |         <id value="8"   vendor="Khronos" tool="Glslang Reference Front End" comment="Contact John Kessenich, johnkessenich@google.com"/> | 
 |         <id value="9"   vendor="Qualcomm"   comment="Contact weifengz@qti.qualcomm.com"/> | 
 |         <id value="10"  vendor="AMD"        comment="Contact Daniel Rakos, daniel.rakos@amd.com"/> | 
 |         <id value="11"  vendor="Intel"      comment="Contact Alexey, alexey.bader@intel.com"/> | 
 |         <id value="12"  vendor="Imagination" comment="Contact James Jones"/> | 
 |         <id value="13"  vendor="Google" tool="Shaderc over Glslang" comment="Contact David Neto, dneto@google.com"/> | 
 |         <id value="14"  vendor="Google" tool="spiregg" comment="Contact Lei Zhang, antiagainst@google.com"/> | 
 |         <id value="15"  vendor="Google" tool="rspirv" comment="Contact Lei Zhang, antiagainst@gmail.com"/> | 
 |         <id value="16"  vendor="X-LEGEND"   tool="Mesa-IR/SPIR-V Translator" comment="Contact Metora Wang, github:metora/MesaGLSLCompiler"/> | 
 |         <id value="17"  vendor="Khronos" tool="SPIR-V Tools Linker" comment="Contact David Neto, dneto@google.com"/> | 
 |         <id value="18"  vendor="Wine" tool="VKD3D Shader Compiler" comment="Contact wine-devel@winehq.org"/> | 
 |         <id value="19"  vendor="Tellusim" tool="Clay Shader Compiler" comment="Contact info@tellusim.com"/> | 
 |         <id value="20"  vendor="W3C WebGPU Group" tool="WHLSL Shader Translator" comment="https://github.com/gpuweb/WHLSL"/> | 
 |         <id value="21"  vendor="Google" tool="Clspv" comment="Contact David Neto, dneto@google.com"/> | 
 |         <id value="22"  vendor="Google" tool="MLIR SPIR-V Serializer" comment="Contact Lei Zhang, antiagainst@google.com"/> | 
 |         <id value="23"  vendor="Google" tool="Tint Compiler" comment="Contact David Neto, dneto@google.com"/> | 
 |         <id value="24"  vendor="Google" tool="ANGLE Shader Compiler" comment="Contact Shahbaz Youssefi, syoussefi@google.com"/> | 
 |         <id value="25"  vendor="Netease Games" tool="Messiah Shader Compiler" comment="Contact Yuwen Wu, atyuwen@gmail.com"/> | 
 |         <id value="26"  vendor="Xenia" tool="Xenia Emulator Microcode Translator" comment="Contact Vitaliy Kuzmin, triang3l@yandex.ru, https://github.com/xenia-project/xenia"/> | 
 |         <id value="27"  vendor="Embark Studios" tool="Rust GPU Compiler Backend" comment="https://github.com/embarkstudios/rust-gpu"/> | 
 |         <id value="28"  vendor="gfx-rs community" tool="Naga" comment="https://github.com/gfx-rs/naga"/> | 
 |         <id value="29"  vendor="Mikkosoft Productions" tool="MSP Shader Compiler" comment="Contact Mikko Rasa, tdb@tdb.fi"/> | 
 |         <id value="30"  vendor="SpvGenTwo community" tool="SpvGenTwo SPIR-V IR Tools" comment="https://github.com/rAzoR8/SpvGenTwo"/> | 
 |         <id value="31"  vendor="Google" tool="Skia SkSL" comment="Contact Ethan Nicholas, ethannicholas@google.com"/> | 
 |         <id value="32"  vendor="TornadoVM" tool="SPIRV Beehive Toolkit" comment="https://github.com/beehive-lab/spirv-beehive-toolkit"/> | 
 |         <id value="33"  vendor="DragonJoker" tool="ShaderWriter" comment="Contact Sylvain Doremus, https://github.com/DragonJoker/ShaderWriter"/> | 
 |         <id value="34"  vendor="Rayan Hatout" tool="SPIRVSmith" comment="Contact Rayan Hatout rayan.hatout@gmail.com, Repo https://github.com/rayanht/SPIRVSmith"/> | 
 |         <unused start="35" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/> | 
 |     </ids> | 
 |  | 
 |     <!-- SECTION: SPIR-V Opcodes and Enumerants --> | 
 |  | 
 |     <!-- Vendors reserve new ranges of: | 
 |            - opcode enumerants in the "opcode" list below, and | 
 |            - non-opcode enumerants in the non-opcodes "enumerant" list below. | 
 |          Both are reserved by contiguous blocks of 64, preceding the given | 
 |          "Future use" blocks. | 
 |  | 
 |          SPIR-V background: | 
 |            - SPIR-V currently has well over 30 enums, including the opcode enum | 
 |            - each enum has its own name space, allowing reuse of enumerants | 
 |            - SPIR-V restricts opcode enumerants to 16 bits | 
 |            - all other enums use 32-bit enumerants | 
 |  | 
 |          Reservation rules: | 
 |            - opcode reservations ("opcode") are only valid for opcodes | 
 |            - non-opcode reservations ("enumerant") are not valid for opcodes | 
 |            - reservations in the enumerant list are valid for all non-opcode enums | 
 |            - it is simpler to use each non-opcode enumerant for only one purpose | 
 |              but this is left to the discretion of the vendor | 
 |            - all enumerants in a range should be used before allocating a new range | 
 |              (several extensions can use enumerants from the same range) | 
 |  | 
 |          Each vendor determines the use of enumerants in the ranges they | 
 |          reserve. Vendors are not required to disclose those uses.  If the use | 
 |          of an enumerant is included in an extension that is adopted by a Khronos | 
 |          extension or specification, then that enumerant's use may be permanently | 
 |          fixed as if originally reserved in a Khronos range. | 
 |  | 
 |          --> | 
 |  | 
 |     <!-- Begin reservations of opcode enumerants --> | 
 |     <ids type="opcode" start="0" end="4095" vendor="Khronos" comment="Reserved opcodes, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="opcode" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/> | 
 |     <ids type="opcode" start="4160" end="4415" vendor="ARM" comment="Contact kevin.petit@arm.com"/> | 
 |     <ids type="opcode" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, neil.henning@amd.com"/> | 
 |     <ids type="opcode" start="4480" end="4991" vendor="Qualcomm" comment="Contact weifengz@qti.qualcomm.com"/> | 
 |     <ids type="opcode" start="4992" end="5247" vendor="AMD"/> | 
 |     <ids type="opcode" start="5248" end="5503" vendor="NVIDIA"/> | 
 |     <ids type="opcode" start="5504" end="5567" vendor="Imagination"/> | 
 |     <ids type="opcode" start="5568" end="5631" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <ids type="opcode" start="5632" end="5695" vendor="Google" comment="Contact dneto@google.com"/> | 
 |     <ids type="opcode" start="5696" end="5823" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <ids type="opcode" start="5824" end="5951" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="opcode" start="5952" end="6015" vendor="Codeplay" comment="Contact victor@codeplay.com"/> | 
 |     <ids type="opcode" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/> | 
 |     <ids type="opcode" start="6080" end="6143" vendor="Intel" comment="Contact mariusz.merecki@intel.com"/> | 
 |     <ids type="opcode" start="6144" end="6271" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="opcode" start="6272" end="6399" vendor="Huawei" comment="Contact wanghuilong2@xunweitech.com"/> | 
 |     <ids type="opcode" start="6400" end="6463" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <!-- Opcode enumerants to reserve for future use. To get a block, allocate | 
 |          multiples of 64 starting at the lowest available point in this | 
 |          block and add a corresponding <ids> tag immediately above. Make | 
 |          sure to fill in the vendor attribute, and preferably add a contact | 
 |          person/address in a comment attribute. --> | 
 |     <!-- Example new block: <ids type="opcode" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> --> | 
 |     <ids type="opcode" start="6464" end="65535" comment="Opcode range reservable for future use by vendors"/> | 
 |     <!-- End reservations of opcodes --> | 
 |  | 
 |  | 
 |     <!-- Begin reservations of non-opcode enumerants --> | 
 |     <ids type="enumerant" start="0" end="4095" vendor="Khronos" comment="Reserved enumerants, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="enumerant" start="4096" end="4159" vendor="Mesa" comment="Contact TBD"/> | 
 |     <ids type="enumerant" start="4160" end="4415" vendor="ARM" comment="Contact kevin.petit@arm.com"/> | 
 |     <ids type="enumerant" start="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, neil.henning@amd.com"/> | 
 |     <ids type="enumerant" start="4480" end="4991" vendor="Qualcomm" comment="Contact weifengz@qti.qualcomm.com"/> | 
 |     <ids type="enumerant" start="4992" end="5247" vendor="AMD"/> | 
 |     <ids type="enumerant" start="5248" end="5503" vendor="NVIDIA"/> | 
 |     <ids type="enumerant" start="5504" end="5567" vendor="Imagination"/> | 
 |     <ids type="enumerant" start="5568" end="5631" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <ids type="enumerant" start="5632" end="5695" vendor="Google" comment="Contact dneto@google.com"/> | 
 |     <ids type="enumerant" start="5696" end="5823" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <ids type="enumerant" start="5824" end="5951" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="enumerant" start="5952" end="6015" vendor="Codeplay" comment="Contact victor@codeplay.com"/> | 
 |     <ids type="enumerant" start="6016" end="6079" vendor="Khronos" comment="Contact @tobski"/> | 
 |     <ids type="enumerant" start="6080" end="6143" vendor="Intel" comment="Contact mariusz.merecki@intel.com"/> | 
 |     <ids type="enumerant" start="6144" end="6271" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="enumerant" start="6272" end="6399" vendor="Huawei" comment="Contact wanghuilong2@xunweitech.com"/> | 
 |     <ids type="enumerant" start="6400" end="6463" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <ids type="enumerant" start="6464" end="6527" vendor="Mikkosoft Productions" comment="Contact Mikko Rasa, tdb@tdb.fi"/> | 
 |     <!-- Enumerants to reserve for future use. To get a block, allocate | 
 |          multiples of 64 starting at the lowest available point in this | 
 |          block and add a corresponding <ids> tag immediately above. Make | 
 |          sure to fill in the vendor attribute, and preferably add a contact | 
 |          person/address in a comment attribute. --> | 
 |     <!-- Example new block: <ids type="enumerant" start="XXXX" end="XXXX+64n-1" vendor="Add vendor" comment="Contact TBD"/> --> | 
 |     <ids type="enumerant" start="6528" end="4294967295" comment="Enumerant range reservable for future use by vendors"/> | 
 |     <!-- End reservations of enumerants --> | 
 |  | 
 |  | 
 |     <!-- SECTION: SPIR-V Loop Control Bit Reservations --> | 
 |     <!-- Reserve ranges of bits in the loop control bitfield. | 
 |  | 
 |          Each vendor determines the use of values in their own ranges. | 
 |          Vendors are not required to disclose those uses.  If the use of a | 
 |          value is included in an extension that is adopted by a Khronos | 
 |          extension or specification, then that value's use may be permanently | 
 |          fixed as if originally reserved in a Khronos range. | 
 |  | 
 |          The SPIR Working Group strongly recommends: | 
 |          - Each value is used for only one purpose. | 
 |          - All values in a range should be used before allocating a new range. | 
 |          --> | 
 |  | 
 |     <!-- Reserved loop control bits --> | 
 |     <ids type="LoopControl" start="0" end="15" vendor="Khronos" comment="Reserved LoopControl bits, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="LoopControl" start="16" end="25" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="LoopControl" start="26" end="30" comment="Unreserved bits reservable for use by vendors"/> | 
 |     <ids type="LoopControl" start="31" end="31" vendor="Khronos" comment="Reserved LoopControl bit, not available to vendors"/> | 
 |  | 
 |  | 
 |     <!-- SECTION: SPIR-V Function Control Bit Reservations --> | 
 |     <!-- Reserve ranges of bits in the function control bitfield. | 
 |  | 
 |          Each vendor determines the use of values in their own ranges. | 
 |          Vendors are not required to disclose those uses.  If the use of a | 
 |          value is included in an extension that is adopted by a Khronos | 
 |          extension or specification, then that value's use may be permanently | 
 |          fixed as if originally reserved in a Khronos range. | 
 |  | 
 |          The SPIR Working Group strongly recommends: | 
 |          - Each value is used for only one purpose. | 
 |          - All values in a range should be used before allocating a new range. | 
 |          --> | 
 |  | 
 |     <!-- Reserved function control bits --> | 
 |     <ids type="FunctionControl" start="0" end="15" vendor="Khronos" comment="Reserved FunctionControl bits, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="FunctionControl" start="16" end="16" vendor="Intel" comment="Contact ben.ashbaugh@intel.com"/> | 
 |     <ids type="FunctionControl" start="17" end="30" comment="Unreserved bits reservable for use by vendors"/> | 
 |     <ids type="FunctionControl" start="31" end="31" vendor="Khronos" comment="Reserved FunctionControl bit, not available to vendors"/> | 
 |  | 
 |  | 
 |     <!-- SECTION: SPIR-V FP Fast Math Mode Bit Reservations --> | 
 |     <!-- Reserve ranges of bits in the "FP Fast Math Mode" bitfield. | 
 |          Each vendor determines the use of values in their own ranges. | 
 |          Vendors are not required to disclose those uses.  If the use of a | 
 |          value is included in an extension that is adopted by a Khronos | 
 |          extension or specification, then that value's use may be permanently | 
 |          fixed as if originally reserved in a Khronos range. | 
 |          The SPIR Working Group strongly recommends: | 
 |          - Each value is used for only one purpose. | 
 |          - All values in a range should be used before allocating a new range. | 
 |          --> | 
 |  | 
 |     <!-- Reserved FP fast math mode bits --> | 
 |     <ids type="FPFastMathMode" start="0" end="15" vendor="Khronos" comment="Reserved FPFastMathMode bits, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="FPFastMathMode" start="16" end="17" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="FPFastMathMode" start="18" end="31" comment="Unreserved bits reservable for use by vendors"/> | 
 |  | 
 |  | 
 |     <!-- SECTION: SPIR-V Memory Operand Bit Reservations --> | 
 |     <!-- Reserve ranges of bits in the memory operands bitfield. | 
 |  | 
 |          Each vendor determines the use of values in their own ranges. | 
 |          Vendors are not required to disclose those uses.  If the use of a | 
 |          value is included in an extension that is adopted by a Khronos | 
 |          extension or specification, then that value's use may be permanently | 
 |          fixed as if originally reserved in a Khronos range. | 
 |  | 
 |          The SPIR Working Group strongly recommends: | 
 |          - Each value is used for only one purpose. | 
 |          - All values in a range should be used before allocating a new range. | 
 |          --> | 
 |  | 
 |     <!-- Reserved memory operand bits --> | 
 |     <ids type="MemoryOperand" start="0" end="15" vendor="Khronos" comment="Reserved MemoryOperand bits, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="MemoryOperand" start="16" end="17" vendor="Intel" comment="Contact michael.kinsner@intel.com"/> | 
 |     <ids type="MemoryOperand" start="18" end="30" comment="Unreserved bits reservable for use by vendors"/> | 
 |     <ids type="MemoryOperand" start="31" end="31" vendor="Khronos" comment="Reserved MemoryOperand bit, not available to vendors"/> | 
 |  | 
 |     <!-- SECTION: SPIR-V Image Operand Bit Reservations --> | 
 |     <!-- Reserve ranges of bits in the image operands bitfield. | 
 |  | 
 |          Each vendor determines the use of values in their own ranges. | 
 |          Vendors are not required to disclose those uses.  If the use of a | 
 |          value is included in an extension that is adopted by a Khronos | 
 |          extension or specification, then that value's use may be permanently | 
 |          fixed as if originally reserved in a Khronos range. | 
 |  | 
 |          The SPIR Working Group strongly recommends: | 
 |          - Each value is used for only one purpose. | 
 |          - All values in a range should be used before allocating a new range. | 
 |          --> | 
 |  | 
 |     <!-- Reserved image operand bits --> | 
 |     <ids type="ImageOperand" start="0" end="15" vendor="Khronos" comment="Reserved ImageOperand bits, not available to vendors - see the SPIR-V Specification"/> | 
 |     <ids type="ImageOperand" start="16" end="16" vendor="Nvidia" comment="Contact pmistry@nvidia.com"/> | 
 |     <ids type="ImageOperand" start="17" end="30" comment="Unreserved bits reservable for use by vendors"/> | 
 |     <ids type="ImageOperand" start="31" end="31" vendor="Khronos" comment="Reserved ImageOperand bit, not available to vendors"/> | 
 |  | 
 | </registry> |