MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
-->
<!--
- This file, spir-v.xml, is the SPIR-V Tool ID and Opcode registry. The
- canonical version of the registry, together with related schema and
+ 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
- http://www.khronos.org/registry/spir-v/
+ include/spirv/spir-v.xml in the master branch at
+ https://github.com/KhronosGroup/SPIRV-Headers
-->
<!-- SECTION: SPIR-V Tool ID Definitions -->
</ids>
<!-- SECTION: SPIR-V Opcodes and Enumerants -->
- <!-- Reserve new ranges for vendors in contiguous blocks of 64
- preceding the "Future use" block below, and modify that block
- accordingly.
- 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
+ <!-- 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.
- 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.
- For example, to avoid unused gaps in ranges, it is customary for
- several extensions to use values from the same range.
-
- The Id type "enum" is a synonym for "opcode".
-
- Note that SPIR-V restricts opcode values to 16 bits.
-->
- <!-- Reserved opcode & enumerant blocks -->
+ <!-- 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"/>
<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"/>
- <!-- Opcodes & enumerants reservable for future use. To get a block, allocate
+ <!-- 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="6080" end="4294967295" comment="Opcode range reservable for future use by vendors"/>
+ <ids type="opcode" start="6080" 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"/>
+ <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"/>
+ <!-- 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="6080" end="4294967295" comment="Enumerant range reservable for future use by vendors"/>
+ <!-- End reservations of enumerants -->
<!-- SECTION: SPIR-V Loop Control Bit Reservations -->