Publish SPIR-V Registry files: SPIR-V 1.0 Revision 4
authorDavid Neto <dneto@google.com>
Thu, 17 Mar 2016 20:23:57 +0000 (16:23 -0400)
committerDavid Neto <dneto@google.com>
Thu, 14 Apr 2016 19:58:05 +0000 (15:58 -0400)
Include all the headers.

Include the XML registry file, spir-v.xml, since it's also machine-readable
and potentially useful to programs.

16 files changed:
.gitattributes [new file with mode: 0644]
.gitignore [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
LICENSE [new file with mode: 0644]
README.md [new file with mode: 0644]
example/CMakeLists.txt [new file with mode: 0644]
example/example.cpp [new file with mode: 0644]
include/spirv/1.0/GLSL.std.450.h [new file with mode: 0644]
include/spirv/1.0/OpenCL.std.h [new file with mode: 0644]
include/spirv/1.0/spirv.h [new file with mode: 0644]
include/spirv/1.0/spirv.hpp [new file with mode: 0644]
include/spirv/1.0/spirv.hpp11 [new file with mode: 0644]
include/spirv/1.0/spirv.json [new file with mode: 0644]
include/spirv/1.0/spirv.lua [new file with mode: 0644]
include/spirv/1.0/spirv.py [new file with mode: 0644]
include/spirv/spir-v.xml [new file with mode: 0644]

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..3fa5aaf
--- /dev/null
@@ -0,0 +1,7 @@
+*.json text
+*.h text
+*.hpp text
+*.hpp11 text
+*.lua text
+*.py text
+*.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..9bcdd5a
--- /dev/null
@@ -0,0 +1,2 @@
+build
+out
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a5bff17
--- /dev/null
@@ -0,0 +1,51 @@
+# Copyright (c) 2015-2016 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.
+#
+# MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+# KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+# SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+#    https://www.khronos.org/registry/
+#
+# 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.
+
+#
+# The SPIR-V headers from the SPIR-V Registry
+# https://www.khronos.org/registry/spir-v/
+#
+cmake_minimum_required(VERSION 2.8)
+project(SPIRV-Headers)
+
+# There are two ways to use this project.
+#
+# Using this source tree directly from a CMake-based project:
+#   1. Add an add_subdirectory directive to include this sub directory.
+#   2. Use ${SPIRV-Headers_SOURCE_DIR}/include} in a target_include_directories
+#      command.
+#
+# Installing the headers first, then using them with an implicit include
+# directory.  To install the headers:
+#   1. mkdir build ; cd build
+#   2. cmake ..
+#   3. cmake --build . install-headers
+
+file(GLOB_RECURSE FILES include/spirv/*)
+add_custom_target(install-headers
+  COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv ${CMAKE_INSTALL_PREFIX}/include/spirv)
+
+add_subdirectory(example)
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..8b2e821
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2015-2016 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.
+
+MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+   https://www.khronos.org/registry/
+
+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.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..226c8c4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,118 @@
+# SPIR-V Headers
+
+This repository contains machine-readable files from the
+[SPIR-V Registry](https://www.khronos.org/registry/spir-v/).
+This includes:
+
+* Header files for various languages.
+* JSON files describing the grammar for the SPIR-V core instruction set,
+  and for the GLSL.std.450 and OpenCL extended instruction sets.
+* The XML registry file.
+
+Under the [include](include) directory, header files are provided according to
+their own version.  Only major and minor version numbers count.
+
+In contrast, the XML registry file has a linear history, so it is
+not tied to SPIR-V specification versions.
+
+## How is this repository updated?
+
+When a new version or revision of the SPIR-V header files are published,
+the SPIR Working Group will push new commits onto master, updating
+the files under [include](include).
+A newer revision of a header file always replaces an older revision of
+the same version.  For example, verison 1.0 Rev 4 of `spirv.h` is placed in
+`include/spirv/1.0/spirv.h` and if there is a Rev 5, then it will be placed
+in the same location.
+
+The SPIR-V XML registry file is updated by the Khronos registrar whenever
+a new enum range is allocated.
+
+In particular, pull requests that update header files will not be accepted.
+Issues with the header files should be filed in the
+[Khronos public bugzilla database](https://www.khronos.org/bugzilla/),
+against the Specification component of the SPIR-V product.
+
+## How to install the headers
+
+```
+mkdir build
+cd build
+cmake ..
+# Linux
+cmake --build . --target install-headers
+# Windows
+cmake --build . --config Debug --target install-headers
+```
+
+Then, for example, you will have `/usr/local/include/spirv/1.0/spirv.h`
+
+If you want to install them somewhere else, then use
+`-DCMAKE_INSTALL_PREFIX=/other/path` on the first `cmake` command.
+
+## Using the headers without installing
+
+A CMake-based project can use the headers without installing, as follows:
+
+1. Add an `add_subdirectory` directive to include this source tree.
+2. Use `${SPIRV-Headers_SOURCE_DIR}/include}` in a `target_include_directories`
+   directive.
+3. In your C or C++ source code use `#include` directives that explicitly mention
+   the `spirv` path component.  For example:
+```
+#include "spirv/1.0/GLSL.std.450.h"
+#include "spirv/1.0/OpenCL.std.h"
+#include "spirv/1.0/spirv.hpp"
+```
+
+See also the [example](example/) subdirectory.  But since that example is
+*inside* this repostory, it doesn't use and `add_subdirectory` directive.
+
+## FAQ
+
+* *How are different versions published?*
+
+  All versions are present in the master branch of the repository.
+  They are located in different subdirectories under `include/spirv`,
+  where the subdirectory at that level encodes the major and minor
+  version number of the SPIR-V (core) specification.
+
+  An application should consciously select the targeted SPIR-V version
+  number, by naming the specific version in their `#include` directives,
+  as above and in the example.
+
+* *How do you handle the evolution of extended instruction sets?*
+
+  Extended instruction sets evolve asynchronously from the core spec.
+  Right now there is only a single version of both the GLSL and OpenCL
+  headers.  So we don't yet have a problematic example to resolve.
+
+## License
+<a name="license"></a>
+```
+Copyright (c) 2015-2016 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.
+
+MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+   https://www.khronos.org/registry/
+
+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.
+```
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8b22f60
--- /dev/null
@@ -0,0 +1,4 @@
+add_library(SPIRV-Headers-example
+       ${CMAKE_CURRENT_SOURCE_DIR}/example.cpp)
+target_include_directories(SPIRV-Headers-example
+       PRIVATE ${SPIRV-Headers_SOURCE_DIR}/include)
diff --git a/example/example.cpp b/example/example.cpp
new file mode 100644 (file)
index 0000000..222c101
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright (c) 2016 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.
+// 
+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+//    https://www.khronos.org/registry/
+// 
+// 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.
+
+#include <spirv/1.0/GLSL.std.450.h>
+#include <spirv/1.0/OpenCL.std.h>
+#include <spirv/1.0/spirv.hpp>
+
+namespace {
+
+const GLSLstd450 kSin = GLSLstd450Sin;
+const OpenCLLIB::Entrypoints kNative_cos = OpenCLLIB::Native_cos;
+const spv::Op kNop = spv::OpNop;
+
+}  // anonymous namespace
diff --git a/include/spirv/1.0/GLSL.std.450.h b/include/spirv/1.0/GLSL.std.450.h
new file mode 100644 (file)
index 0000000..6c54a17
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+** Copyright (c) 2014-2016 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.
+**
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+**
+** 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.
+*/
+
+#ifndef GLSLstd450_H
+#define GLSLstd450_H
+
+static const int GLSLstd450Version = 100;
+static const int GLSLstd450Revision = 2;
+
+enum GLSLstd450 {
+    GLSLstd450Bad = 0,              // Don't use
+
+    GLSLstd450Round = 1,
+    GLSLstd450RoundEven = 2,
+    GLSLstd450Trunc = 3,
+    GLSLstd450FAbs = 4,
+    GLSLstd450SAbs = 5,
+    GLSLstd450FSign = 6,
+    GLSLstd450SSign = 7,
+    GLSLstd450Floor = 8,
+    GLSLstd450Ceil = 9,
+    GLSLstd450Fract = 10,
+
+    GLSLstd450Radians = 11,
+    GLSLstd450Degrees = 12,
+    GLSLstd450Sin = 13,
+    GLSLstd450Cos = 14,
+    GLSLstd450Tan = 15,
+    GLSLstd450Asin = 16,
+    GLSLstd450Acos = 17,
+    GLSLstd450Atan = 18,
+    GLSLstd450Sinh = 19,
+    GLSLstd450Cosh = 20,
+    GLSLstd450Tanh = 21,
+    GLSLstd450Asinh = 22,
+    GLSLstd450Acosh = 23,
+    GLSLstd450Atanh = 24,
+    GLSLstd450Atan2 = 25,
+
+    GLSLstd450Pow = 26,
+    GLSLstd450Exp = 27,
+    GLSLstd450Log = 28,
+    GLSLstd450Exp2 = 29,
+    GLSLstd450Log2 = 30,
+    GLSLstd450Sqrt = 31,
+    GLSLstd450InverseSqrt = 32,
+
+    GLSLstd450Determinant = 33,
+    GLSLstd450MatrixInverse = 34,
+
+    GLSLstd450Modf = 35,            // second operand needs an OpVariable to write to
+    GLSLstd450ModfStruct = 36,      // no OpVariable operand
+    GLSLstd450FMin = 37,
+    GLSLstd450UMin = 38,
+    GLSLstd450SMin = 39,
+    GLSLstd450FMax = 40,
+    GLSLstd450UMax = 41,
+    GLSLstd450SMax = 42,
+    GLSLstd450FClamp = 43,
+    GLSLstd450UClamp = 44,
+    GLSLstd450SClamp = 45,
+    GLSLstd450FMix = 46,
+    GLSLstd450IMix = 47,            // Reserved
+    GLSLstd450Step = 48,
+    GLSLstd450SmoothStep = 49,
+
+    GLSLstd450Fma = 50,
+    GLSLstd450Frexp = 51,            // second operand needs an OpVariable to write to
+    GLSLstd450FrexpStruct = 52,      // no OpVariable operand
+    GLSLstd450Ldexp = 53,
+
+    GLSLstd450PackSnorm4x8 = 54,
+    GLSLstd450PackUnorm4x8 = 55,
+    GLSLstd450PackSnorm2x16 = 56,
+    GLSLstd450PackUnorm2x16 = 57,
+    GLSLstd450PackHalf2x16 = 58,
+    GLSLstd450PackDouble2x32 = 59,
+    GLSLstd450UnpackSnorm2x16 = 60,
+    GLSLstd450UnpackUnorm2x16 = 61,
+    GLSLstd450UnpackHalf2x16 = 62,
+    GLSLstd450UnpackSnorm4x8 = 63,
+    GLSLstd450UnpackUnorm4x8 = 64,
+    GLSLstd450UnpackDouble2x32 = 65,
+
+    GLSLstd450Length = 66,
+    GLSLstd450Distance = 67,
+    GLSLstd450Cross = 68,
+    GLSLstd450Normalize = 69,
+    GLSLstd450FaceForward = 70,
+    GLSLstd450Reflect = 71,
+    GLSLstd450Refract = 72,
+
+    GLSLstd450FindILsb = 73,
+    GLSLstd450FindSMsb = 74,
+    GLSLstd450FindUMsb = 75,
+
+    GLSLstd450InterpolateAtCentroid = 76,
+    GLSLstd450InterpolateAtSample = 77,
+    GLSLstd450InterpolateAtOffset = 78,
+
+    GLSLstd450NMin = 79,
+    GLSLstd450NMax = 80,
+    GLSLstd450NClamp = 81,
+
+    GLSLstd450Count
+};
+
+#endif  // #ifndef GLSLstd450_H
diff --git a/include/spirv/1.0/OpenCL.std.h b/include/spirv/1.0/OpenCL.std.h
new file mode 100644 (file)
index 0000000..af29c52
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+** Copyright (c) 2015-2016 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.
+**
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+**
+** 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.
+*/
+
+//
+// Author: Boaz Ouriel, Intel
+//
+
+namespace OpenCLLIB {
+
+enum Entrypoints {
+
+    // math functions
+    Acos = 0,
+    Acosh = 1,
+    Acospi = 2,
+    Asin = 3,
+    Asinh = 4,
+    Asinpi = 5,
+    Atan = 6,
+    Atan2 = 7,
+    Atanh = 8,
+    Atanpi = 9,
+    Atan2pi = 10,
+    Cbrt = 11,
+    Ceil = 12,
+    Copysign = 13,
+    Cos = 14,
+    Cosh = 15,
+    Cospi = 16,
+    Erfc = 17,
+    Erf = 18,
+    Exp = 19,
+    Exp2 = 20,
+    Exp10 = 21,
+    Expm1 = 22,
+    Fabs = 23,
+    Fdim = 24,
+    Floor = 25,
+    Fma = 26,
+    Fmax = 27,
+    Fmin = 28,
+    Fmod = 29,
+    Fract = 30, 
+    Frexp = 31,
+    Hypot = 32,
+    Ilogb = 33,
+    Ldexp = 34,
+    Lgamma = 35,
+    Lgamma_r = 36,
+    Log = 37,
+    Log2 = 38,
+    Log10 = 39,
+    Log1p = 40,
+    Logb = 41,
+    Mad = 42,
+    Maxmag = 43,
+    Minmag = 44,
+    Modf = 45,
+    Nan = 46,
+    Nextafter = 47,
+    Pow = 48,
+    Pown = 49,
+    Powr = 50,
+    Remainder = 51,
+    Remquo = 52,
+    Rint = 53,
+    Rootn = 54,
+    Round = 55,
+    Rsqrt = 56,
+    Sin = 57,
+    Sincos = 58,
+    Sinh = 59,
+    Sinpi = 60,
+    Sqrt = 61,
+    Tan = 62,
+    Tanh = 63,
+    Tanpi = 64,
+    Tgamma = 65,
+    Trunc = 66,
+    Half_cos = 67,
+    Half_divide = 68,
+    Half_exp = 69,
+    Half_exp2 = 70,
+    Half_exp10 = 71,
+    Half_log = 72,
+    Half_log2 = 73,
+    Half_log10 = 74,
+    Half_powr = 75,
+    Half_recip = 76,
+    Half_rsqrt = 77,
+    Half_sin = 78,
+    Half_sqrt = 79,
+    Half_tan = 80,
+    Native_cos = 81,
+    Native_divide = 82,
+    Native_exp = 83,
+    Native_exp2 = 84,
+    Native_exp10 = 85,
+    Native_log = 86,
+    Native_log2 = 87,
+    Native_log10 = 88,
+    Native_powr = 89,
+    Native_recip = 90,
+    Native_rsqrt = 91,
+    Native_sin = 92,
+    Native_sqrt = 93,
+    Native_tan = 94,
+    
+    // Common
+    FClamp = 95,
+    Degrees = 96,
+    FMax_common = 97,
+    FMin_common = 98, 
+    Mix = 99,
+    Radians = 100,
+    Step = 101,
+    Smoothstep = 102,
+    Sign = 103,
+    
+    // Geometrics
+    Cross = 104,
+    Distance = 105, 
+    Length = 106,
+    Normalize = 107,
+    Fast_distance = 108,
+    Fast_length = 109,
+    Fast_normalize = 110,
+
+    // Images - Deprecated 
+    Read_imagef = 111,
+    Read_imagei = 112,
+    Read_imageui = 113,
+    Read_imageh = 114,
+
+    Read_imagef_samplerless = 115,
+    Read_imagei_samplerless = 116,
+    Read_imageui_samplerless = 117,
+    Read_imageh_samplerless = 118,
+
+    Write_imagef = 119,
+    Write_imagei = 120,
+    Write_imageui = 121,
+    Write_imageh = 122,
+    Read_imagef_mipmap_lod = 123,
+    Read_imagei_mipmap_lod = 124,
+    Read_imageui_mipmap_lod = 125,
+    Read_imagef_mipmap_grad = 126,
+    Read_imagei_mipmap_grad = 127,
+    Read_imageui_mipmap_grad = 128,
+
+    // Image write with LOD
+    Write_imagef_mipmap_lod = 129,
+    Write_imagei_mipmap_lod = 130,
+    Write_imageui_mipmap_lod = 131,
+
+    // Images - Deprecated
+    Get_image_width = 132,
+    Get_image_height = 133,
+    Get_image_depth = 134,
+    Get_image_channel_data_type = 135,
+    Get_image_channel_order = 136,
+    Get_image_dim = 137,
+    Get_image_array_size = 138,
+    Get_image_num_samples = 139,
+    Get_image_num_mip_levels = 140,
+    
+    // Integers
+    SAbs = 141,
+    SAbs_diff = 142,
+    SAdd_sat = 143,
+    UAdd_sat = 144,
+    SHadd = 145,
+    UHadd = 146,
+    SRhadd = 147,
+    URhadd = 148,
+    SClamp = 149,
+    UClamp = 150, 
+    Clz = 151,
+    Ctz = 152,    
+    SMad_hi = 153,
+    UMad_sat = 154,
+    SMad_sat = 155,
+    SMax = 156,
+    UMax = 157,
+    SMin = 158,
+    UMin = 159,
+    SMul_hi = 160,
+    Rotate = 161,
+    SSub_sat = 162,
+    USub_sat = 163,
+    U_Upsample = 164,
+    S_Upsample = 165,
+    Popcount = 166,
+    SMad24 = 167,
+    UMad24 = 168,
+    SMul24 = 169,
+    UMul24 = 170,
+
+    // Vector Loads/Stores
+    Vloadn = 171,
+    Vstoren = 172,
+    Vload_half = 173,
+    Vload_halfn = 174,
+    Vstore_half = 175,
+    Vstore_half_r = 176,
+    Vstore_halfn = 177,
+    Vstore_halfn_r = 178,
+    Vloada_halfn = 179,
+    Vstorea_halfn = 180,
+    Vstorea_halfn_r = 181,
+
+    // Vector Misc 
+    Shuffle = 182,
+    Shuffle2 = 183,
+
+    // 
+    Printf = 184,
+    Prefetch = 185,
+    
+    // Relationals
+    Bitselect = 186,
+    Select = 187,
+        
+    // pipes
+    Read_pipe = 188,
+    Write_pipe = 189,
+    Reserve_read_pipe = 190,
+    Reserve_write_pipe = 191,
+    Commit_read_pipe = 192,
+    Commit_write_pipe = 193,
+    Is_valid_reserve_id = 194,
+    Work_group_reserve_read_pipe = 195,
+    Work_group_reserve_write_pipe = 196,
+    Work_group_commit_read_pipe = 197,
+    Work_group_commit_write_pipe = 198,
+    Get_pipe_num_packets = 199,
+    Get_pipe_max_packets = 200,
+    
+    // more integers
+    UAbs = 201,
+    UAbs_diff = 202,
+    UMul_hi = 203,
+    UMad_hi = 204,
+};
+
+
+
+}; // end namespace OpenCL20
+
diff --git a/include/spirv/1.0/spirv.h b/include/spirv/1.0/spirv.h
new file mode 100644 (file)
index 0000000..7905aac
--- /dev/null
@@ -0,0 +1,871 @@
+/*
+** Copyright (c) 2014-2016 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.
+** 
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+** 
+** 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 header is automatically generated by the same tool that creates
+** the Binary Section of the SPIR-V specification.
+*/
+
+/*
+** Enumeration tokens for SPIR-V, in various styles:
+**   C, C++, C++11, JSON, Lua, Python
+** 
+** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+** - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
+** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
+** 
+** Some tokens act like mask values, which can be OR'd together,
+** while others are mutually exclusive.  The mask-like ones have
+** "Mask" in their name, and a parallel enum that has the shift
+** amount (1 << x) for each corresponding enumerant.
+*/
+
+#ifndef spirv_H
+#define spirv_H
+
+typedef unsigned int SpvId;
+
+#define SPV_VERSION 0x10000
+#define SPV_REVISION 4
+
+static const unsigned int SpvMagicNumber = 0x07230203;
+static const unsigned int SpvVersion = 0x00010000;
+static const unsigned int SpvRevision = 4;
+static const unsigned int SpvOpCodeMask = 0xffff;
+static const unsigned int SpvWordCountShift = 16;
+
+typedef enum SpvSourceLanguage_ {
+    SpvSourceLanguageUnknown = 0,
+    SpvSourceLanguageESSL = 1,
+    SpvSourceLanguageGLSL = 2,
+    SpvSourceLanguageOpenCL_C = 3,
+    SpvSourceLanguageOpenCL_CPP = 4,
+} SpvSourceLanguage;
+
+typedef enum SpvExecutionModel_ {
+    SpvExecutionModelVertex = 0,
+    SpvExecutionModelTessellationControl = 1,
+    SpvExecutionModelTessellationEvaluation = 2,
+    SpvExecutionModelGeometry = 3,
+    SpvExecutionModelFragment = 4,
+    SpvExecutionModelGLCompute = 5,
+    SpvExecutionModelKernel = 6,
+} SpvExecutionModel;
+
+typedef enum SpvAddressingModel_ {
+    SpvAddressingModelLogical = 0,
+    SpvAddressingModelPhysical32 = 1,
+    SpvAddressingModelPhysical64 = 2,
+} SpvAddressingModel;
+
+typedef enum SpvMemoryModel_ {
+    SpvMemoryModelSimple = 0,
+    SpvMemoryModelGLSL450 = 1,
+    SpvMemoryModelOpenCL = 2,
+} SpvMemoryModel;
+
+typedef enum SpvExecutionMode_ {
+    SpvExecutionModeInvocations = 0,
+    SpvExecutionModeSpacingEqual = 1,
+    SpvExecutionModeSpacingFractionalEven = 2,
+    SpvExecutionModeSpacingFractionalOdd = 3,
+    SpvExecutionModeVertexOrderCw = 4,
+    SpvExecutionModeVertexOrderCcw = 5,
+    SpvExecutionModePixelCenterInteger = 6,
+    SpvExecutionModeOriginUpperLeft = 7,
+    SpvExecutionModeOriginLowerLeft = 8,
+    SpvExecutionModeEarlyFragmentTests = 9,
+    SpvExecutionModePointMode = 10,
+    SpvExecutionModeXfb = 11,
+    SpvExecutionModeDepthReplacing = 12,
+    SpvExecutionModeDepthGreater = 14,
+    SpvExecutionModeDepthLess = 15,
+    SpvExecutionModeDepthUnchanged = 16,
+    SpvExecutionModeLocalSize = 17,
+    SpvExecutionModeLocalSizeHint = 18,
+    SpvExecutionModeInputPoints = 19,
+    SpvExecutionModeInputLines = 20,
+    SpvExecutionModeInputLinesAdjacency = 21,
+    SpvExecutionModeTriangles = 22,
+    SpvExecutionModeInputTrianglesAdjacency = 23,
+    SpvExecutionModeQuads = 24,
+    SpvExecutionModeIsolines = 25,
+    SpvExecutionModeOutputVertices = 26,
+    SpvExecutionModeOutputPoints = 27,
+    SpvExecutionModeOutputLineStrip = 28,
+    SpvExecutionModeOutputTriangleStrip = 29,
+    SpvExecutionModeVecTypeHint = 30,
+    SpvExecutionModeContractionOff = 31,
+} SpvExecutionMode;
+
+typedef enum SpvStorageClass_ {
+    SpvStorageClassUniformConstant = 0,
+    SpvStorageClassInput = 1,
+    SpvStorageClassUniform = 2,
+    SpvStorageClassOutput = 3,
+    SpvStorageClassWorkgroup = 4,
+    SpvStorageClassCrossWorkgroup = 5,
+    SpvStorageClassPrivate = 6,
+    SpvStorageClassFunction = 7,
+    SpvStorageClassGeneric = 8,
+    SpvStorageClassPushConstant = 9,
+    SpvStorageClassAtomicCounter = 10,
+    SpvStorageClassImage = 11,
+} SpvStorageClass;
+
+typedef enum SpvDim_ {
+    SpvDim1D = 0,
+    SpvDim2D = 1,
+    SpvDim3D = 2,
+    SpvDimCube = 3,
+    SpvDimRect = 4,
+    SpvDimBuffer = 5,
+    SpvDimSubpassData = 6,
+} SpvDim;
+
+typedef enum SpvSamplerAddressingMode_ {
+    SpvSamplerAddressingModeNone = 0,
+    SpvSamplerAddressingModeClampToEdge = 1,
+    SpvSamplerAddressingModeClamp = 2,
+    SpvSamplerAddressingModeRepeat = 3,
+    SpvSamplerAddressingModeRepeatMirrored = 4,
+} SpvSamplerAddressingMode;
+
+typedef enum SpvSamplerFilterMode_ {
+    SpvSamplerFilterModeNearest = 0,
+    SpvSamplerFilterModeLinear = 1,
+} SpvSamplerFilterMode;
+
+typedef enum SpvImageFormat_ {
+    SpvImageFormatUnknown = 0,
+    SpvImageFormatRgba32f = 1,
+    SpvImageFormatRgba16f = 2,
+    SpvImageFormatR32f = 3,
+    SpvImageFormatRgba8 = 4,
+    SpvImageFormatRgba8Snorm = 5,
+    SpvImageFormatRg32f = 6,
+    SpvImageFormatRg16f = 7,
+    SpvImageFormatR11fG11fB10f = 8,
+    SpvImageFormatR16f = 9,
+    SpvImageFormatRgba16 = 10,
+    SpvImageFormatRgb10A2 = 11,
+    SpvImageFormatRg16 = 12,
+    SpvImageFormatRg8 = 13,
+    SpvImageFormatR16 = 14,
+    SpvImageFormatR8 = 15,
+    SpvImageFormatRgba16Snorm = 16,
+    SpvImageFormatRg16Snorm = 17,
+    SpvImageFormatRg8Snorm = 18,
+    SpvImageFormatR16Snorm = 19,
+    SpvImageFormatR8Snorm = 20,
+    SpvImageFormatRgba32i = 21,
+    SpvImageFormatRgba16i = 22,
+    SpvImageFormatRgba8i = 23,
+    SpvImageFormatR32i = 24,
+    SpvImageFormatRg32i = 25,
+    SpvImageFormatRg16i = 26,
+    SpvImageFormatRg8i = 27,
+    SpvImageFormatR16i = 28,
+    SpvImageFormatR8i = 29,
+    SpvImageFormatRgba32ui = 30,
+    SpvImageFormatRgba16ui = 31,
+    SpvImageFormatRgba8ui = 32,
+    SpvImageFormatR32ui = 33,
+    SpvImageFormatRgb10a2ui = 34,
+    SpvImageFormatRg32ui = 35,
+    SpvImageFormatRg16ui = 36,
+    SpvImageFormatRg8ui = 37,
+    SpvImageFormatR16ui = 38,
+    SpvImageFormatR8ui = 39,
+} SpvImageFormat;
+
+typedef enum SpvImageChannelOrder_ {
+    SpvImageChannelOrderR = 0,
+    SpvImageChannelOrderA = 1,
+    SpvImageChannelOrderRG = 2,
+    SpvImageChannelOrderRA = 3,
+    SpvImageChannelOrderRGB = 4,
+    SpvImageChannelOrderRGBA = 5,
+    SpvImageChannelOrderBGRA = 6,
+    SpvImageChannelOrderARGB = 7,
+    SpvImageChannelOrderIntensity = 8,
+    SpvImageChannelOrderLuminance = 9,
+    SpvImageChannelOrderRx = 10,
+    SpvImageChannelOrderRGx = 11,
+    SpvImageChannelOrderRGBx = 12,
+    SpvImageChannelOrderDepth = 13,
+    SpvImageChannelOrderDepthStencil = 14,
+    SpvImageChannelOrdersRGB = 15,
+    SpvImageChannelOrdersRGBx = 16,
+    SpvImageChannelOrdersRGBA = 17,
+    SpvImageChannelOrdersBGRA = 18,
+} SpvImageChannelOrder;
+
+typedef enum SpvImageChannelDataType_ {
+    SpvImageChannelDataTypeSnormInt8 = 0,
+    SpvImageChannelDataTypeSnormInt16 = 1,
+    SpvImageChannelDataTypeUnormInt8 = 2,
+    SpvImageChannelDataTypeUnormInt16 = 3,
+    SpvImageChannelDataTypeUnormShort565 = 4,
+    SpvImageChannelDataTypeUnormShort555 = 5,
+    SpvImageChannelDataTypeUnormInt101010 = 6,
+    SpvImageChannelDataTypeSignedInt8 = 7,
+    SpvImageChannelDataTypeSignedInt16 = 8,
+    SpvImageChannelDataTypeSignedInt32 = 9,
+    SpvImageChannelDataTypeUnsignedInt8 = 10,
+    SpvImageChannelDataTypeUnsignedInt16 = 11,
+    SpvImageChannelDataTypeUnsignedInt32 = 12,
+    SpvImageChannelDataTypeHalfFloat = 13,
+    SpvImageChannelDataTypeFloat = 14,
+    SpvImageChannelDataTypeUnormInt24 = 15,
+    SpvImageChannelDataTypeUnormInt101010_2 = 16,
+} SpvImageChannelDataType;
+
+typedef enum SpvImageOperandsShift_ {
+    SpvImageOperandsBiasShift = 0,
+    SpvImageOperandsLodShift = 1,
+    SpvImageOperandsGradShift = 2,
+    SpvImageOperandsConstOffsetShift = 3,
+    SpvImageOperandsOffsetShift = 4,
+    SpvImageOperandsConstOffsetsShift = 5,
+    SpvImageOperandsSampleShift = 6,
+    SpvImageOperandsMinLodShift = 7,
+} SpvImageOperandsShift;
+
+typedef enum SpvImageOperandsMask_ {
+    SpvImageOperandsMaskNone = 0,
+    SpvImageOperandsBiasMask = 0x00000001,
+    SpvImageOperandsLodMask = 0x00000002,
+    SpvImageOperandsGradMask = 0x00000004,
+    SpvImageOperandsConstOffsetMask = 0x00000008,
+    SpvImageOperandsOffsetMask = 0x00000010,
+    SpvImageOperandsConstOffsetsMask = 0x00000020,
+    SpvImageOperandsSampleMask = 0x00000040,
+    SpvImageOperandsMinLodMask = 0x00000080,
+} SpvImageOperandsMask;
+
+typedef enum SpvFPFastMathModeShift_ {
+    SpvFPFastMathModeNotNaNShift = 0,
+    SpvFPFastMathModeNotInfShift = 1,
+    SpvFPFastMathModeNSZShift = 2,
+    SpvFPFastMathModeAllowRecipShift = 3,
+    SpvFPFastMathModeFastShift = 4,
+} SpvFPFastMathModeShift;
+
+typedef enum SpvFPFastMathModeMask_ {
+    SpvFPFastMathModeMaskNone = 0,
+    SpvFPFastMathModeNotNaNMask = 0x00000001,
+    SpvFPFastMathModeNotInfMask = 0x00000002,
+    SpvFPFastMathModeNSZMask = 0x00000004,
+    SpvFPFastMathModeAllowRecipMask = 0x00000008,
+    SpvFPFastMathModeFastMask = 0x00000010,
+} SpvFPFastMathModeMask;
+
+typedef enum SpvFPRoundingMode_ {
+    SpvFPRoundingModeRTE = 0,
+    SpvFPRoundingModeRTZ = 1,
+    SpvFPRoundingModeRTP = 2,
+    SpvFPRoundingModeRTN = 3,
+} SpvFPRoundingMode;
+
+typedef enum SpvLinkageType_ {
+    SpvLinkageTypeExport = 0,
+    SpvLinkageTypeImport = 1,
+} SpvLinkageType;
+
+typedef enum SpvAccessQualifier_ {
+    SpvAccessQualifierReadOnly = 0,
+    SpvAccessQualifierWriteOnly = 1,
+    SpvAccessQualifierReadWrite = 2,
+} SpvAccessQualifier;
+
+typedef enum SpvFunctionParameterAttribute_ {
+    SpvFunctionParameterAttributeZext = 0,
+    SpvFunctionParameterAttributeSext = 1,
+    SpvFunctionParameterAttributeByVal = 2,
+    SpvFunctionParameterAttributeSret = 3,
+    SpvFunctionParameterAttributeNoAlias = 4,
+    SpvFunctionParameterAttributeNoCapture = 5,
+    SpvFunctionParameterAttributeNoWrite = 6,
+    SpvFunctionParameterAttributeNoReadWrite = 7,
+} SpvFunctionParameterAttribute;
+
+typedef enum SpvDecoration_ {
+    SpvDecorationRelaxedPrecision = 0,
+    SpvDecorationSpecId = 1,
+    SpvDecorationBlock = 2,
+    SpvDecorationBufferBlock = 3,
+    SpvDecorationRowMajor = 4,
+    SpvDecorationColMajor = 5,
+    SpvDecorationArrayStride = 6,
+    SpvDecorationMatrixStride = 7,
+    SpvDecorationGLSLShared = 8,
+    SpvDecorationGLSLPacked = 9,
+    SpvDecorationCPacked = 10,
+    SpvDecorationBuiltIn = 11,
+    SpvDecorationNoPerspective = 13,
+    SpvDecorationFlat = 14,
+    SpvDecorationPatch = 15,
+    SpvDecorationCentroid = 16,
+    SpvDecorationSample = 17,
+    SpvDecorationInvariant = 18,
+    SpvDecorationRestrict = 19,
+    SpvDecorationAliased = 20,
+    SpvDecorationVolatile = 21,
+    SpvDecorationConstant = 22,
+    SpvDecorationCoherent = 23,
+    SpvDecorationNonWritable = 24,
+    SpvDecorationNonReadable = 25,
+    SpvDecorationUniform = 26,
+    SpvDecorationSaturatedConversion = 28,
+    SpvDecorationStream = 29,
+    SpvDecorationLocation = 30,
+    SpvDecorationComponent = 31,
+    SpvDecorationIndex = 32,
+    SpvDecorationBinding = 33,
+    SpvDecorationDescriptorSet = 34,
+    SpvDecorationOffset = 35,
+    SpvDecorationXfbBuffer = 36,
+    SpvDecorationXfbStride = 37,
+    SpvDecorationFuncParamAttr = 38,
+    SpvDecorationFPRoundingMode = 39,
+    SpvDecorationFPFastMathMode = 40,
+    SpvDecorationLinkageAttributes = 41,
+    SpvDecorationNoContraction = 42,
+    SpvDecorationInputAttachmentIndex = 43,
+    SpvDecorationAlignment = 44,
+} SpvDecoration;
+
+typedef enum SpvBuiltIn_ {
+    SpvBuiltInPosition = 0,
+    SpvBuiltInPointSize = 1,
+    SpvBuiltInClipDistance = 3,
+    SpvBuiltInCullDistance = 4,
+    SpvBuiltInVertexId = 5,
+    SpvBuiltInInstanceId = 6,
+    SpvBuiltInPrimitiveId = 7,
+    SpvBuiltInInvocationId = 8,
+    SpvBuiltInLayer = 9,
+    SpvBuiltInViewportIndex = 10,
+    SpvBuiltInTessLevelOuter = 11,
+    SpvBuiltInTessLevelInner = 12,
+    SpvBuiltInTessCoord = 13,
+    SpvBuiltInPatchVertices = 14,
+    SpvBuiltInFragCoord = 15,
+    SpvBuiltInPointCoord = 16,
+    SpvBuiltInFrontFacing = 17,
+    SpvBuiltInSampleId = 18,
+    SpvBuiltInSamplePosition = 19,
+    SpvBuiltInSampleMask = 20,
+    SpvBuiltInFragDepth = 22,
+    SpvBuiltInHelperInvocation = 23,
+    SpvBuiltInNumWorkgroups = 24,
+    SpvBuiltInWorkgroupSize = 25,
+    SpvBuiltInWorkgroupId = 26,
+    SpvBuiltInLocalInvocationId = 27,
+    SpvBuiltInGlobalInvocationId = 28,
+    SpvBuiltInLocalInvocationIndex = 29,
+    SpvBuiltInWorkDim = 30,
+    SpvBuiltInGlobalSize = 31,
+    SpvBuiltInEnqueuedWorkgroupSize = 32,
+    SpvBuiltInGlobalOffset = 33,
+    SpvBuiltInGlobalLinearId = 34,
+    SpvBuiltInSubgroupSize = 36,
+    SpvBuiltInSubgroupMaxSize = 37,
+    SpvBuiltInNumSubgroups = 38,
+    SpvBuiltInNumEnqueuedSubgroups = 39,
+    SpvBuiltInSubgroupId = 40,
+    SpvBuiltInSubgroupLocalInvocationId = 41,
+    SpvBuiltInVertexIndex = 42,
+    SpvBuiltInInstanceIndex = 43,
+} SpvBuiltIn;
+
+typedef enum SpvSelectionControlShift_ {
+    SpvSelectionControlFlattenShift = 0,
+    SpvSelectionControlDontFlattenShift = 1,
+} SpvSelectionControlShift;
+
+typedef enum SpvSelectionControlMask_ {
+    SpvSelectionControlMaskNone = 0,
+    SpvSelectionControlFlattenMask = 0x00000001,
+    SpvSelectionControlDontFlattenMask = 0x00000002,
+} SpvSelectionControlMask;
+
+typedef enum SpvLoopControlShift_ {
+    SpvLoopControlUnrollShift = 0,
+    SpvLoopControlDontUnrollShift = 1,
+} SpvLoopControlShift;
+
+typedef enum SpvLoopControlMask_ {
+    SpvLoopControlMaskNone = 0,
+    SpvLoopControlUnrollMask = 0x00000001,
+    SpvLoopControlDontUnrollMask = 0x00000002,
+} SpvLoopControlMask;
+
+typedef enum SpvFunctionControlShift_ {
+    SpvFunctionControlInlineShift = 0,
+    SpvFunctionControlDontInlineShift = 1,
+    SpvFunctionControlPureShift = 2,
+    SpvFunctionControlConstShift = 3,
+} SpvFunctionControlShift;
+
+typedef enum SpvFunctionControlMask_ {
+    SpvFunctionControlMaskNone = 0,
+    SpvFunctionControlInlineMask = 0x00000001,
+    SpvFunctionControlDontInlineMask = 0x00000002,
+    SpvFunctionControlPureMask = 0x00000004,
+    SpvFunctionControlConstMask = 0x00000008,
+} SpvFunctionControlMask;
+
+typedef enum SpvMemorySemanticsShift_ {
+    SpvMemorySemanticsAcquireShift = 1,
+    SpvMemorySemanticsReleaseShift = 2,
+    SpvMemorySemanticsAcquireReleaseShift = 3,
+    SpvMemorySemanticsSequentiallyConsistentShift = 4,
+    SpvMemorySemanticsUniformMemoryShift = 6,
+    SpvMemorySemanticsSubgroupMemoryShift = 7,
+    SpvMemorySemanticsWorkgroupMemoryShift = 8,
+    SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
+    SpvMemorySemanticsAtomicCounterMemoryShift = 10,
+    SpvMemorySemanticsImageMemoryShift = 11,
+} SpvMemorySemanticsShift;
+
+typedef enum SpvMemorySemanticsMask_ {
+    SpvMemorySemanticsMaskNone = 0,
+    SpvMemorySemanticsAcquireMask = 0x00000002,
+    SpvMemorySemanticsReleaseMask = 0x00000004,
+    SpvMemorySemanticsAcquireReleaseMask = 0x00000008,
+    SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
+    SpvMemorySemanticsUniformMemoryMask = 0x00000040,
+    SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
+    SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
+    SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
+    SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
+    SpvMemorySemanticsImageMemoryMask = 0x00000800,
+} SpvMemorySemanticsMask;
+
+typedef enum SpvMemoryAccessShift_ {
+    SpvMemoryAccessVolatileShift = 0,
+    SpvMemoryAccessAlignedShift = 1,
+    SpvMemoryAccessNontemporalShift = 2,
+} SpvMemoryAccessShift;
+
+typedef enum SpvMemoryAccessMask_ {
+    SpvMemoryAccessMaskNone = 0,
+    SpvMemoryAccessVolatileMask = 0x00000001,
+    SpvMemoryAccessAlignedMask = 0x00000002,
+    SpvMemoryAccessNontemporalMask = 0x00000004,
+} SpvMemoryAccessMask;
+
+typedef enum SpvScope_ {
+    SpvScopeCrossDevice = 0,
+    SpvScopeDevice = 1,
+    SpvScopeWorkgroup = 2,
+    SpvScopeSubgroup = 3,
+    SpvScopeInvocation = 4,
+} SpvScope;
+
+typedef enum SpvGroupOperation_ {
+    SpvGroupOperationReduce = 0,
+    SpvGroupOperationInclusiveScan = 1,
+    SpvGroupOperationExclusiveScan = 2,
+} SpvGroupOperation;
+
+typedef enum SpvKernelEnqueueFlags_ {
+    SpvKernelEnqueueFlagsNoWait = 0,
+    SpvKernelEnqueueFlagsWaitKernel = 1,
+    SpvKernelEnqueueFlagsWaitWorkGroup = 2,
+} SpvKernelEnqueueFlags;
+
+typedef enum SpvKernelProfilingInfoShift_ {
+    SpvKernelProfilingInfoCmdExecTimeShift = 0,
+} SpvKernelProfilingInfoShift;
+
+typedef enum SpvKernelProfilingInfoMask_ {
+    SpvKernelProfilingInfoMaskNone = 0,
+    SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,
+} SpvKernelProfilingInfoMask;
+
+typedef enum SpvCapability_ {
+    SpvCapabilityMatrix = 0,
+    SpvCapabilityShader = 1,
+    SpvCapabilityGeometry = 2,
+    SpvCapabilityTessellation = 3,
+    SpvCapabilityAddresses = 4,
+    SpvCapabilityLinkage = 5,
+    SpvCapabilityKernel = 6,
+    SpvCapabilityVector16 = 7,
+    SpvCapabilityFloat16Buffer = 8,
+    SpvCapabilityFloat16 = 9,
+    SpvCapabilityFloat64 = 10,
+    SpvCapabilityInt64 = 11,
+    SpvCapabilityInt64Atomics = 12,
+    SpvCapabilityImageBasic = 13,
+    SpvCapabilityImageReadWrite = 14,
+    SpvCapabilityImageMipmap = 15,
+    SpvCapabilityPipes = 17,
+    SpvCapabilityGroups = 18,
+    SpvCapabilityDeviceEnqueue = 19,
+    SpvCapabilityLiteralSampler = 20,
+    SpvCapabilityAtomicStorage = 21,
+    SpvCapabilityInt16 = 22,
+    SpvCapabilityTessellationPointSize = 23,
+    SpvCapabilityGeometryPointSize = 24,
+    SpvCapabilityImageGatherExtended = 25,
+    SpvCapabilityStorageImageMultisample = 27,
+    SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
+    SpvCapabilitySampledImageArrayDynamicIndexing = 29,
+    SpvCapabilityStorageBufferArrayDynamicIndexing = 30,
+    SpvCapabilityStorageImageArrayDynamicIndexing = 31,
+    SpvCapabilityClipDistance = 32,
+    SpvCapabilityCullDistance = 33,
+    SpvCapabilityImageCubeArray = 34,
+    SpvCapabilitySampleRateShading = 35,
+    SpvCapabilityImageRect = 36,
+    SpvCapabilitySampledRect = 37,
+    SpvCapabilityGenericPointer = 38,
+    SpvCapabilityInt8 = 39,
+    SpvCapabilityInputAttachment = 40,
+    SpvCapabilitySparseResidency = 41,
+    SpvCapabilityMinLod = 42,
+    SpvCapabilitySampled1D = 43,
+    SpvCapabilityImage1D = 44,
+    SpvCapabilitySampledCubeArray = 45,
+    SpvCapabilitySampledBuffer = 46,
+    SpvCapabilityImageBuffer = 47,
+    SpvCapabilityImageMSArray = 48,
+    SpvCapabilityStorageImageExtendedFormats = 49,
+    SpvCapabilityImageQuery = 50,
+    SpvCapabilityDerivativeControl = 51,
+    SpvCapabilityInterpolationFunction = 52,
+    SpvCapabilityTransformFeedback = 53,
+    SpvCapabilityGeometryStreams = 54,
+    SpvCapabilityStorageImageReadWithoutFormat = 55,
+    SpvCapabilityStorageImageWriteWithoutFormat = 56,
+    SpvCapabilityMultiViewport = 57,
+} SpvCapability;
+
+typedef enum SpvOp_ {
+    SpvOpNop = 0,
+    SpvOpUndef = 1,
+    SpvOpSourceContinued = 2,
+    SpvOpSource = 3,
+    SpvOpSourceExtension = 4,
+    SpvOpName = 5,
+    SpvOpMemberName = 6,
+    SpvOpString = 7,
+    SpvOpLine = 8,
+    SpvOpExtension = 10,
+    SpvOpExtInstImport = 11,
+    SpvOpExtInst = 12,
+    SpvOpMemoryModel = 14,
+    SpvOpEntryPoint = 15,
+    SpvOpExecutionMode = 16,
+    SpvOpCapability = 17,
+    SpvOpTypeVoid = 19,
+    SpvOpTypeBool = 20,
+    SpvOpTypeInt = 21,
+    SpvOpTypeFloat = 22,
+    SpvOpTypeVector = 23,
+    SpvOpTypeMatrix = 24,
+    SpvOpTypeImage = 25,
+    SpvOpTypeSampler = 26,
+    SpvOpTypeSampledImage = 27,
+    SpvOpTypeArray = 28,
+    SpvOpTypeRuntimeArray = 29,
+    SpvOpTypeStruct = 30,
+    SpvOpTypeOpaque = 31,
+    SpvOpTypePointer = 32,
+    SpvOpTypeFunction = 33,
+    SpvOpTypeEvent = 34,
+    SpvOpTypeDeviceEvent = 35,
+    SpvOpTypeReserveId = 36,
+    SpvOpTypeQueue = 37,
+    SpvOpTypePipe = 38,
+    SpvOpTypeForwardPointer = 39,
+    SpvOpConstantTrue = 41,
+    SpvOpConstantFalse = 42,
+    SpvOpConstant = 43,
+    SpvOpConstantComposite = 44,
+    SpvOpConstantSampler = 45,
+    SpvOpConstantNull = 46,
+    SpvOpSpecConstantTrue = 48,
+    SpvOpSpecConstantFalse = 49,
+    SpvOpSpecConstant = 50,
+    SpvOpSpecConstantComposite = 51,
+    SpvOpSpecConstantOp = 52,
+    SpvOpFunction = 54,
+    SpvOpFunctionParameter = 55,
+    SpvOpFunctionEnd = 56,
+    SpvOpFunctionCall = 57,
+    SpvOpVariable = 59,
+    SpvOpImageTexelPointer = 60,
+    SpvOpLoad = 61,
+    SpvOpStore = 62,
+    SpvOpCopyMemory = 63,
+    SpvOpCopyMemorySized = 64,
+    SpvOpAccessChain = 65,
+    SpvOpInBoundsAccessChain = 66,
+    SpvOpPtrAccessChain = 67,
+    SpvOpArrayLength = 68,
+    SpvOpGenericPtrMemSemantics = 69,
+    SpvOpInBoundsPtrAccessChain = 70,
+    SpvOpDecorate = 71,
+    SpvOpMemberDecorate = 72,
+    SpvOpDecorationGroup = 73,
+    SpvOpGroupDecorate = 74,
+    SpvOpGroupMemberDecorate = 75,
+    SpvOpVectorExtractDynamic = 77,
+    SpvOpVectorInsertDynamic = 78,
+    SpvOpVectorShuffle = 79,
+    SpvOpCompositeConstruct = 80,
+    SpvOpCompositeExtract = 81,
+    SpvOpCompositeInsert = 82,
+    SpvOpCopyObject = 83,
+    SpvOpTranspose = 84,
+    SpvOpSampledImage = 86,
+    SpvOpImageSampleImplicitLod = 87,
+    SpvOpImageSampleExplicitLod = 88,
+    SpvOpImageSampleDrefImplicitLod = 89,
+    SpvOpImageSampleDrefExplicitLod = 90,
+    SpvOpImageSampleProjImplicitLod = 91,
+    SpvOpImageSampleProjExplicitLod = 92,
+    SpvOpImageSampleProjDrefImplicitLod = 93,
+    SpvOpImageSampleProjDrefExplicitLod = 94,
+    SpvOpImageFetch = 95,
+    SpvOpImageGather = 96,
+    SpvOpImageDrefGather = 97,
+    SpvOpImageRead = 98,
+    SpvOpImageWrite = 99,
+    SpvOpImage = 100,
+    SpvOpImageQueryFormat = 101,
+    SpvOpImageQueryOrder = 102,
+    SpvOpImageQuerySizeLod = 103,
+    SpvOpImageQuerySize = 104,
+    SpvOpImageQueryLod = 105,
+    SpvOpImageQueryLevels = 106,
+    SpvOpImageQuerySamples = 107,
+    SpvOpConvertFToU = 109,
+    SpvOpConvertFToS = 110,
+    SpvOpConvertSToF = 111,
+    SpvOpConvertUToF = 112,
+    SpvOpUConvert = 113,
+    SpvOpSConvert = 114,
+    SpvOpFConvert = 115,
+    SpvOpQuantizeToF16 = 116,
+    SpvOpConvertPtrToU = 117,
+    SpvOpSatConvertSToU = 118,
+    SpvOpSatConvertUToS = 119,
+    SpvOpConvertUToPtr = 120,
+    SpvOpPtrCastToGeneric = 121,
+    SpvOpGenericCastToPtr = 122,
+    SpvOpGenericCastToPtrExplicit = 123,
+    SpvOpBitcast = 124,
+    SpvOpSNegate = 126,
+    SpvOpFNegate = 127,
+    SpvOpIAdd = 128,
+    SpvOpFAdd = 129,
+    SpvOpISub = 130,
+    SpvOpFSub = 131,
+    SpvOpIMul = 132,
+    SpvOpFMul = 133,
+    SpvOpUDiv = 134,
+    SpvOpSDiv = 135,
+    SpvOpFDiv = 136,
+    SpvOpUMod = 137,
+    SpvOpSRem = 138,
+    SpvOpSMod = 139,
+    SpvOpFRem = 140,
+    SpvOpFMod = 141,
+    SpvOpVectorTimesScalar = 142,
+    SpvOpMatrixTimesScalar = 143,
+    SpvOpVectorTimesMatrix = 144,
+    SpvOpMatrixTimesVector = 145,
+    SpvOpMatrixTimesMatrix = 146,
+    SpvOpOuterProduct = 147,
+    SpvOpDot = 148,
+    SpvOpIAddCarry = 149,
+    SpvOpISubBorrow = 150,
+    SpvOpUMulExtended = 151,
+    SpvOpSMulExtended = 152,
+    SpvOpAny = 154,
+    SpvOpAll = 155,
+    SpvOpIsNan = 156,
+    SpvOpIsInf = 157,
+    SpvOpIsFinite = 158,
+    SpvOpIsNormal = 159,
+    SpvOpSignBitSet = 160,
+    SpvOpLessOrGreater = 161,
+    SpvOpOrdered = 162,
+    SpvOpUnordered = 163,
+    SpvOpLogicalEqual = 164,
+    SpvOpLogicalNotEqual = 165,
+    SpvOpLogicalOr = 166,
+    SpvOpLogicalAnd = 167,
+    SpvOpLogicalNot = 168,
+    SpvOpSelect = 169,
+    SpvOpIEqual = 170,
+    SpvOpINotEqual = 171,
+    SpvOpUGreaterThan = 172,
+    SpvOpSGreaterThan = 173,
+    SpvOpUGreaterThanEqual = 174,
+    SpvOpSGreaterThanEqual = 175,
+    SpvOpULessThan = 176,
+    SpvOpSLessThan = 177,
+    SpvOpULessThanEqual = 178,
+    SpvOpSLessThanEqual = 179,
+    SpvOpFOrdEqual = 180,
+    SpvOpFUnordEqual = 181,
+    SpvOpFOrdNotEqual = 182,
+    SpvOpFUnordNotEqual = 183,
+    SpvOpFOrdLessThan = 184,
+    SpvOpFUnordLessThan = 185,
+    SpvOpFOrdGreaterThan = 186,
+    SpvOpFUnordGreaterThan = 187,
+    SpvOpFOrdLessThanEqual = 188,
+    SpvOpFUnordLessThanEqual = 189,
+    SpvOpFOrdGreaterThanEqual = 190,
+    SpvOpFUnordGreaterThanEqual = 191,
+    SpvOpShiftRightLogical = 194,
+    SpvOpShiftRightArithmetic = 195,
+    SpvOpShiftLeftLogical = 196,
+    SpvOpBitwiseOr = 197,
+    SpvOpBitwiseXor = 198,
+    SpvOpBitwiseAnd = 199,
+    SpvOpNot = 200,
+    SpvOpBitFieldInsert = 201,
+    SpvOpBitFieldSExtract = 202,
+    SpvOpBitFieldUExtract = 203,
+    SpvOpBitReverse = 204,
+    SpvOpBitCount = 205,
+    SpvOpDPdx = 207,
+    SpvOpDPdy = 208,
+    SpvOpFwidth = 209,
+    SpvOpDPdxFine = 210,
+    SpvOpDPdyFine = 211,
+    SpvOpFwidthFine = 212,
+    SpvOpDPdxCoarse = 213,
+    SpvOpDPdyCoarse = 214,
+    SpvOpFwidthCoarse = 215,
+    SpvOpEmitVertex = 218,
+    SpvOpEndPrimitive = 219,
+    SpvOpEmitStreamVertex = 220,
+    SpvOpEndStreamPrimitive = 221,
+    SpvOpControlBarrier = 224,
+    SpvOpMemoryBarrier = 225,
+    SpvOpAtomicLoad = 227,
+    SpvOpAtomicStore = 228,
+    SpvOpAtomicExchange = 229,
+    SpvOpAtomicCompareExchange = 230,
+    SpvOpAtomicCompareExchangeWeak = 231,
+    SpvOpAtomicIIncrement = 232,
+    SpvOpAtomicIDecrement = 233,
+    SpvOpAtomicIAdd = 234,
+    SpvOpAtomicISub = 235,
+    SpvOpAtomicSMin = 236,
+    SpvOpAtomicUMin = 237,
+    SpvOpAtomicSMax = 238,
+    SpvOpAtomicUMax = 239,
+    SpvOpAtomicAnd = 240,
+    SpvOpAtomicOr = 241,
+    SpvOpAtomicXor = 242,
+    SpvOpPhi = 245,
+    SpvOpLoopMerge = 246,
+    SpvOpSelectionMerge = 247,
+    SpvOpLabel = 248,
+    SpvOpBranch = 249,
+    SpvOpBranchConditional = 250,
+    SpvOpSwitch = 251,
+    SpvOpKill = 252,
+    SpvOpReturn = 253,
+    SpvOpReturnValue = 254,
+    SpvOpUnreachable = 255,
+    SpvOpLifetimeStart = 256,
+    SpvOpLifetimeStop = 257,
+    SpvOpGroupAsyncCopy = 259,
+    SpvOpGroupWaitEvents = 260,
+    SpvOpGroupAll = 261,
+    SpvOpGroupAny = 262,
+    SpvOpGroupBroadcast = 263,
+    SpvOpGroupIAdd = 264,
+    SpvOpGroupFAdd = 265,
+    SpvOpGroupFMin = 266,
+    SpvOpGroupUMin = 267,
+    SpvOpGroupSMin = 268,
+    SpvOpGroupFMax = 269,
+    SpvOpGroupUMax = 270,
+    SpvOpGroupSMax = 271,
+    SpvOpReadPipe = 274,
+    SpvOpWritePipe = 275,
+    SpvOpReservedReadPipe = 276,
+    SpvOpReservedWritePipe = 277,
+    SpvOpReserveReadPipePackets = 278,
+    SpvOpReserveWritePipePackets = 279,
+    SpvOpCommitReadPipe = 280,
+    SpvOpCommitWritePipe = 281,
+    SpvOpIsValidReserveId = 282,
+    SpvOpGetNumPipePackets = 283,
+    SpvOpGetMaxPipePackets = 284,
+    SpvOpGroupReserveReadPipePackets = 285,
+    SpvOpGroupReserveWritePipePackets = 286,
+    SpvOpGroupCommitReadPipe = 287,
+    SpvOpGroupCommitWritePipe = 288,
+    SpvOpEnqueueMarker = 291,
+    SpvOpEnqueueKernel = 292,
+    SpvOpGetKernelNDrangeSubGroupCount = 293,
+    SpvOpGetKernelNDrangeMaxSubGroupSize = 294,
+    SpvOpGetKernelWorkGroupSize = 295,
+    SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296,
+    SpvOpRetainEvent = 297,
+    SpvOpReleaseEvent = 298,
+    SpvOpCreateUserEvent = 299,
+    SpvOpIsValidEvent = 300,
+    SpvOpSetUserEventStatus = 301,
+    SpvOpCaptureEventProfilingInfo = 302,
+    SpvOpGetDefaultQueue = 303,
+    SpvOpBuildNDRange = 304,
+    SpvOpImageSparseSampleImplicitLod = 305,
+    SpvOpImageSparseSampleExplicitLod = 306,
+    SpvOpImageSparseSampleDrefImplicitLod = 307,
+    SpvOpImageSparseSampleDrefExplicitLod = 308,
+    SpvOpImageSparseSampleProjImplicitLod = 309,
+    SpvOpImageSparseSampleProjExplicitLod = 310,
+    SpvOpImageSparseSampleProjDrefImplicitLod = 311,
+    SpvOpImageSparseSampleProjDrefExplicitLod = 312,
+    SpvOpImageSparseFetch = 313,
+    SpvOpImageSparseGather = 314,
+    SpvOpImageSparseDrefGather = 315,
+    SpvOpImageSparseTexelsResident = 316,
+    SpvOpNoLine = 317,
+    SpvOpAtomicFlagTestAndSet = 318,
+    SpvOpAtomicFlagClear = 319,
+    SpvOpImageSparseRead = 320,
+} SpvOp;
+
+#endif  // #ifndef spirv_H
+
diff --git a/include/spirv/1.0/spirv.hpp b/include/spirv/1.0/spirv.hpp
new file mode 100644 (file)
index 0000000..bf5aba2
--- /dev/null
@@ -0,0 +1,880 @@
+// Copyright (c) 2014-2016 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.
+// 
+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+// 
+// 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 header is automatically generated by the same tool that creates
+// the Binary Section of the SPIR-V specification.
+
+// Enumeration tokens for SPIR-V, in various styles:
+//   C, C++, C++11, JSON, Lua, Python
+// 
+// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
+// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
+// 
+// Some tokens act like mask values, which can be OR'd together,
+// while others are mutually exclusive.  The mask-like ones have
+// "Mask" in their name, and a parallel enum that has the shift
+// amount (1 << x) for each corresponding enumerant.
+
+#ifndef spirv_HPP
+#define spirv_HPP
+
+namespace spv {
+
+typedef unsigned int Id;
+
+#define SPV_VERSION 0x10000
+#define SPV_REVISION 4
+
+static const unsigned int MagicNumber = 0x07230203;
+static const unsigned int Version = 0x00010000;
+static const unsigned int Revision = 4;
+static const unsigned int OpCodeMask = 0xffff;
+static const unsigned int WordCountShift = 16;
+
+enum SourceLanguage {
+    SourceLanguageUnknown = 0,
+    SourceLanguageESSL = 1,
+    SourceLanguageGLSL = 2,
+    SourceLanguageOpenCL_C = 3,
+    SourceLanguageOpenCL_CPP = 4,
+};
+
+enum ExecutionModel {
+    ExecutionModelVertex = 0,
+    ExecutionModelTessellationControl = 1,
+    ExecutionModelTessellationEvaluation = 2,
+    ExecutionModelGeometry = 3,
+    ExecutionModelFragment = 4,
+    ExecutionModelGLCompute = 5,
+    ExecutionModelKernel = 6,
+};
+
+enum AddressingModel {
+    AddressingModelLogical = 0,
+    AddressingModelPhysical32 = 1,
+    AddressingModelPhysical64 = 2,
+};
+
+enum MemoryModel {
+    MemoryModelSimple = 0,
+    MemoryModelGLSL450 = 1,
+    MemoryModelOpenCL = 2,
+};
+
+enum ExecutionMode {
+    ExecutionModeInvocations = 0,
+    ExecutionModeSpacingEqual = 1,
+    ExecutionModeSpacingFractionalEven = 2,
+    ExecutionModeSpacingFractionalOdd = 3,
+    ExecutionModeVertexOrderCw = 4,
+    ExecutionModeVertexOrderCcw = 5,
+    ExecutionModePixelCenterInteger = 6,
+    ExecutionModeOriginUpperLeft = 7,
+    ExecutionModeOriginLowerLeft = 8,
+    ExecutionModeEarlyFragmentTests = 9,
+    ExecutionModePointMode = 10,
+    ExecutionModeXfb = 11,
+    ExecutionModeDepthReplacing = 12,
+    ExecutionModeDepthGreater = 14,
+    ExecutionModeDepthLess = 15,
+    ExecutionModeDepthUnchanged = 16,
+    ExecutionModeLocalSize = 17,
+    ExecutionModeLocalSizeHint = 18,
+    ExecutionModeInputPoints = 19,
+    ExecutionModeInputLines = 20,
+    ExecutionModeInputLinesAdjacency = 21,
+    ExecutionModeTriangles = 22,
+    ExecutionModeInputTrianglesAdjacency = 23,
+    ExecutionModeQuads = 24,
+    ExecutionModeIsolines = 25,
+    ExecutionModeOutputVertices = 26,
+    ExecutionModeOutputPoints = 27,
+    ExecutionModeOutputLineStrip = 28,
+    ExecutionModeOutputTriangleStrip = 29,
+    ExecutionModeVecTypeHint = 30,
+    ExecutionModeContractionOff = 31,
+};
+
+enum StorageClass {
+    StorageClassUniformConstant = 0,
+    StorageClassInput = 1,
+    StorageClassUniform = 2,
+    StorageClassOutput = 3,
+    StorageClassWorkgroup = 4,
+    StorageClassCrossWorkgroup = 5,
+    StorageClassPrivate = 6,
+    StorageClassFunction = 7,
+    StorageClassGeneric = 8,
+    StorageClassPushConstant = 9,
+    StorageClassAtomicCounter = 10,
+    StorageClassImage = 11,
+};
+
+enum Dim {
+    Dim1D = 0,
+    Dim2D = 1,
+    Dim3D = 2,
+    DimCube = 3,
+    DimRect = 4,
+    DimBuffer = 5,
+    DimSubpassData = 6,
+};
+
+enum SamplerAddressingMode {
+    SamplerAddressingModeNone = 0,
+    SamplerAddressingModeClampToEdge = 1,
+    SamplerAddressingModeClamp = 2,
+    SamplerAddressingModeRepeat = 3,
+    SamplerAddressingModeRepeatMirrored = 4,
+};
+
+enum SamplerFilterMode {
+    SamplerFilterModeNearest = 0,
+    SamplerFilterModeLinear = 1,
+};
+
+enum ImageFormat {
+    ImageFormatUnknown = 0,
+    ImageFormatRgba32f = 1,
+    ImageFormatRgba16f = 2,
+    ImageFormatR32f = 3,
+    ImageFormatRgba8 = 4,
+    ImageFormatRgba8Snorm = 5,
+    ImageFormatRg32f = 6,
+    ImageFormatRg16f = 7,
+    ImageFormatR11fG11fB10f = 8,
+    ImageFormatR16f = 9,
+    ImageFormatRgba16 = 10,
+    ImageFormatRgb10A2 = 11,
+    ImageFormatRg16 = 12,
+    ImageFormatRg8 = 13,
+    ImageFormatR16 = 14,
+    ImageFormatR8 = 15,
+    ImageFormatRgba16Snorm = 16,
+    ImageFormatRg16Snorm = 17,
+    ImageFormatRg8Snorm = 18,
+    ImageFormatR16Snorm = 19,
+    ImageFormatR8Snorm = 20,
+    ImageFormatRgba32i = 21,
+    ImageFormatRgba16i = 22,
+    ImageFormatRgba8i = 23,
+    ImageFormatR32i = 24,
+    ImageFormatRg32i = 25,
+    ImageFormatRg16i = 26,
+    ImageFormatRg8i = 27,
+    ImageFormatR16i = 28,
+    ImageFormatR8i = 29,
+    ImageFormatRgba32ui = 30,
+    ImageFormatRgba16ui = 31,
+    ImageFormatRgba8ui = 32,
+    ImageFormatR32ui = 33,
+    ImageFormatRgb10a2ui = 34,
+    ImageFormatRg32ui = 35,
+    ImageFormatRg16ui = 36,
+    ImageFormatRg8ui = 37,
+    ImageFormatR16ui = 38,
+    ImageFormatR8ui = 39,
+};
+
+enum ImageChannelOrder {
+    ImageChannelOrderR = 0,
+    ImageChannelOrderA = 1,
+    ImageChannelOrderRG = 2,
+    ImageChannelOrderRA = 3,
+    ImageChannelOrderRGB = 4,
+    ImageChannelOrderRGBA = 5,
+    ImageChannelOrderBGRA = 6,
+    ImageChannelOrderARGB = 7,
+    ImageChannelOrderIntensity = 8,
+    ImageChannelOrderLuminance = 9,
+    ImageChannelOrderRx = 10,
+    ImageChannelOrderRGx = 11,
+    ImageChannelOrderRGBx = 12,
+    ImageChannelOrderDepth = 13,
+    ImageChannelOrderDepthStencil = 14,
+    ImageChannelOrdersRGB = 15,
+    ImageChannelOrdersRGBx = 16,
+    ImageChannelOrdersRGBA = 17,
+    ImageChannelOrdersBGRA = 18,
+};
+
+enum ImageChannelDataType {
+    ImageChannelDataTypeSnormInt8 = 0,
+    ImageChannelDataTypeSnormInt16 = 1,
+    ImageChannelDataTypeUnormInt8 = 2,
+    ImageChannelDataTypeUnormInt16 = 3,
+    ImageChannelDataTypeUnormShort565 = 4,
+    ImageChannelDataTypeUnormShort555 = 5,
+    ImageChannelDataTypeUnormInt101010 = 6,
+    ImageChannelDataTypeSignedInt8 = 7,
+    ImageChannelDataTypeSignedInt16 = 8,
+    ImageChannelDataTypeSignedInt32 = 9,
+    ImageChannelDataTypeUnsignedInt8 = 10,
+    ImageChannelDataTypeUnsignedInt16 = 11,
+    ImageChannelDataTypeUnsignedInt32 = 12,
+    ImageChannelDataTypeHalfFloat = 13,
+    ImageChannelDataTypeFloat = 14,
+    ImageChannelDataTypeUnormInt24 = 15,
+    ImageChannelDataTypeUnormInt101010_2 = 16,
+};
+
+enum ImageOperandsShift {
+    ImageOperandsBiasShift = 0,
+    ImageOperandsLodShift = 1,
+    ImageOperandsGradShift = 2,
+    ImageOperandsConstOffsetShift = 3,
+    ImageOperandsOffsetShift = 4,
+    ImageOperandsConstOffsetsShift = 5,
+    ImageOperandsSampleShift = 6,
+    ImageOperandsMinLodShift = 7,
+};
+
+enum ImageOperandsMask {
+    ImageOperandsMaskNone = 0,
+    ImageOperandsBiasMask = 0x00000001,
+    ImageOperandsLodMask = 0x00000002,
+    ImageOperandsGradMask = 0x00000004,
+    ImageOperandsConstOffsetMask = 0x00000008,
+    ImageOperandsOffsetMask = 0x00000010,
+    ImageOperandsConstOffsetsMask = 0x00000020,
+    ImageOperandsSampleMask = 0x00000040,
+    ImageOperandsMinLodMask = 0x00000080,
+};
+
+enum FPFastMathModeShift {
+    FPFastMathModeNotNaNShift = 0,
+    FPFastMathModeNotInfShift = 1,
+    FPFastMathModeNSZShift = 2,
+    FPFastMathModeAllowRecipShift = 3,
+    FPFastMathModeFastShift = 4,
+};
+
+enum FPFastMathModeMask {
+    FPFastMathModeMaskNone = 0,
+    FPFastMathModeNotNaNMask = 0x00000001,
+    FPFastMathModeNotInfMask = 0x00000002,
+    FPFastMathModeNSZMask = 0x00000004,
+    FPFastMathModeAllowRecipMask = 0x00000008,
+    FPFastMathModeFastMask = 0x00000010,
+};
+
+enum FPRoundingMode {
+    FPRoundingModeRTE = 0,
+    FPRoundingModeRTZ = 1,
+    FPRoundingModeRTP = 2,
+    FPRoundingModeRTN = 3,
+};
+
+enum LinkageType {
+    LinkageTypeExport = 0,
+    LinkageTypeImport = 1,
+};
+
+enum AccessQualifier {
+    AccessQualifierReadOnly = 0,
+    AccessQualifierWriteOnly = 1,
+    AccessQualifierReadWrite = 2,
+};
+
+enum FunctionParameterAttribute {
+    FunctionParameterAttributeZext = 0,
+    FunctionParameterAttributeSext = 1,
+    FunctionParameterAttributeByVal = 2,
+    FunctionParameterAttributeSret = 3,
+    FunctionParameterAttributeNoAlias = 4,
+    FunctionParameterAttributeNoCapture = 5,
+    FunctionParameterAttributeNoWrite = 6,
+    FunctionParameterAttributeNoReadWrite = 7,
+};
+
+enum Decoration {
+    DecorationRelaxedPrecision = 0,
+    DecorationSpecId = 1,
+    DecorationBlock = 2,
+    DecorationBufferBlock = 3,
+    DecorationRowMajor = 4,
+    DecorationColMajor = 5,
+    DecorationArrayStride = 6,
+    DecorationMatrixStride = 7,
+    DecorationGLSLShared = 8,
+    DecorationGLSLPacked = 9,
+    DecorationCPacked = 10,
+    DecorationBuiltIn = 11,
+    DecorationNoPerspective = 13,
+    DecorationFlat = 14,
+    DecorationPatch = 15,
+    DecorationCentroid = 16,
+    DecorationSample = 17,
+    DecorationInvariant = 18,
+    DecorationRestrict = 19,
+    DecorationAliased = 20,
+    DecorationVolatile = 21,
+    DecorationConstant = 22,
+    DecorationCoherent = 23,
+    DecorationNonWritable = 24,
+    DecorationNonReadable = 25,
+    DecorationUniform = 26,
+    DecorationSaturatedConversion = 28,
+    DecorationStream = 29,
+    DecorationLocation = 30,
+    DecorationComponent = 31,
+    DecorationIndex = 32,
+    DecorationBinding = 33,
+    DecorationDescriptorSet = 34,
+    DecorationOffset = 35,
+    DecorationXfbBuffer = 36,
+    DecorationXfbStride = 37,
+    DecorationFuncParamAttr = 38,
+    DecorationFPRoundingMode = 39,
+    DecorationFPFastMathMode = 40,
+    DecorationLinkageAttributes = 41,
+    DecorationNoContraction = 42,
+    DecorationInputAttachmentIndex = 43,
+    DecorationAlignment = 44,
+};
+
+enum BuiltIn {
+    BuiltInPosition = 0,
+    BuiltInPointSize = 1,
+    BuiltInClipDistance = 3,
+    BuiltInCullDistance = 4,
+    BuiltInVertexId = 5,
+    BuiltInInstanceId = 6,
+    BuiltInPrimitiveId = 7,
+    BuiltInInvocationId = 8,
+    BuiltInLayer = 9,
+    BuiltInViewportIndex = 10,
+    BuiltInTessLevelOuter = 11,
+    BuiltInTessLevelInner = 12,
+    BuiltInTessCoord = 13,
+    BuiltInPatchVertices = 14,
+    BuiltInFragCoord = 15,
+    BuiltInPointCoord = 16,
+    BuiltInFrontFacing = 17,
+    BuiltInSampleId = 18,
+    BuiltInSamplePosition = 19,
+    BuiltInSampleMask = 20,
+    BuiltInFragDepth = 22,
+    BuiltInHelperInvocation = 23,
+    BuiltInNumWorkgroups = 24,
+    BuiltInWorkgroupSize = 25,
+    BuiltInWorkgroupId = 26,
+    BuiltInLocalInvocationId = 27,
+    BuiltInGlobalInvocationId = 28,
+    BuiltInLocalInvocationIndex = 29,
+    BuiltInWorkDim = 30,
+    BuiltInGlobalSize = 31,
+    BuiltInEnqueuedWorkgroupSize = 32,
+    BuiltInGlobalOffset = 33,
+    BuiltInGlobalLinearId = 34,
+    BuiltInSubgroupSize = 36,
+    BuiltInSubgroupMaxSize = 37,
+    BuiltInNumSubgroups = 38,
+    BuiltInNumEnqueuedSubgroups = 39,
+    BuiltInSubgroupId = 40,
+    BuiltInSubgroupLocalInvocationId = 41,
+    BuiltInVertexIndex = 42,
+    BuiltInInstanceIndex = 43,
+};
+
+enum SelectionControlShift {
+    SelectionControlFlattenShift = 0,
+    SelectionControlDontFlattenShift = 1,
+};
+
+enum SelectionControlMask {
+    SelectionControlMaskNone = 0,
+    SelectionControlFlattenMask = 0x00000001,
+    SelectionControlDontFlattenMask = 0x00000002,
+};
+
+enum LoopControlShift {
+    LoopControlUnrollShift = 0,
+    LoopControlDontUnrollShift = 1,
+};
+
+enum LoopControlMask {
+    LoopControlMaskNone = 0,
+    LoopControlUnrollMask = 0x00000001,
+    LoopControlDontUnrollMask = 0x00000002,
+};
+
+enum FunctionControlShift {
+    FunctionControlInlineShift = 0,
+    FunctionControlDontInlineShift = 1,
+    FunctionControlPureShift = 2,
+    FunctionControlConstShift = 3,
+};
+
+enum FunctionControlMask {
+    FunctionControlMaskNone = 0,
+    FunctionControlInlineMask = 0x00000001,
+    FunctionControlDontInlineMask = 0x00000002,
+    FunctionControlPureMask = 0x00000004,
+    FunctionControlConstMask = 0x00000008,
+};
+
+enum MemorySemanticsShift {
+    MemorySemanticsAcquireShift = 1,
+    MemorySemanticsReleaseShift = 2,
+    MemorySemanticsAcquireReleaseShift = 3,
+    MemorySemanticsSequentiallyConsistentShift = 4,
+    MemorySemanticsUniformMemoryShift = 6,
+    MemorySemanticsSubgroupMemoryShift = 7,
+    MemorySemanticsWorkgroupMemoryShift = 8,
+    MemorySemanticsCrossWorkgroupMemoryShift = 9,
+    MemorySemanticsAtomicCounterMemoryShift = 10,
+    MemorySemanticsImageMemoryShift = 11,
+};
+
+enum MemorySemanticsMask {
+    MemorySemanticsMaskNone = 0,
+    MemorySemanticsAcquireMask = 0x00000002,
+    MemorySemanticsReleaseMask = 0x00000004,
+    MemorySemanticsAcquireReleaseMask = 0x00000008,
+    MemorySemanticsSequentiallyConsistentMask = 0x00000010,
+    MemorySemanticsUniformMemoryMask = 0x00000040,
+    MemorySemanticsSubgroupMemoryMask = 0x00000080,
+    MemorySemanticsWorkgroupMemoryMask = 0x00000100,
+    MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
+    MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
+    MemorySemanticsImageMemoryMask = 0x00000800,
+};
+
+enum MemoryAccessShift {
+    MemoryAccessVolatileShift = 0,
+    MemoryAccessAlignedShift = 1,
+    MemoryAccessNontemporalShift = 2,
+};
+
+enum MemoryAccessMask {
+    MemoryAccessMaskNone = 0,
+    MemoryAccessVolatileMask = 0x00000001,
+    MemoryAccessAlignedMask = 0x00000002,
+    MemoryAccessNontemporalMask = 0x00000004,
+};
+
+enum Scope {
+    ScopeCrossDevice = 0,
+    ScopeDevice = 1,
+    ScopeWorkgroup = 2,
+    ScopeSubgroup = 3,
+    ScopeInvocation = 4,
+};
+
+enum GroupOperation {
+    GroupOperationReduce = 0,
+    GroupOperationInclusiveScan = 1,
+    GroupOperationExclusiveScan = 2,
+};
+
+enum KernelEnqueueFlags {
+    KernelEnqueueFlagsNoWait = 0,
+    KernelEnqueueFlagsWaitKernel = 1,
+    KernelEnqueueFlagsWaitWorkGroup = 2,
+};
+
+enum KernelProfilingInfoShift {
+    KernelProfilingInfoCmdExecTimeShift = 0,
+};
+
+enum KernelProfilingInfoMask {
+    KernelProfilingInfoMaskNone = 0,
+    KernelProfilingInfoCmdExecTimeMask = 0x00000001,
+};
+
+enum Capability {
+    CapabilityMatrix = 0,
+    CapabilityShader = 1,
+    CapabilityGeometry = 2,
+    CapabilityTessellation = 3,
+    CapabilityAddresses = 4,
+    CapabilityLinkage = 5,
+    CapabilityKernel = 6,
+    CapabilityVector16 = 7,
+    CapabilityFloat16Buffer = 8,
+    CapabilityFloat16 = 9,
+    CapabilityFloat64 = 10,
+    CapabilityInt64 = 11,
+    CapabilityInt64Atomics = 12,
+    CapabilityImageBasic = 13,
+    CapabilityImageReadWrite = 14,
+    CapabilityImageMipmap = 15,
+    CapabilityPipes = 17,
+    CapabilityGroups = 18,
+    CapabilityDeviceEnqueue = 19,
+    CapabilityLiteralSampler = 20,
+    CapabilityAtomicStorage = 21,
+    CapabilityInt16 = 22,
+    CapabilityTessellationPointSize = 23,
+    CapabilityGeometryPointSize = 24,
+    CapabilityImageGatherExtended = 25,
+    CapabilityStorageImageMultisample = 27,
+    CapabilityUniformBufferArrayDynamicIndexing = 28,
+    CapabilitySampledImageArrayDynamicIndexing = 29,
+    CapabilityStorageBufferArrayDynamicIndexing = 30,
+    CapabilityStorageImageArrayDynamicIndexing = 31,
+    CapabilityClipDistance = 32,
+    CapabilityCullDistance = 33,
+    CapabilityImageCubeArray = 34,
+    CapabilitySampleRateShading = 35,
+    CapabilityImageRect = 36,
+    CapabilitySampledRect = 37,
+    CapabilityGenericPointer = 38,
+    CapabilityInt8 = 39,
+    CapabilityInputAttachment = 40,
+    CapabilitySparseResidency = 41,
+    CapabilityMinLod = 42,
+    CapabilitySampled1D = 43,
+    CapabilityImage1D = 44,
+    CapabilitySampledCubeArray = 45,
+    CapabilitySampledBuffer = 46,
+    CapabilityImageBuffer = 47,
+    CapabilityImageMSArray = 48,
+    CapabilityStorageImageExtendedFormats = 49,
+    CapabilityImageQuery = 50,
+    CapabilityDerivativeControl = 51,
+    CapabilityInterpolationFunction = 52,
+    CapabilityTransformFeedback = 53,
+    CapabilityGeometryStreams = 54,
+    CapabilityStorageImageReadWithoutFormat = 55,
+    CapabilityStorageImageWriteWithoutFormat = 56,
+    CapabilityMultiViewport = 57,
+};
+
+enum Op {
+    OpNop = 0,
+    OpUndef = 1,
+    OpSourceContinued = 2,
+    OpSource = 3,
+    OpSourceExtension = 4,
+    OpName = 5,
+    OpMemberName = 6,
+    OpString = 7,
+    OpLine = 8,
+    OpExtension = 10,
+    OpExtInstImport = 11,
+    OpExtInst = 12,
+    OpMemoryModel = 14,
+    OpEntryPoint = 15,
+    OpExecutionMode = 16,
+    OpCapability = 17,
+    OpTypeVoid = 19,
+    OpTypeBool = 20,
+    OpTypeInt = 21,
+    OpTypeFloat = 22,
+    OpTypeVector = 23,
+    OpTypeMatrix = 24,
+    OpTypeImage = 25,
+    OpTypeSampler = 26,
+    OpTypeSampledImage = 27,
+    OpTypeArray = 28,
+    OpTypeRuntimeArray = 29,
+    OpTypeStruct = 30,
+    OpTypeOpaque = 31,
+    OpTypePointer = 32,
+    OpTypeFunction = 33,
+    OpTypeEvent = 34,
+    OpTypeDeviceEvent = 35,
+    OpTypeReserveId = 36,
+    OpTypeQueue = 37,
+    OpTypePipe = 38,
+    OpTypeForwardPointer = 39,
+    OpConstantTrue = 41,
+    OpConstantFalse = 42,
+    OpConstant = 43,
+    OpConstantComposite = 44,
+    OpConstantSampler = 45,
+    OpConstantNull = 46,
+    OpSpecConstantTrue = 48,
+    OpSpecConstantFalse = 49,
+    OpSpecConstant = 50,
+    OpSpecConstantComposite = 51,
+    OpSpecConstantOp = 52,
+    OpFunction = 54,
+    OpFunctionParameter = 55,
+    OpFunctionEnd = 56,
+    OpFunctionCall = 57,
+    OpVariable = 59,
+    OpImageTexelPointer = 60,
+    OpLoad = 61,
+    OpStore = 62,
+    OpCopyMemory = 63,
+    OpCopyMemorySized = 64,
+    OpAccessChain = 65,
+    OpInBoundsAccessChain = 66,
+    OpPtrAccessChain = 67,
+    OpArrayLength = 68,
+    OpGenericPtrMemSemantics = 69,
+    OpInBoundsPtrAccessChain = 70,
+    OpDecorate = 71,
+    OpMemberDecorate = 72,
+    OpDecorationGroup = 73,
+    OpGroupDecorate = 74,
+    OpGroupMemberDecorate = 75,
+    OpVectorExtractDynamic = 77,
+    OpVectorInsertDynamic = 78,
+    OpVectorShuffle = 79,
+    OpCompositeConstruct = 80,
+    OpCompositeExtract = 81,
+    OpCompositeInsert = 82,
+    OpCopyObject = 83,
+    OpTranspose = 84,
+    OpSampledImage = 86,
+    OpImageSampleImplicitLod = 87,
+    OpImageSampleExplicitLod = 88,
+    OpImageSampleDrefImplicitLod = 89,
+    OpImageSampleDrefExplicitLod = 90,
+    OpImageSampleProjImplicitLod = 91,
+    OpImageSampleProjExplicitLod = 92,
+    OpImageSampleProjDrefImplicitLod = 93,
+    OpImageSampleProjDrefExplicitLod = 94,
+    OpImageFetch = 95,
+    OpImageGather = 96,
+    OpImageDrefGather = 97,
+    OpImageRead = 98,
+    OpImageWrite = 99,
+    OpImage = 100,
+    OpImageQueryFormat = 101,
+    OpImageQueryOrder = 102,
+    OpImageQuerySizeLod = 103,
+    OpImageQuerySize = 104,
+    OpImageQueryLod = 105,
+    OpImageQueryLevels = 106,
+    OpImageQuerySamples = 107,
+    OpConvertFToU = 109,
+    OpConvertFToS = 110,
+    OpConvertSToF = 111,
+    OpConvertUToF = 112,
+    OpUConvert = 113,
+    OpSConvert = 114,
+    OpFConvert = 115,
+    OpQuantizeToF16 = 116,
+    OpConvertPtrToU = 117,
+    OpSatConvertSToU = 118,
+    OpSatConvertUToS = 119,
+    OpConvertUToPtr = 120,
+    OpPtrCastToGeneric = 121,
+    OpGenericCastToPtr = 122,
+    OpGenericCastToPtrExplicit = 123,
+    OpBitcast = 124,
+    OpSNegate = 126,
+    OpFNegate = 127,
+    OpIAdd = 128,
+    OpFAdd = 129,
+    OpISub = 130,
+    OpFSub = 131,
+    OpIMul = 132,
+    OpFMul = 133,
+    OpUDiv = 134,
+    OpSDiv = 135,
+    OpFDiv = 136,
+    OpUMod = 137,
+    OpSRem = 138,
+    OpSMod = 139,
+    OpFRem = 140,
+    OpFMod = 141,
+    OpVectorTimesScalar = 142,
+    OpMatrixTimesScalar = 143,
+    OpVectorTimesMatrix = 144,
+    OpMatrixTimesVector = 145,
+    OpMatrixTimesMatrix = 146,
+    OpOuterProduct = 147,
+    OpDot = 148,
+    OpIAddCarry = 149,
+    OpISubBorrow = 150,
+    OpUMulExtended = 151,
+    OpSMulExtended = 152,
+    OpAny = 154,
+    OpAll = 155,
+    OpIsNan = 156,
+    OpIsInf = 157,
+    OpIsFinite = 158,
+    OpIsNormal = 159,
+    OpSignBitSet = 160,
+    OpLessOrGreater = 161,
+    OpOrdered = 162,
+    OpUnordered = 163,
+    OpLogicalEqual = 164,
+    OpLogicalNotEqual = 165,
+    OpLogicalOr = 166,
+    OpLogicalAnd = 167,
+    OpLogicalNot = 168,
+    OpSelect = 169,
+    OpIEqual = 170,
+    OpINotEqual = 171,
+    OpUGreaterThan = 172,
+    OpSGreaterThan = 173,
+    OpUGreaterThanEqual = 174,
+    OpSGreaterThanEqual = 175,
+    OpULessThan = 176,
+    OpSLessThan = 177,
+    OpULessThanEqual = 178,
+    OpSLessThanEqual = 179,
+    OpFOrdEqual = 180,
+    OpFUnordEqual = 181,
+    OpFOrdNotEqual = 182,
+    OpFUnordNotEqual = 183,
+    OpFOrdLessThan = 184,
+    OpFUnordLessThan = 185,
+    OpFOrdGreaterThan = 186,
+    OpFUnordGreaterThan = 187,
+    OpFOrdLessThanEqual = 188,
+    OpFUnordLessThanEqual = 189,
+    OpFOrdGreaterThanEqual = 190,
+    OpFUnordGreaterThanEqual = 191,
+    OpShiftRightLogical = 194,
+    OpShiftRightArithmetic = 195,
+    OpShiftLeftLogical = 196,
+    OpBitwiseOr = 197,
+    OpBitwiseXor = 198,
+    OpBitwiseAnd = 199,
+    OpNot = 200,
+    OpBitFieldInsert = 201,
+    OpBitFieldSExtract = 202,
+    OpBitFieldUExtract = 203,
+    OpBitReverse = 204,
+    OpBitCount = 205,
+    OpDPdx = 207,
+    OpDPdy = 208,
+    OpFwidth = 209,
+    OpDPdxFine = 210,
+    OpDPdyFine = 211,
+    OpFwidthFine = 212,
+    OpDPdxCoarse = 213,
+    OpDPdyCoarse = 214,
+    OpFwidthCoarse = 215,
+    OpEmitVertex = 218,
+    OpEndPrimitive = 219,
+    OpEmitStreamVertex = 220,
+    OpEndStreamPrimitive = 221,
+    OpControlBarrier = 224,
+    OpMemoryBarrier = 225,
+    OpAtomicLoad = 227,
+    OpAtomicStore = 228,
+    OpAtomicExchange = 229,
+    OpAtomicCompareExchange = 230,
+    OpAtomicCompareExchangeWeak = 231,
+    OpAtomicIIncrement = 232,
+    OpAtomicIDecrement = 233,
+    OpAtomicIAdd = 234,
+    OpAtomicISub = 235,
+    OpAtomicSMin = 236,
+    OpAtomicUMin = 237,
+    OpAtomicSMax = 238,
+    OpAtomicUMax = 239,
+    OpAtomicAnd = 240,
+    OpAtomicOr = 241,
+    OpAtomicXor = 242,
+    OpPhi = 245,
+    OpLoopMerge = 246,
+    OpSelectionMerge = 247,
+    OpLabel = 248,
+    OpBranch = 249,
+    OpBranchConditional = 250,
+    OpSwitch = 251,
+    OpKill = 252,
+    OpReturn = 253,
+    OpReturnValue = 254,
+    OpUnreachable = 255,
+    OpLifetimeStart = 256,
+    OpLifetimeStop = 257,
+    OpGroupAsyncCopy = 259,
+    OpGroupWaitEvents = 260,
+    OpGroupAll = 261,
+    OpGroupAny = 262,
+    OpGroupBroadcast = 263,
+    OpGroupIAdd = 264,
+    OpGroupFAdd = 265,
+    OpGroupFMin = 266,
+    OpGroupUMin = 267,
+    OpGroupSMin = 268,
+    OpGroupFMax = 269,
+    OpGroupUMax = 270,
+    OpGroupSMax = 271,
+    OpReadPipe = 274,
+    OpWritePipe = 275,
+    OpReservedReadPipe = 276,
+    OpReservedWritePipe = 277,
+    OpReserveReadPipePackets = 278,
+    OpReserveWritePipePackets = 279,
+    OpCommitReadPipe = 280,
+    OpCommitWritePipe = 281,
+    OpIsValidReserveId = 282,
+    OpGetNumPipePackets = 283,
+    OpGetMaxPipePackets = 284,
+    OpGroupReserveReadPipePackets = 285,
+    OpGroupReserveWritePipePackets = 286,
+    OpGroupCommitReadPipe = 287,
+    OpGroupCommitWritePipe = 288,
+    OpEnqueueMarker = 291,
+    OpEnqueueKernel = 292,
+    OpGetKernelNDrangeSubGroupCount = 293,
+    OpGetKernelNDrangeMaxSubGroupSize = 294,
+    OpGetKernelWorkGroupSize = 295,
+    OpGetKernelPreferredWorkGroupSizeMultiple = 296,
+    OpRetainEvent = 297,
+    OpReleaseEvent = 298,
+    OpCreateUserEvent = 299,
+    OpIsValidEvent = 300,
+    OpSetUserEventStatus = 301,
+    OpCaptureEventProfilingInfo = 302,
+    OpGetDefaultQueue = 303,
+    OpBuildNDRange = 304,
+    OpImageSparseSampleImplicitLod = 305,
+    OpImageSparseSampleExplicitLod = 306,
+    OpImageSparseSampleDrefImplicitLod = 307,
+    OpImageSparseSampleDrefExplicitLod = 308,
+    OpImageSparseSampleProjImplicitLod = 309,
+    OpImageSparseSampleProjExplicitLod = 310,
+    OpImageSparseSampleProjDrefImplicitLod = 311,
+    OpImageSparseSampleProjDrefExplicitLod = 312,
+    OpImageSparseFetch = 313,
+    OpImageSparseGather = 314,
+    OpImageSparseDrefGather = 315,
+    OpImageSparseTexelsResident = 316,
+    OpNoLine = 317,
+    OpAtomicFlagTestAndSet = 318,
+    OpAtomicFlagClear = 319,
+    OpImageSparseRead = 320,
+};
+
+// Overload operator| for mask bit combining
+
+inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
+inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
+inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
+inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
+inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
+inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
+inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
+inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
+
+}  // end namespace spv
+
+#endif  // #ifndef spirv_HPP
+
diff --git a/include/spirv/1.0/spirv.hpp11 b/include/spirv/1.0/spirv.hpp11
new file mode 100644 (file)
index 0000000..8ccb0d5
--- /dev/null
@@ -0,0 +1,880 @@
+// Copyright (c) 2014-2016 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.
+// 
+// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+// 
+// 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 header is automatically generated by the same tool that creates
+// the Binary Section of the SPIR-V specification.
+
+// Enumeration tokens for SPIR-V, in various styles:
+//   C, C++, C++11, JSON, Lua, Python
+// 
+// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
+// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
+// 
+// Some tokens act like mask values, which can be OR'd together,
+// while others are mutually exclusive.  The mask-like ones have
+// "Mask" in their name, and a parallel enum that has the shift
+// amount (1 << x) for each corresponding enumerant.
+
+#ifndef spirv_HPP
+#define spirv_HPP
+
+namespace spv {
+
+typedef unsigned int Id;
+
+#define SPV_VERSION 0x10000
+#define SPV_REVISION 4
+
+static const unsigned int MagicNumber = 0x07230203;
+static const unsigned int Version = 0x00010000;
+static const unsigned int Revision = 4;
+static const unsigned int OpCodeMask = 0xffff;
+static const unsigned int WordCountShift = 16;
+
+enum class SourceLanguage : unsigned {
+    Unknown = 0,
+    ESSL = 1,
+    GLSL = 2,
+    OpenCL_C = 3,
+    OpenCL_CPP = 4,
+};
+
+enum class ExecutionModel : unsigned {
+    Vertex = 0,
+    TessellationControl = 1,
+    TessellationEvaluation = 2,
+    Geometry = 3,
+    Fragment = 4,
+    GLCompute = 5,
+    Kernel = 6,
+};
+
+enum class AddressingModel : unsigned {
+    Logical = 0,
+    Physical32 = 1,
+    Physical64 = 2,
+};
+
+enum class MemoryModel : unsigned {
+    Simple = 0,
+    GLSL450 = 1,
+    OpenCL = 2,
+};
+
+enum class ExecutionMode : unsigned {
+    Invocations = 0,
+    SpacingEqual = 1,
+    SpacingFractionalEven = 2,
+    SpacingFractionalOdd = 3,
+    VertexOrderCw = 4,
+    VertexOrderCcw = 5,
+    PixelCenterInteger = 6,
+    OriginUpperLeft = 7,
+    OriginLowerLeft = 8,
+    EarlyFragmentTests = 9,
+    PointMode = 10,
+    Xfb = 11,
+    DepthReplacing = 12,
+    DepthGreater = 14,
+    DepthLess = 15,
+    DepthUnchanged = 16,
+    LocalSize = 17,
+    LocalSizeHint = 18,
+    InputPoints = 19,
+    InputLines = 20,
+    InputLinesAdjacency = 21,
+    Triangles = 22,
+    InputTrianglesAdjacency = 23,
+    Quads = 24,
+    Isolines = 25,
+    OutputVertices = 26,
+    OutputPoints = 27,
+    OutputLineStrip = 28,
+    OutputTriangleStrip = 29,
+    VecTypeHint = 30,
+    ContractionOff = 31,
+};
+
+enum class StorageClass : unsigned {
+    UniformConstant = 0,
+    Input = 1,
+    Uniform = 2,
+    Output = 3,
+    Workgroup = 4,
+    CrossWorkgroup = 5,
+    Private = 6,
+    Function = 7,
+    Generic = 8,
+    PushConstant = 9,
+    AtomicCounter = 10,
+    Image = 11,
+};
+
+enum class Dim : unsigned {
+    Dim1D = 0,
+    Dim2D = 1,
+    Dim3D = 2,
+    Cube = 3,
+    Rect = 4,
+    Buffer = 5,
+    SubpassData = 6,
+};
+
+enum class SamplerAddressingMode : unsigned {
+    None = 0,
+    ClampToEdge = 1,
+    Clamp = 2,
+    Repeat = 3,
+    RepeatMirrored = 4,
+};
+
+enum class SamplerFilterMode : unsigned {
+    Nearest = 0,
+    Linear = 1,
+};
+
+enum class ImageFormat : unsigned {
+    Unknown = 0,
+    Rgba32f = 1,
+    Rgba16f = 2,
+    R32f = 3,
+    Rgba8 = 4,
+    Rgba8Snorm = 5,
+    Rg32f = 6,
+    Rg16f = 7,
+    R11fG11fB10f = 8,
+    R16f = 9,
+    Rgba16 = 10,
+    Rgb10A2 = 11,
+    Rg16 = 12,
+    Rg8 = 13,
+    R16 = 14,
+    R8 = 15,
+    Rgba16Snorm = 16,
+    Rg16Snorm = 17,
+    Rg8Snorm = 18,
+    R16Snorm = 19,
+    R8Snorm = 20,
+    Rgba32i = 21,
+    Rgba16i = 22,
+    Rgba8i = 23,
+    R32i = 24,
+    Rg32i = 25,
+    Rg16i = 26,
+    Rg8i = 27,
+    R16i = 28,
+    R8i = 29,
+    Rgba32ui = 30,
+    Rgba16ui = 31,
+    Rgba8ui = 32,
+    R32ui = 33,
+    Rgb10a2ui = 34,
+    Rg32ui = 35,
+    Rg16ui = 36,
+    Rg8ui = 37,
+    R16ui = 38,
+    R8ui = 39,
+};
+
+enum class ImageChannelOrder : unsigned {
+    R = 0,
+    A = 1,
+    RG = 2,
+    RA = 3,
+    RGB = 4,
+    RGBA = 5,
+    BGRA = 6,
+    ARGB = 7,
+    Intensity = 8,
+    Luminance = 9,
+    Rx = 10,
+    RGx = 11,
+    RGBx = 12,
+    Depth = 13,
+    DepthStencil = 14,
+    sRGB = 15,
+    sRGBx = 16,
+    sRGBA = 17,
+    sBGRA = 18,
+};
+
+enum class ImageChannelDataType : unsigned {
+    SnormInt8 = 0,
+    SnormInt16 = 1,
+    UnormInt8 = 2,
+    UnormInt16 = 3,
+    UnormShort565 = 4,
+    UnormShort555 = 5,
+    UnormInt101010 = 6,
+    SignedInt8 = 7,
+    SignedInt16 = 8,
+    SignedInt32 = 9,
+    UnsignedInt8 = 10,
+    UnsignedInt16 = 11,
+    UnsignedInt32 = 12,
+    HalfFloat = 13,
+    Float = 14,
+    UnormInt24 = 15,
+    UnormInt101010_2 = 16,
+};
+
+enum class ImageOperandsShift : unsigned {
+    Bias = 0,
+    Lod = 1,
+    Grad = 2,
+    ConstOffset = 3,
+    Offset = 4,
+    ConstOffsets = 5,
+    Sample = 6,
+    MinLod = 7,
+};
+
+enum class ImageOperandsMask : unsigned {
+    MaskNone = 0,
+    Bias = 0x00000001,
+    Lod = 0x00000002,
+    Grad = 0x00000004,
+    ConstOffset = 0x00000008,
+    Offset = 0x00000010,
+    ConstOffsets = 0x00000020,
+    Sample = 0x00000040,
+    MinLod = 0x00000080,
+};
+
+enum class FPFastMathModeShift : unsigned {
+    NotNaN = 0,
+    NotInf = 1,
+    NSZ = 2,
+    AllowRecip = 3,
+    Fast = 4,
+};
+
+enum class FPFastMathModeMask : unsigned {
+    MaskNone = 0,
+    NotNaN = 0x00000001,
+    NotInf = 0x00000002,
+    NSZ = 0x00000004,
+    AllowRecip = 0x00000008,
+    Fast = 0x00000010,
+};
+
+enum class FPRoundingMode : unsigned {
+    RTE = 0,
+    RTZ = 1,
+    RTP = 2,
+    RTN = 3,
+};
+
+enum class LinkageType : unsigned {
+    Export = 0,
+    Import = 1,
+};
+
+enum class AccessQualifier : unsigned {
+    ReadOnly = 0,
+    WriteOnly = 1,
+    ReadWrite = 2,
+};
+
+enum class FunctionParameterAttribute : unsigned {
+    Zext = 0,
+    Sext = 1,
+    ByVal = 2,
+    Sret = 3,
+    NoAlias = 4,
+    NoCapture = 5,
+    NoWrite = 6,
+    NoReadWrite = 7,
+};
+
+enum class Decoration : unsigned {
+    RelaxedPrecision = 0,
+    SpecId = 1,
+    Block = 2,
+    BufferBlock = 3,
+    RowMajor = 4,
+    ColMajor = 5,
+    ArrayStride = 6,
+    MatrixStride = 7,
+    GLSLShared = 8,
+    GLSLPacked = 9,
+    CPacked = 10,
+    BuiltIn = 11,
+    NoPerspective = 13,
+    Flat = 14,
+    Patch = 15,
+    Centroid = 16,
+    Sample = 17,
+    Invariant = 18,
+    Restrict = 19,
+    Aliased = 20,
+    Volatile = 21,
+    Constant = 22,
+    Coherent = 23,
+    NonWritable = 24,
+    NonReadable = 25,
+    Uniform = 26,
+    SaturatedConversion = 28,
+    Stream = 29,
+    Location = 30,
+    Component = 31,
+    Index = 32,
+    Binding = 33,
+    DescriptorSet = 34,
+    Offset = 35,
+    XfbBuffer = 36,
+    XfbStride = 37,
+    FuncParamAttr = 38,
+    FPRoundingMode = 39,
+    FPFastMathMode = 40,
+    LinkageAttributes = 41,
+    NoContraction = 42,
+    InputAttachmentIndex = 43,
+    Alignment = 44,
+};
+
+enum class BuiltIn : unsigned {
+    Position = 0,
+    PointSize = 1,
+    ClipDistance = 3,
+    CullDistance = 4,
+    VertexId = 5,
+    InstanceId = 6,
+    PrimitiveId = 7,
+    InvocationId = 8,
+    Layer = 9,
+    ViewportIndex = 10,
+    TessLevelOuter = 11,
+    TessLevelInner = 12,
+    TessCoord = 13,
+    PatchVertices = 14,
+    FragCoord = 15,
+    PointCoord = 16,
+    FrontFacing = 17,
+    SampleId = 18,
+    SamplePosition = 19,
+    SampleMask = 20,
+    FragDepth = 22,
+    HelperInvocation = 23,
+    NumWorkgroups = 24,
+    WorkgroupSize = 25,
+    WorkgroupId = 26,
+    LocalInvocationId = 27,
+    GlobalInvocationId = 28,
+    LocalInvocationIndex = 29,
+    WorkDim = 30,
+    GlobalSize = 31,
+    EnqueuedWorkgroupSize = 32,
+    GlobalOffset = 33,
+    GlobalLinearId = 34,
+    SubgroupSize = 36,
+    SubgroupMaxSize = 37,
+    NumSubgroups = 38,
+    NumEnqueuedSubgroups = 39,
+    SubgroupId = 40,
+    SubgroupLocalInvocationId = 41,
+    VertexIndex = 42,
+    InstanceIndex = 43,
+};
+
+enum class SelectionControlShift : unsigned {
+    Flatten = 0,
+    DontFlatten = 1,
+};
+
+enum class SelectionControlMask : unsigned {
+    MaskNone = 0,
+    Flatten = 0x00000001,
+    DontFlatten = 0x00000002,
+};
+
+enum class LoopControlShift : unsigned {
+    Unroll = 0,
+    DontUnroll = 1,
+};
+
+enum class LoopControlMask : unsigned {
+    MaskNone = 0,
+    Unroll = 0x00000001,
+    DontUnroll = 0x00000002,
+};
+
+enum class FunctionControlShift : unsigned {
+    Inline = 0,
+    DontInline = 1,
+    Pure = 2,
+    Const = 3,
+};
+
+enum class FunctionControlMask : unsigned {
+    MaskNone = 0,
+    Inline = 0x00000001,
+    DontInline = 0x00000002,
+    Pure = 0x00000004,
+    Const = 0x00000008,
+};
+
+enum class MemorySemanticsShift : unsigned {
+    Acquire = 1,
+    Release = 2,
+    AcquireRelease = 3,
+    SequentiallyConsistent = 4,
+    UniformMemory = 6,
+    SubgroupMemory = 7,
+    WorkgroupMemory = 8,
+    CrossWorkgroupMemory = 9,
+    AtomicCounterMemory = 10,
+    ImageMemory = 11,
+};
+
+enum class MemorySemanticsMask : unsigned {
+    MaskNone = 0,
+    Acquire = 0x00000002,
+    Release = 0x00000004,
+    AcquireRelease = 0x00000008,
+    SequentiallyConsistent = 0x00000010,
+    UniformMemory = 0x00000040,
+    SubgroupMemory = 0x00000080,
+    WorkgroupMemory = 0x00000100,
+    CrossWorkgroupMemory = 0x00000200,
+    AtomicCounterMemory = 0x00000400,
+    ImageMemory = 0x00000800,
+};
+
+enum class MemoryAccessShift : unsigned {
+    Volatile = 0,
+    Aligned = 1,
+    Nontemporal = 2,
+};
+
+enum class MemoryAccessMask : unsigned {
+    MaskNone = 0,
+    Volatile = 0x00000001,
+    Aligned = 0x00000002,
+    Nontemporal = 0x00000004,
+};
+
+enum class Scope : unsigned {
+    CrossDevice = 0,
+    Device = 1,
+    Workgroup = 2,
+    Subgroup = 3,
+    Invocation = 4,
+};
+
+enum class GroupOperation : unsigned {
+    Reduce = 0,
+    InclusiveScan = 1,
+    ExclusiveScan = 2,
+};
+
+enum class KernelEnqueueFlags : unsigned {
+    NoWait = 0,
+    WaitKernel = 1,
+    WaitWorkGroup = 2,
+};
+
+enum class KernelProfilingInfoShift : unsigned {
+    CmdExecTime = 0,
+};
+
+enum class KernelProfilingInfoMask : unsigned {
+    MaskNone = 0,
+    CmdExecTime = 0x00000001,
+};
+
+enum class Capability : unsigned {
+    Matrix = 0,
+    Shader = 1,
+    Geometry = 2,
+    Tessellation = 3,
+    Addresses = 4,
+    Linkage = 5,
+    Kernel = 6,
+    Vector16 = 7,
+    Float16Buffer = 8,
+    Float16 = 9,
+    Float64 = 10,
+    Int64 = 11,
+    Int64Atomics = 12,
+    ImageBasic = 13,
+    ImageReadWrite = 14,
+    ImageMipmap = 15,
+    Pipes = 17,
+    Groups = 18,
+    DeviceEnqueue = 19,
+    LiteralSampler = 20,
+    AtomicStorage = 21,
+    Int16 = 22,
+    TessellationPointSize = 23,
+    GeometryPointSize = 24,
+    ImageGatherExtended = 25,
+    StorageImageMultisample = 27,
+    UniformBufferArrayDynamicIndexing = 28,
+    SampledImageArrayDynamicIndexing = 29,
+    StorageBufferArrayDynamicIndexing = 30,
+    StorageImageArrayDynamicIndexing = 31,
+    ClipDistance = 32,
+    CullDistance = 33,
+    ImageCubeArray = 34,
+    SampleRateShading = 35,
+    ImageRect = 36,
+    SampledRect = 37,
+    GenericPointer = 38,
+    Int8 = 39,
+    InputAttachment = 40,
+    SparseResidency = 41,
+    MinLod = 42,
+    Sampled1D = 43,
+    Image1D = 44,
+    SampledCubeArray = 45,
+    SampledBuffer = 46,
+    ImageBuffer = 47,
+    ImageMSArray = 48,
+    StorageImageExtendedFormats = 49,
+    ImageQuery = 50,
+    DerivativeControl = 51,
+    InterpolationFunction = 52,
+    TransformFeedback = 53,
+    GeometryStreams = 54,
+    StorageImageReadWithoutFormat = 55,
+    StorageImageWriteWithoutFormat = 56,
+    MultiViewport = 57,
+};
+
+enum class Op : unsigned {
+    OpNop = 0,
+    OpUndef = 1,
+    OpSourceContinued = 2,
+    OpSource = 3,
+    OpSourceExtension = 4,
+    OpName = 5,
+    OpMemberName = 6,
+    OpString = 7,
+    OpLine = 8,
+    OpExtension = 10,
+    OpExtInstImport = 11,
+    OpExtInst = 12,
+    OpMemoryModel = 14,
+    OpEntryPoint = 15,
+    OpExecutionMode = 16,
+    OpCapability = 17,
+    OpTypeVoid = 19,
+    OpTypeBool = 20,
+    OpTypeInt = 21,
+    OpTypeFloat = 22,
+    OpTypeVector = 23,
+    OpTypeMatrix = 24,
+    OpTypeImage = 25,
+    OpTypeSampler = 26,
+    OpTypeSampledImage = 27,
+    OpTypeArray = 28,
+    OpTypeRuntimeArray = 29,
+    OpTypeStruct = 30,
+    OpTypeOpaque = 31,
+    OpTypePointer = 32,
+    OpTypeFunction = 33,
+    OpTypeEvent = 34,
+    OpTypeDeviceEvent = 35,
+    OpTypeReserveId = 36,
+    OpTypeQueue = 37,
+    OpTypePipe = 38,
+    OpTypeForwardPointer = 39,
+    OpConstantTrue = 41,
+    OpConstantFalse = 42,
+    OpConstant = 43,
+    OpConstantComposite = 44,
+    OpConstantSampler = 45,
+    OpConstantNull = 46,
+    OpSpecConstantTrue = 48,
+    OpSpecConstantFalse = 49,
+    OpSpecConstant = 50,
+    OpSpecConstantComposite = 51,
+    OpSpecConstantOp = 52,
+    OpFunction = 54,
+    OpFunctionParameter = 55,
+    OpFunctionEnd = 56,
+    OpFunctionCall = 57,
+    OpVariable = 59,
+    OpImageTexelPointer = 60,
+    OpLoad = 61,
+    OpStore = 62,
+    OpCopyMemory = 63,
+    OpCopyMemorySized = 64,
+    OpAccessChain = 65,
+    OpInBoundsAccessChain = 66,
+    OpPtrAccessChain = 67,
+    OpArrayLength = 68,
+    OpGenericPtrMemSemantics = 69,
+    OpInBoundsPtrAccessChain = 70,
+    OpDecorate = 71,
+    OpMemberDecorate = 72,
+    OpDecorationGroup = 73,
+    OpGroupDecorate = 74,
+    OpGroupMemberDecorate = 75,
+    OpVectorExtractDynamic = 77,
+    OpVectorInsertDynamic = 78,
+    OpVectorShuffle = 79,
+    OpCompositeConstruct = 80,
+    OpCompositeExtract = 81,
+    OpCompositeInsert = 82,
+    OpCopyObject = 83,
+    OpTranspose = 84,
+    OpSampledImage = 86,
+    OpImageSampleImplicitLod = 87,
+    OpImageSampleExplicitLod = 88,
+    OpImageSampleDrefImplicitLod = 89,
+    OpImageSampleDrefExplicitLod = 90,
+    OpImageSampleProjImplicitLod = 91,
+    OpImageSampleProjExplicitLod = 92,
+    OpImageSampleProjDrefImplicitLod = 93,
+    OpImageSampleProjDrefExplicitLod = 94,
+    OpImageFetch = 95,
+    OpImageGather = 96,
+    OpImageDrefGather = 97,
+    OpImageRead = 98,
+    OpImageWrite = 99,
+    OpImage = 100,
+    OpImageQueryFormat = 101,
+    OpImageQueryOrder = 102,
+    OpImageQuerySizeLod = 103,
+    OpImageQuerySize = 104,
+    OpImageQueryLod = 105,
+    OpImageQueryLevels = 106,
+    OpImageQuerySamples = 107,
+    OpConvertFToU = 109,
+    OpConvertFToS = 110,
+    OpConvertSToF = 111,
+    OpConvertUToF = 112,
+    OpUConvert = 113,
+    OpSConvert = 114,
+    OpFConvert = 115,
+    OpQuantizeToF16 = 116,
+    OpConvertPtrToU = 117,
+    OpSatConvertSToU = 118,
+    OpSatConvertUToS = 119,
+    OpConvertUToPtr = 120,
+    OpPtrCastToGeneric = 121,
+    OpGenericCastToPtr = 122,
+    OpGenericCastToPtrExplicit = 123,
+    OpBitcast = 124,
+    OpSNegate = 126,
+    OpFNegate = 127,
+    OpIAdd = 128,
+    OpFAdd = 129,
+    OpISub = 130,
+    OpFSub = 131,
+    OpIMul = 132,
+    OpFMul = 133,
+    OpUDiv = 134,
+    OpSDiv = 135,
+    OpFDiv = 136,
+    OpUMod = 137,
+    OpSRem = 138,
+    OpSMod = 139,
+    OpFRem = 140,
+    OpFMod = 141,
+    OpVectorTimesScalar = 142,
+    OpMatrixTimesScalar = 143,
+    OpVectorTimesMatrix = 144,
+    OpMatrixTimesVector = 145,
+    OpMatrixTimesMatrix = 146,
+    OpOuterProduct = 147,
+    OpDot = 148,
+    OpIAddCarry = 149,
+    OpISubBorrow = 150,
+    OpUMulExtended = 151,
+    OpSMulExtended = 152,
+    OpAny = 154,
+    OpAll = 155,
+    OpIsNan = 156,
+    OpIsInf = 157,
+    OpIsFinite = 158,
+    OpIsNormal = 159,
+    OpSignBitSet = 160,
+    OpLessOrGreater = 161,
+    OpOrdered = 162,
+    OpUnordered = 163,
+    OpLogicalEqual = 164,
+    OpLogicalNotEqual = 165,
+    OpLogicalOr = 166,
+    OpLogicalAnd = 167,
+    OpLogicalNot = 168,
+    OpSelect = 169,
+    OpIEqual = 170,
+    OpINotEqual = 171,
+    OpUGreaterThan = 172,
+    OpSGreaterThan = 173,
+    OpUGreaterThanEqual = 174,
+    OpSGreaterThanEqual = 175,
+    OpULessThan = 176,
+    OpSLessThan = 177,
+    OpULessThanEqual = 178,
+    OpSLessThanEqual = 179,
+    OpFOrdEqual = 180,
+    OpFUnordEqual = 181,
+    OpFOrdNotEqual = 182,
+    OpFUnordNotEqual = 183,
+    OpFOrdLessThan = 184,
+    OpFUnordLessThan = 185,
+    OpFOrdGreaterThan = 186,
+    OpFUnordGreaterThan = 187,
+    OpFOrdLessThanEqual = 188,
+    OpFUnordLessThanEqual = 189,
+    OpFOrdGreaterThanEqual = 190,
+    OpFUnordGreaterThanEqual = 191,
+    OpShiftRightLogical = 194,
+    OpShiftRightArithmetic = 195,
+    OpShiftLeftLogical = 196,
+    OpBitwiseOr = 197,
+    OpBitwiseXor = 198,
+    OpBitwiseAnd = 199,
+    OpNot = 200,
+    OpBitFieldInsert = 201,
+    OpBitFieldSExtract = 202,
+    OpBitFieldUExtract = 203,
+    OpBitReverse = 204,
+    OpBitCount = 205,
+    OpDPdx = 207,
+    OpDPdy = 208,
+    OpFwidth = 209,
+    OpDPdxFine = 210,
+    OpDPdyFine = 211,
+    OpFwidthFine = 212,
+    OpDPdxCoarse = 213,
+    OpDPdyCoarse = 214,
+    OpFwidthCoarse = 215,
+    OpEmitVertex = 218,
+    OpEndPrimitive = 219,
+    OpEmitStreamVertex = 220,
+    OpEndStreamPrimitive = 221,
+    OpControlBarrier = 224,
+    OpMemoryBarrier = 225,
+    OpAtomicLoad = 227,
+    OpAtomicStore = 228,
+    OpAtomicExchange = 229,
+    OpAtomicCompareExchange = 230,
+    OpAtomicCompareExchangeWeak = 231,
+    OpAtomicIIncrement = 232,
+    OpAtomicIDecrement = 233,
+    OpAtomicIAdd = 234,
+    OpAtomicISub = 235,
+    OpAtomicSMin = 236,
+    OpAtomicUMin = 237,
+    OpAtomicSMax = 238,
+    OpAtomicUMax = 239,
+    OpAtomicAnd = 240,
+    OpAtomicOr = 241,
+    OpAtomicXor = 242,
+    OpPhi = 245,
+    OpLoopMerge = 246,
+    OpSelectionMerge = 247,
+    OpLabel = 248,
+    OpBranch = 249,
+    OpBranchConditional = 250,
+    OpSwitch = 251,
+    OpKill = 252,
+    OpReturn = 253,
+    OpReturnValue = 254,
+    OpUnreachable = 255,
+    OpLifetimeStart = 256,
+    OpLifetimeStop = 257,
+    OpGroupAsyncCopy = 259,
+    OpGroupWaitEvents = 260,
+    OpGroupAll = 261,
+    OpGroupAny = 262,
+    OpGroupBroadcast = 263,
+    OpGroupIAdd = 264,
+    OpGroupFAdd = 265,
+    OpGroupFMin = 266,
+    OpGroupUMin = 267,
+    OpGroupSMin = 268,
+    OpGroupFMax = 269,
+    OpGroupUMax = 270,
+    OpGroupSMax = 271,
+    OpReadPipe = 274,
+    OpWritePipe = 275,
+    OpReservedReadPipe = 276,
+    OpReservedWritePipe = 277,
+    OpReserveReadPipePackets = 278,
+    OpReserveWritePipePackets = 279,
+    OpCommitReadPipe = 280,
+    OpCommitWritePipe = 281,
+    OpIsValidReserveId = 282,
+    OpGetNumPipePackets = 283,
+    OpGetMaxPipePackets = 284,
+    OpGroupReserveReadPipePackets = 285,
+    OpGroupReserveWritePipePackets = 286,
+    OpGroupCommitReadPipe = 287,
+    OpGroupCommitWritePipe = 288,
+    OpEnqueueMarker = 291,
+    OpEnqueueKernel = 292,
+    OpGetKernelNDrangeSubGroupCount = 293,
+    OpGetKernelNDrangeMaxSubGroupSize = 294,
+    OpGetKernelWorkGroupSize = 295,
+    OpGetKernelPreferredWorkGroupSizeMultiple = 296,
+    OpRetainEvent = 297,
+    OpReleaseEvent = 298,
+    OpCreateUserEvent = 299,
+    OpIsValidEvent = 300,
+    OpSetUserEventStatus = 301,
+    OpCaptureEventProfilingInfo = 302,
+    OpGetDefaultQueue = 303,
+    OpBuildNDRange = 304,
+    OpImageSparseSampleImplicitLod = 305,
+    OpImageSparseSampleExplicitLod = 306,
+    OpImageSparseSampleDrefImplicitLod = 307,
+    OpImageSparseSampleDrefExplicitLod = 308,
+    OpImageSparseSampleProjImplicitLod = 309,
+    OpImageSparseSampleProjExplicitLod = 310,
+    OpImageSparseSampleProjDrefImplicitLod = 311,
+    OpImageSparseSampleProjDrefExplicitLod = 312,
+    OpImageSparseFetch = 313,
+    OpImageSparseGather = 314,
+    OpImageSparseDrefGather = 315,
+    OpImageSparseTexelsResident = 316,
+    OpNoLine = 317,
+    OpAtomicFlagTestAndSet = 318,
+    OpAtomicFlagClear = 319,
+    OpImageSparseRead = 320,
+};
+
+// Overload operator| for mask bit combining
+
+inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
+inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
+inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
+inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
+inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
+inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
+inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
+inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
+
+}  // end namespace spv
+
+#endif  // #ifndef spirv_HPP
+
diff --git a/include/spirv/1.0/spirv.json b/include/spirv/1.0/spirv.json
new file mode 100644 (file)
index 0000000..d9e55d3
--- /dev/null
@@ -0,0 +1,929 @@
+{
+    "spv":
+    {
+        "meta":
+        {
+            "Comment":
+            [
+                [
+                    "Copyright (c) 2014-2016 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.",
+                    "",
+                    "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS",
+                    "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND",
+                    "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ",
+                    "",
+                    "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 header is automatically generated by the same tool that creates",
+                    "the Binary Section of the SPIR-V specification."
+                ],
+                [
+                    "Enumeration tokens for SPIR-V, in various styles:",
+                    "  C, C++, C++11, JSON, Lua, Python",
+                    "",
+                    "- C will have tokens with a \"Spv\" prefix, e.g.: SpvSourceLanguageGLSL",
+                    "- C++ will have tokens in the \"spv\" name space, e.g.: spv::SourceLanguageGLSL",
+                    "- C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL",
+                    "- Lua will use tables, e.g.: spv.SourceLanguage.GLSL",
+                    "- Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']",
+                    "",
+                    "Some tokens act like mask values, which can be OR'd together,",
+                    "while others are mutually exclusive.  The mask-like ones have",
+                    "\"Mask\" in their name, and a parallel enum that has the shift",
+                    "amount (1 << x) for each corresponding enumerant."
+                ]
+            ],
+            "MagicNumber": 119734787,
+            "Version": 65536,
+            "Revision": 4,
+            "OpCodeMask": 65535,
+            "WordCountShift": 16
+        },
+        "enum":
+        [
+            {
+                "Name": "SourceLanguage",
+                "Type": "Value",
+                "Values":
+                {
+                    "Unknown": 0,
+                    "ESSL": 1,
+                    "GLSL": 2,
+                    "OpenCL_C": 3,
+                    "OpenCL_CPP": 4
+                }
+            },
+            {
+                "Name": "ExecutionModel",
+                "Type": "Value",
+                "Values":
+                {
+                    "Vertex": 0,
+                    "TessellationControl": 1,
+                    "TessellationEvaluation": 2,
+                    "Geometry": 3,
+                    "Fragment": 4,
+                    "GLCompute": 5,
+                    "Kernel": 6
+                }
+            },
+            {
+                "Name": "AddressingModel",
+                "Type": "Value",
+                "Values":
+                {
+                    "Logical": 0,
+                    "Physical32": 1,
+                    "Physical64": 2
+                }
+            },
+            {
+                "Name": "MemoryModel",
+                "Type": "Value",
+                "Values":
+                {
+                    "Simple": 0,
+                    "GLSL450": 1,
+                    "OpenCL": 2
+                }
+            },
+            {
+                "Name": "ExecutionMode",
+                "Type": "Value",
+                "Values":
+                {
+                    "Invocations": 0,
+                    "SpacingEqual": 1,
+                    "SpacingFractionalEven": 2,
+                    "SpacingFractionalOdd": 3,
+                    "VertexOrderCw": 4,
+                    "VertexOrderCcw": 5,
+                    "PixelCenterInteger": 6,
+                    "OriginUpperLeft": 7,
+                    "OriginLowerLeft": 8,
+                    "EarlyFragmentTests": 9,
+                    "PointMode": 10,
+                    "Xfb": 11,
+                    "DepthReplacing": 12,
+                    "DepthGreater": 14,
+                    "DepthLess": 15,
+                    "DepthUnchanged": 16,
+                    "LocalSize": 17,
+                    "LocalSizeHint": 18,
+                    "InputPoints": 19,
+                    "InputLines": 20,
+                    "InputLinesAdjacency": 21,
+                    "Triangles": 22,
+                    "InputTrianglesAdjacency": 23,
+                    "Quads": 24,
+                    "Isolines": 25,
+                    "OutputVertices": 26,
+                    "OutputPoints": 27,
+                    "OutputLineStrip": 28,
+                    "OutputTriangleStrip": 29,
+                    "VecTypeHint": 30,
+                    "ContractionOff": 31
+                }
+            },
+            {
+                "Name": "StorageClass",
+                "Type": "Value",
+                "Values":
+                {
+                    "UniformConstant": 0,
+                    "Input": 1,
+                    "Uniform": 2,
+                    "Output": 3,
+                    "Workgroup": 4,
+                    "CrossWorkgroup": 5,
+                    "Private": 6,
+                    "Function": 7,
+                    "Generic": 8,
+                    "PushConstant": 9,
+                    "AtomicCounter": 10,
+                    "Image": 11
+                }
+            },
+            {
+                "Name": "Dim",
+                "Type": "Value",
+                "Values":
+                {
+                    "Dim1D": 0,
+                    "Dim2D": 1,
+                    "Dim3D": 2,
+                    "Cube": 3,
+                    "Rect": 4,
+                    "Buffer": 5,
+                    "SubpassData": 6
+                }
+            },
+            {
+                "Name": "SamplerAddressingMode",
+                "Type": "Value",
+                "Values":
+                {
+                    "None": 0,
+                    "ClampToEdge": 1,
+                    "Clamp": 2,
+                    "Repeat": 3,
+                    "RepeatMirrored": 4
+                }
+            },
+            {
+                "Name": "SamplerFilterMode",
+                "Type": "Value",
+                "Values":
+                {
+                    "Nearest": 0,
+                    "Linear": 1
+                }
+            },
+            {
+                "Name": "ImageFormat",
+                "Type": "Value",
+                "Values":
+                {
+                    "Unknown": 0,
+                    "Rgba32f": 1,
+                    "Rgba16f": 2,
+                    "R32f": 3,
+                    "Rgba8": 4,
+                    "Rgba8Snorm": 5,
+                    "Rg32f": 6,
+                    "Rg16f": 7,
+                    "R11fG11fB10f": 8,
+                    "R16f": 9,
+                    "Rgba16": 10,
+                    "Rgb10A2": 11,
+                    "Rg16": 12,
+                    "Rg8": 13,
+                    "R16": 14,
+                    "R8": 15,
+                    "Rgba16Snorm": 16,
+                    "Rg16Snorm": 17,
+                    "Rg8Snorm": 18,
+                    "R16Snorm": 19,
+                    "R8Snorm": 20,
+                    "Rgba32i": 21,
+                    "Rgba16i": 22,
+                    "Rgba8i": 23,
+                    "R32i": 24,
+                    "Rg32i": 25,
+                    "Rg16i": 26,
+                    "Rg8i": 27,
+                    "R16i": 28,
+                    "R8i": 29,
+                    "Rgba32ui": 30,
+                    "Rgba16ui": 31,
+                    "Rgba8ui": 32,
+                    "R32ui": 33,
+                    "Rgb10a2ui": 34,
+                    "Rg32ui": 35,
+                    "Rg16ui": 36,
+                    "Rg8ui": 37,
+                    "R16ui": 38,
+                    "R8ui": 39
+                }
+            },
+            {
+                "Name": "ImageChannelOrder",
+                "Type": "Value",
+                "Values":
+                {
+                    "R": 0,
+                    "A": 1,
+                    "RG": 2,
+                    "RA": 3,
+                    "RGB": 4,
+                    "RGBA": 5,
+                    "BGRA": 6,
+                    "ARGB": 7,
+                    "Intensity": 8,
+                    "Luminance": 9,
+                    "Rx": 10,
+                    "RGx": 11,
+                    "RGBx": 12,
+                    "Depth": 13,
+                    "DepthStencil": 14,
+                    "sRGB": 15,
+                    "sRGBx": 16,
+                    "sRGBA": 17,
+                    "sBGRA": 18
+                }
+            },
+            {
+                "Name": "ImageChannelDataType",
+                "Type": "Value",
+                "Values":
+                {
+                    "SnormInt8": 0,
+                    "SnormInt16": 1,
+                    "UnormInt8": 2,
+                    "UnormInt16": 3,
+                    "UnormShort565": 4,
+                    "UnormShort555": 5,
+                    "UnormInt101010": 6,
+                    "SignedInt8": 7,
+                    "SignedInt16": 8,
+                    "SignedInt32": 9,
+                    "UnsignedInt8": 10,
+                    "UnsignedInt16": 11,
+                    "UnsignedInt32": 12,
+                    "HalfFloat": 13,
+                    "Float": 14,
+                    "UnormInt24": 15,
+                    "UnormInt101010_2": 16
+                }
+            },
+            {
+                "Name": "ImageOperands",
+                "Type": "Bit",
+                "Values":
+                {
+                    "Bias": 0,
+                    "Lod": 1,
+                    "Grad": 2,
+                    "ConstOffset": 3,
+                    "Offset": 4,
+                    "ConstOffsets": 5,
+                    "Sample": 6,
+                    "MinLod": 7
+                }
+            },
+            {
+                "Name": "FPFastMathMode",
+                "Type": "Bit",
+                "Values":
+                {
+                    "NotNaN": 0,
+                    "NotInf": 1,
+                    "NSZ": 2,
+                    "AllowRecip": 3,
+                    "Fast": 4
+                }
+            },
+            {
+                "Name": "FPRoundingMode",
+                "Type": "Value",
+                "Values":
+                {
+                    "RTE": 0,
+                    "RTZ": 1,
+                    "RTP": 2,
+                    "RTN": 3
+                }
+            },
+            {
+                "Name": "LinkageType",
+                "Type": "Value",
+                "Values":
+                {
+                    "Export": 0,
+                    "Import": 1
+                }
+            },
+            {
+                "Name": "AccessQualifier",
+                "Type": "Value",
+                "Values":
+                {
+                    "ReadOnly": 0,
+                    "WriteOnly": 1,
+                    "ReadWrite": 2
+                }
+            },
+            {
+                "Name": "FunctionParameterAttribute",
+                "Type": "Value",
+                "Values":
+                {
+                    "Zext": 0,
+                    "Sext": 1,
+                    "ByVal": 2,
+                    "Sret": 3,
+                    "NoAlias": 4,
+                    "NoCapture": 5,
+                    "NoWrite": 6,
+                    "NoReadWrite": 7
+                }
+            },
+            {
+                "Name": "Decoration",
+                "Type": "Value",
+                "Values":
+                {
+                    "RelaxedPrecision": 0,
+                    "SpecId": 1,
+                    "Block": 2,
+                    "BufferBlock": 3,
+                    "RowMajor": 4,
+                    "ColMajor": 5,
+                    "ArrayStride": 6,
+                    "MatrixStride": 7,
+                    "GLSLShared": 8,
+                    "GLSLPacked": 9,
+                    "CPacked": 10,
+                    "BuiltIn": 11,
+                    "NoPerspective": 13,
+                    "Flat": 14,
+                    "Patch": 15,
+                    "Centroid": 16,
+                    "Sample": 17,
+                    "Invariant": 18,
+                    "Restrict": 19,
+                    "Aliased": 20,
+                    "Volatile": 21,
+                    "Constant": 22,
+                    "Coherent": 23,
+                    "NonWritable": 24,
+                    "NonReadable": 25,
+                    "Uniform": 26,
+                    "SaturatedConversion": 28,
+                    "Stream": 29,
+                    "Location": 30,
+                    "Component": 31,
+                    "Index": 32,
+                    "Binding": 33,
+                    "DescriptorSet": 34,
+                    "Offset": 35,
+                    "XfbBuffer": 36,
+                    "XfbStride": 37,
+                    "FuncParamAttr": 38,
+                    "FPRoundingMode": 39,
+                    "FPFastMathMode": 40,
+                    "LinkageAttributes": 41,
+                    "NoContraction": 42,
+                    "InputAttachmentIndex": 43,
+                    "Alignment": 44
+                }
+            },
+            {
+                "Name": "BuiltIn",
+                "Type": "Value",
+                "Values":
+                {
+                    "Position": 0,
+                    "PointSize": 1,
+                    "ClipDistance": 3,
+                    "CullDistance": 4,
+                    "VertexId": 5,
+                    "InstanceId": 6,
+                    "PrimitiveId": 7,
+                    "InvocationId": 8,
+                    "Layer": 9,
+                    "ViewportIndex": 10,
+                    "TessLevelOuter": 11,
+                    "TessLevelInner": 12,
+                    "TessCoord": 13,
+                    "PatchVertices": 14,
+                    "FragCoord": 15,
+                    "PointCoord": 16,
+                    "FrontFacing": 17,
+                    "SampleId": 18,
+                    "SamplePosition": 19,
+                    "SampleMask": 20,
+                    "FragDepth": 22,
+                    "HelperInvocation": 23,
+                    "NumWorkgroups": 24,
+                    "WorkgroupSize": 25,
+                    "WorkgroupId": 26,
+                    "LocalInvocationId": 27,
+                    "GlobalInvocationId": 28,
+                    "LocalInvocationIndex": 29,
+                    "WorkDim": 30,
+                    "GlobalSize": 31,
+                    "EnqueuedWorkgroupSize": 32,
+                    "GlobalOffset": 33,
+                    "GlobalLinearId": 34,
+                    "SubgroupSize": 36,
+                    "SubgroupMaxSize": 37,
+                    "NumSubgroups": 38,
+                    "NumEnqueuedSubgroups": 39,
+                    "SubgroupId": 40,
+                    "SubgroupLocalInvocationId": 41,
+                    "VertexIndex": 42,
+                    "InstanceIndex": 43
+                }
+            },
+            {
+                "Name": "SelectionControl",
+                "Type": "Bit",
+                "Values":
+                {
+                    "Flatten": 0,
+                    "DontFlatten": 1
+                }
+            },
+            {
+                "Name": "LoopControl",
+                "Type": "Bit",
+                "Values":
+                {
+                    "Unroll": 0,
+                    "DontUnroll": 1
+                }
+            },
+            {
+                "Name": "FunctionControl",
+                "Type": "Bit",
+                "Values":
+                {
+                    "Inline": 0,
+                    "DontInline": 1,
+                    "Pure": 2,
+                    "Const": 3
+                }
+            },
+            {
+                "Name": "MemorySemantics",
+                "Type": "Bit",
+                "Values":
+                {
+                    "Acquire": 1,
+                    "Release": 2,
+                    "AcquireRelease": 3,
+                    "SequentiallyConsistent": 4,
+                    "UniformMemory": 6,
+                    "SubgroupMemory": 7,
+                    "WorkgroupMemory": 8,
+                    "CrossWorkgroupMemory": 9,
+                    "AtomicCounterMemory": 10,
+                    "ImageMemory": 11
+                }
+            },
+            {
+                "Name": "MemoryAccess",
+                "Type": "Bit",
+                "Values":
+                {
+                    "Volatile": 0,
+                    "Aligned": 1,
+                    "Nontemporal": 2
+                }
+            },
+            {
+                "Name": "Scope",
+                "Type": "Value",
+                "Values":
+                {
+                    "CrossDevice": 0,
+                    "Device": 1,
+                    "Workgroup": 2,
+                    "Subgroup": 3,
+                    "Invocation": 4
+                }
+            },
+            {
+                "Name": "GroupOperation",
+                "Type": "Value",
+                "Values":
+                {
+                    "Reduce": 0,
+                    "InclusiveScan": 1,
+                    "ExclusiveScan": 2
+                }
+            },
+            {
+                "Name": "KernelEnqueueFlags",
+                "Type": "Value",
+                "Values":
+                {
+                    "NoWait": 0,
+                    "WaitKernel": 1,
+                    "WaitWorkGroup": 2
+                }
+            },
+            {
+                "Name": "KernelProfilingInfo",
+                "Type": "Bit",
+                "Values":
+                {
+                    "CmdExecTime": 0
+                }
+            },
+            {
+                "Name": "Capability",
+                "Type": "Value",
+                "Values":
+                {
+                    "Matrix": 0,
+                    "Shader": 1,
+                    "Geometry": 2,
+                    "Tessellation": 3,
+                    "Addresses": 4,
+                    "Linkage": 5,
+                    "Kernel": 6,
+                    "Vector16": 7,
+                    "Float16Buffer": 8,
+                    "Float16": 9,
+                    "Float64": 10,
+                    "Int64": 11,
+                    "Int64Atomics": 12,
+                    "ImageBasic": 13,
+                    "ImageReadWrite": 14,
+                    "ImageMipmap": 15,
+                    "Pipes": 17,
+                    "Groups": 18,
+                    "DeviceEnqueue": 19,
+                    "LiteralSampler": 20,
+                    "AtomicStorage": 21,
+                    "Int16": 22,
+                    "TessellationPointSize": 23,
+                    "GeometryPointSize": 24,
+                    "ImageGatherExtended": 25,
+                    "StorageImageMultisample": 27,
+                    "UniformBufferArrayDynamicIndexing": 28,
+                    "SampledImageArrayDynamicIndexing": 29,
+                    "StorageBufferArrayDynamicIndexing": 30,
+                    "StorageImageArrayDynamicIndexing": 31,
+                    "ClipDistance": 32,
+                    "CullDistance": 33,
+                    "ImageCubeArray": 34,
+                    "SampleRateShading": 35,
+                    "ImageRect": 36,
+                    "SampledRect": 37,
+                    "GenericPointer": 38,
+                    "Int8": 39,
+                    "InputAttachment": 40,
+                    "SparseResidency": 41,
+                    "MinLod": 42,
+                    "Sampled1D": 43,
+                    "Image1D": 44,
+                    "SampledCubeArray": 45,
+                    "SampledBuffer": 46,
+                    "ImageBuffer": 47,
+                    "ImageMSArray": 48,
+                    "StorageImageExtendedFormats": 49,
+                    "ImageQuery": 50,
+                    "DerivativeControl": 51,
+                    "InterpolationFunction": 52,
+                    "TransformFeedback": 53,
+                    "GeometryStreams": 54,
+                    "StorageImageReadWithoutFormat": 55,
+                    "StorageImageWriteWithoutFormat": 56,
+                    "MultiViewport": 57
+                }
+            },
+            {
+                "Name": "Op",
+                "Type": "Value",
+                "Values":
+                {
+                    "OpNop": 0,
+                    "OpUndef": 1,
+                    "OpSourceContinued": 2,
+                    "OpSource": 3,
+                    "OpSourceExtension": 4,
+                    "OpName": 5,
+                    "OpMemberName": 6,
+                    "OpString": 7,
+                    "OpLine": 8,
+                    "OpExtension": 10,
+                    "OpExtInstImport": 11,
+                    "OpExtInst": 12,
+                    "OpMemoryModel": 14,
+                    "OpEntryPoint": 15,
+                    "OpExecutionMode": 16,
+                    "OpCapability": 17,
+                    "OpTypeVoid": 19,
+                    "OpTypeBool": 20,
+                    "OpTypeInt": 21,
+                    "OpTypeFloat": 22,
+                    "OpTypeVector": 23,
+                    "OpTypeMatrix": 24,
+                    "OpTypeImage": 25,
+                    "OpTypeSampler": 26,
+                    "OpTypeSampledImage": 27,
+                    "OpTypeArray": 28,
+                    "OpTypeRuntimeArray": 29,
+                    "OpTypeStruct": 30,
+                    "OpTypeOpaque": 31,
+                    "OpTypePointer": 32,
+                    "OpTypeFunction": 33,
+                    "OpTypeEvent": 34,
+                    "OpTypeDeviceEvent": 35,
+                    "OpTypeReserveId": 36,
+                    "OpTypeQueue": 37,
+                    "OpTypePipe": 38,
+                    "OpTypeForwardPointer": 39,
+                    "OpConstantTrue": 41,
+                    "OpConstantFalse": 42,
+                    "OpConstant": 43,
+                    "OpConstantComposite": 44,
+                    "OpConstantSampler": 45,
+                    "OpConstantNull": 46,
+                    "OpSpecConstantTrue": 48,
+                    "OpSpecConstantFalse": 49,
+                    "OpSpecConstant": 50,
+                    "OpSpecConstantComposite": 51,
+                    "OpSpecConstantOp": 52,
+                    "OpFunction": 54,
+                    "OpFunctionParameter": 55,
+                    "OpFunctionEnd": 56,
+                    "OpFunctionCall": 57,
+                    "OpVariable": 59,
+                    "OpImageTexelPointer": 60,
+                    "OpLoad": 61,
+                    "OpStore": 62,
+                    "OpCopyMemory": 63,
+                    "OpCopyMemorySized": 64,
+                    "OpAccessChain": 65,
+                    "OpInBoundsAccessChain": 66,
+                    "OpPtrAccessChain": 67,
+                    "OpArrayLength": 68,
+                    "OpGenericPtrMemSemantics": 69,
+                    "OpInBoundsPtrAccessChain": 70,
+                    "OpDecorate": 71,
+                    "OpMemberDecorate": 72,
+                    "OpDecorationGroup": 73,
+                    "OpGroupDecorate": 74,
+                    "OpGroupMemberDecorate": 75,
+                    "OpVectorExtractDynamic": 77,
+                    "OpVectorInsertDynamic": 78,
+                    "OpVectorShuffle": 79,
+                    "OpCompositeConstruct": 80,
+                    "OpCompositeExtract": 81,
+                    "OpCompositeInsert": 82,
+                    "OpCopyObject": 83,
+                    "OpTranspose": 84,
+                    "OpSampledImage": 86,
+                    "OpImageSampleImplicitLod": 87,
+                    "OpImageSampleExplicitLod": 88,
+                    "OpImageSampleDrefImplicitLod": 89,
+                    "OpImageSampleDrefExplicitLod": 90,
+                    "OpImageSampleProjImplicitLod": 91,
+                    "OpImageSampleProjExplicitLod": 92,
+                    "OpImageSampleProjDrefImplicitLod": 93,
+                    "OpImageSampleProjDrefExplicitLod": 94,
+                    "OpImageFetch": 95,
+                    "OpImageGather": 96,
+                    "OpImageDrefGather": 97,
+                    "OpImageRead": 98,
+                    "OpImageWrite": 99,
+                    "OpImage": 100,
+                    "OpImageQueryFormat": 101,
+                    "OpImageQueryOrder": 102,
+                    "OpImageQuerySizeLod": 103,
+                    "OpImageQuerySize": 104,
+                    "OpImageQueryLod": 105,
+                    "OpImageQueryLevels": 106,
+                    "OpImageQuerySamples": 107,
+                    "OpConvertFToU": 109,
+                    "OpConvertFToS": 110,
+                    "OpConvertSToF": 111,
+                    "OpConvertUToF": 112,
+                    "OpUConvert": 113,
+                    "OpSConvert": 114,
+                    "OpFConvert": 115,
+                    "OpQuantizeToF16": 116,
+                    "OpConvertPtrToU": 117,
+                    "OpSatConvertSToU": 118,
+                    "OpSatConvertUToS": 119,
+                    "OpConvertUToPtr": 120,
+                    "OpPtrCastToGeneric": 121,
+                    "OpGenericCastToPtr": 122,
+                    "OpGenericCastToPtrExplicit": 123,
+                    "OpBitcast": 124,
+                    "OpSNegate": 126,
+                    "OpFNegate": 127,
+                    "OpIAdd": 128,
+                    "OpFAdd": 129,
+                    "OpISub": 130,
+                    "OpFSub": 131,
+                    "OpIMul": 132,
+                    "OpFMul": 133,
+                    "OpUDiv": 134,
+                    "OpSDiv": 135,
+                    "OpFDiv": 136,
+                    "OpUMod": 137,
+                    "OpSRem": 138,
+                    "OpSMod": 139,
+                    "OpFRem": 140,
+                    "OpFMod": 141,
+                    "OpVectorTimesScalar": 142,
+                    "OpMatrixTimesScalar": 143,
+                    "OpVectorTimesMatrix": 144,
+                    "OpMatrixTimesVector": 145,
+                    "OpMatrixTimesMatrix": 146,
+                    "OpOuterProduct": 147,
+                    "OpDot": 148,
+                    "OpIAddCarry": 149,
+                    "OpISubBorrow": 150,
+                    "OpUMulExtended": 151,
+                    "OpSMulExtended": 152,
+                    "OpAny": 154,
+                    "OpAll": 155,
+                    "OpIsNan": 156,
+                    "OpIsInf": 157,
+                    "OpIsFinite": 158,
+                    "OpIsNormal": 159,
+                    "OpSignBitSet": 160,
+                    "OpLessOrGreater": 161,
+                    "OpOrdered": 162,
+                    "OpUnordered": 163,
+                    "OpLogicalEqual": 164,
+                    "OpLogicalNotEqual": 165,
+                    "OpLogicalOr": 166,
+                    "OpLogicalAnd": 167,
+                    "OpLogicalNot": 168,
+                    "OpSelect": 169,
+                    "OpIEqual": 170,
+                    "OpINotEqual": 171,
+                    "OpUGreaterThan": 172,
+                    "OpSGreaterThan": 173,
+                    "OpUGreaterThanEqual": 174,
+                    "OpSGreaterThanEqual": 175,
+                    "OpULessThan": 176,
+                    "OpSLessThan": 177,
+                    "OpULessThanEqual": 178,
+                    "OpSLessThanEqual": 179,
+                    "OpFOrdEqual": 180,
+                    "OpFUnordEqual": 181,
+                    "OpFOrdNotEqual": 182,
+                    "OpFUnordNotEqual": 183,
+                    "OpFOrdLessThan": 184,
+                    "OpFUnordLessThan": 185,
+                    "OpFOrdGreaterThan": 186,
+                    "OpFUnordGreaterThan": 187,
+                    "OpFOrdLessThanEqual": 188,
+                    "OpFUnordLessThanEqual": 189,
+                    "OpFOrdGreaterThanEqual": 190,
+                    "OpFUnordGreaterThanEqual": 191,
+                    "OpShiftRightLogical": 194,
+                    "OpShiftRightArithmetic": 195,
+                    "OpShiftLeftLogical": 196,
+                    "OpBitwiseOr": 197,
+                    "OpBitwiseXor": 198,
+                    "OpBitwiseAnd": 199,
+                    "OpNot": 200,
+                    "OpBitFieldInsert": 201,
+                    "OpBitFieldSExtract": 202,
+                    "OpBitFieldUExtract": 203,
+                    "OpBitReverse": 204,
+                    "OpBitCount": 205,
+                    "OpDPdx": 207,
+                    "OpDPdy": 208,
+                    "OpFwidth": 209,
+                    "OpDPdxFine": 210,
+                    "OpDPdyFine": 211,
+                    "OpFwidthFine": 212,
+                    "OpDPdxCoarse": 213,
+                    "OpDPdyCoarse": 214,
+                    "OpFwidthCoarse": 215,
+                    "OpEmitVertex": 218,
+                    "OpEndPrimitive": 219,
+                    "OpEmitStreamVertex": 220,
+                    "OpEndStreamPrimitive": 221,
+                    "OpControlBarrier": 224,
+                    "OpMemoryBarrier": 225,
+                    "OpAtomicLoad": 227,
+                    "OpAtomicStore": 228,
+                    "OpAtomicExchange": 229,
+                    "OpAtomicCompareExchange": 230,
+                    "OpAtomicCompareExchangeWeak": 231,
+                    "OpAtomicIIncrement": 232,
+                    "OpAtomicIDecrement": 233,
+                    "OpAtomicIAdd": 234,
+                    "OpAtomicISub": 235,
+                    "OpAtomicSMin": 236,
+                    "OpAtomicUMin": 237,
+                    "OpAtomicSMax": 238,
+                    "OpAtomicUMax": 239,
+                    "OpAtomicAnd": 240,
+                    "OpAtomicOr": 241,
+                    "OpAtomicXor": 242,
+                    "OpPhi": 245,
+                    "OpLoopMerge": 246,
+                    "OpSelectionMerge": 247,
+                    "OpLabel": 248,
+                    "OpBranch": 249,
+                    "OpBranchConditional": 250,
+                    "OpSwitch": 251,
+                    "OpKill": 252,
+                    "OpReturn": 253,
+                    "OpReturnValue": 254,
+                    "OpUnreachable": 255,
+                    "OpLifetimeStart": 256,
+                    "OpLifetimeStop": 257,
+                    "OpGroupAsyncCopy": 259,
+                    "OpGroupWaitEvents": 260,
+                    "OpGroupAll": 261,
+                    "OpGroupAny": 262,
+                    "OpGroupBroadcast": 263,
+                    "OpGroupIAdd": 264,
+                    "OpGroupFAdd": 265,
+                    "OpGroupFMin": 266,
+                    "OpGroupUMin": 267,
+                    "OpGroupSMin": 268,
+                    "OpGroupFMax": 269,
+                    "OpGroupUMax": 270,
+                    "OpGroupSMax": 271,
+                    "OpReadPipe": 274,
+                    "OpWritePipe": 275,
+                    "OpReservedReadPipe": 276,
+                    "OpReservedWritePipe": 277,
+                    "OpReserveReadPipePackets": 278,
+                    "OpReserveWritePipePackets": 279,
+                    "OpCommitReadPipe": 280,
+                    "OpCommitWritePipe": 281,
+                    "OpIsValidReserveId": 282,
+                    "OpGetNumPipePackets": 283,
+                    "OpGetMaxPipePackets": 284,
+                    "OpGroupReserveReadPipePackets": 285,
+                    "OpGroupReserveWritePipePackets": 286,
+                    "OpGroupCommitReadPipe": 287,
+                    "OpGroupCommitWritePipe": 288,
+                    "OpEnqueueMarker": 291,
+                    "OpEnqueueKernel": 292,
+                    "OpGetKernelNDrangeSubGroupCount": 293,
+                    "OpGetKernelNDrangeMaxSubGroupSize": 294,
+                    "OpGetKernelWorkGroupSize": 295,
+                    "OpGetKernelPreferredWorkGroupSizeMultiple": 296,
+                    "OpRetainEvent": 297,
+                    "OpReleaseEvent": 298,
+                    "OpCreateUserEvent": 299,
+                    "OpIsValidEvent": 300,
+                    "OpSetUserEventStatus": 301,
+                    "OpCaptureEventProfilingInfo": 302,
+                    "OpGetDefaultQueue": 303,
+                    "OpBuildNDRange": 304,
+                    "OpImageSparseSampleImplicitLod": 305,
+                    "OpImageSparseSampleExplicitLod": 306,
+                    "OpImageSparseSampleDrefImplicitLod": 307,
+                    "OpImageSparseSampleDrefExplicitLod": 308,
+                    "OpImageSparseSampleProjImplicitLod": 309,
+                    "OpImageSparseSampleProjExplicitLod": 310,
+                    "OpImageSparseSampleProjDrefImplicitLod": 311,
+                    "OpImageSparseSampleProjDrefExplicitLod": 312,
+                    "OpImageSparseFetch": 313,
+                    "OpImageSparseGather": 314,
+                    "OpImageSparseDrefGather": 315,
+                    "OpImageSparseTexelsResident": 316,
+                    "OpNoLine": 317,
+                    "OpAtomicFlagTestAndSet": 318,
+                    "OpAtomicFlagClear": 319,
+                    "OpImageSparseRead": 320
+                }
+            }
+        ]
+    }
+}
+
diff --git a/include/spirv/1.0/spirv.lua b/include/spirv/1.0/spirv.lua
new file mode 100644 (file)
index 0000000..00ea7a0
--- /dev/null
@@ -0,0 +1,858 @@
+-- Copyright (c) 2014-2016 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.
+-- 
+-- MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+-- STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+-- HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+-- 
+-- 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 header is automatically generated by the same tool that creates
+-- the Binary Section of the SPIR-V specification.
+
+-- Enumeration tokens for SPIR-V, in various styles:
+--   C, C++, C++11, JSON, Lua, Python
+-- 
+-- - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+-- - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+-- - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+-- - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
+-- - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
+-- 
+-- Some tokens act like mask values, which can be OR'd together,
+-- while others are mutually exclusive.  The mask-like ones have
+-- "Mask" in their name, and a parallel enum that has the shift
+-- amount (1 << x) for each corresponding enumerant.
+
+spv = {
+    MagicNumber = 0x07230203,
+    Version = 0x00010000,
+    Revision = 4,
+    OpCodeMask = 0xffff,
+    WordCountShift = 16,
+
+    SourceLanguage = {
+        Unknown = 0,
+        ESSL = 1,
+        GLSL = 2,
+        OpenCL_C = 3,
+        OpenCL_CPP = 4,
+    },
+
+    ExecutionModel = {
+        Vertex = 0,
+        TessellationControl = 1,
+        TessellationEvaluation = 2,
+        Geometry = 3,
+        Fragment = 4,
+        GLCompute = 5,
+        Kernel = 6,
+    },
+
+    AddressingModel = {
+        Logical = 0,
+        Physical32 = 1,
+        Physical64 = 2,
+    },
+
+    MemoryModel = {
+        Simple = 0,
+        GLSL450 = 1,
+        OpenCL = 2,
+    },
+
+    ExecutionMode = {
+        Invocations = 0,
+        SpacingEqual = 1,
+        SpacingFractionalEven = 2,
+        SpacingFractionalOdd = 3,
+        VertexOrderCw = 4,
+        VertexOrderCcw = 5,
+        PixelCenterInteger = 6,
+        OriginUpperLeft = 7,
+        OriginLowerLeft = 8,
+        EarlyFragmentTests = 9,
+        PointMode = 10,
+        Xfb = 11,
+        DepthReplacing = 12,
+        DepthGreater = 14,
+        DepthLess = 15,
+        DepthUnchanged = 16,
+        LocalSize = 17,
+        LocalSizeHint = 18,
+        InputPoints = 19,
+        InputLines = 20,
+        InputLinesAdjacency = 21,
+        Triangles = 22,
+        InputTrianglesAdjacency = 23,
+        Quads = 24,
+        Isolines = 25,
+        OutputVertices = 26,
+        OutputPoints = 27,
+        OutputLineStrip = 28,
+        OutputTriangleStrip = 29,
+        VecTypeHint = 30,
+        ContractionOff = 31,
+    },
+
+    StorageClass = {
+        UniformConstant = 0,
+        Input = 1,
+        Uniform = 2,
+        Output = 3,
+        Workgroup = 4,
+        CrossWorkgroup = 5,
+        Private = 6,
+        Function = 7,
+        Generic = 8,
+        PushConstant = 9,
+        AtomicCounter = 10,
+        Image = 11,
+    },
+
+    Dim = {
+        Dim1D = 0,
+        Dim2D = 1,
+        Dim3D = 2,
+        Cube = 3,
+        Rect = 4,
+        Buffer = 5,
+        SubpassData = 6,
+    },
+
+    SamplerAddressingMode = {
+        None = 0,
+        ClampToEdge = 1,
+        Clamp = 2,
+        Repeat = 3,
+        RepeatMirrored = 4,
+    },
+
+    SamplerFilterMode = {
+        Nearest = 0,
+        Linear = 1,
+    },
+
+    ImageFormat = {
+        Unknown = 0,
+        Rgba32f = 1,
+        Rgba16f = 2,
+        R32f = 3,
+        Rgba8 = 4,
+        Rgba8Snorm = 5,
+        Rg32f = 6,
+        Rg16f = 7,
+        R11fG11fB10f = 8,
+        R16f = 9,
+        Rgba16 = 10,
+        Rgb10A2 = 11,
+        Rg16 = 12,
+        Rg8 = 13,
+        R16 = 14,
+        R8 = 15,
+        Rgba16Snorm = 16,
+        Rg16Snorm = 17,
+        Rg8Snorm = 18,
+        R16Snorm = 19,
+        R8Snorm = 20,
+        Rgba32i = 21,
+        Rgba16i = 22,
+        Rgba8i = 23,
+        R32i = 24,
+        Rg32i = 25,
+        Rg16i = 26,
+        Rg8i = 27,
+        R16i = 28,
+        R8i = 29,
+        Rgba32ui = 30,
+        Rgba16ui = 31,
+        Rgba8ui = 32,
+        R32ui = 33,
+        Rgb10a2ui = 34,
+        Rg32ui = 35,
+        Rg16ui = 36,
+        Rg8ui = 37,
+        R16ui = 38,
+        R8ui = 39,
+    },
+
+    ImageChannelOrder = {
+        R = 0,
+        A = 1,
+        RG = 2,
+        RA = 3,
+        RGB = 4,
+        RGBA = 5,
+        BGRA = 6,
+        ARGB = 7,
+        Intensity = 8,
+        Luminance = 9,
+        Rx = 10,
+        RGx = 11,
+        RGBx = 12,
+        Depth = 13,
+        DepthStencil = 14,
+        sRGB = 15,
+        sRGBx = 16,
+        sRGBA = 17,
+        sBGRA = 18,
+    },
+
+    ImageChannelDataType = {
+        SnormInt8 = 0,
+        SnormInt16 = 1,
+        UnormInt8 = 2,
+        UnormInt16 = 3,
+        UnormShort565 = 4,
+        UnormShort555 = 5,
+        UnormInt101010 = 6,
+        SignedInt8 = 7,
+        SignedInt16 = 8,
+        SignedInt32 = 9,
+        UnsignedInt8 = 10,
+        UnsignedInt16 = 11,
+        UnsignedInt32 = 12,
+        HalfFloat = 13,
+        Float = 14,
+        UnormInt24 = 15,
+        UnormInt101010_2 = 16,
+    },
+
+    ImageOperandsShift = {
+        Bias = 0,
+        Lod = 1,
+        Grad = 2,
+        ConstOffset = 3,
+        Offset = 4,
+        ConstOffsets = 5,
+        Sample = 6,
+        MinLod = 7,
+    },
+
+    ImageOperandsMask = {
+        MaskNone = 0,
+        Bias = 0x00000001,
+        Lod = 0x00000002,
+        Grad = 0x00000004,
+        ConstOffset = 0x00000008,
+        Offset = 0x00000010,
+        ConstOffsets = 0x00000020,
+        Sample = 0x00000040,
+        MinLod = 0x00000080,
+    },
+
+    FPFastMathModeShift = {
+        NotNaN = 0,
+        NotInf = 1,
+        NSZ = 2,
+        AllowRecip = 3,
+        Fast = 4,
+    },
+
+    FPFastMathModeMask = {
+        MaskNone = 0,
+        NotNaN = 0x00000001,
+        NotInf = 0x00000002,
+        NSZ = 0x00000004,
+        AllowRecip = 0x00000008,
+        Fast = 0x00000010,
+    },
+
+    FPRoundingMode = {
+        RTE = 0,
+        RTZ = 1,
+        RTP = 2,
+        RTN = 3,
+    },
+
+    LinkageType = {
+        Export = 0,
+        Import = 1,
+    },
+
+    AccessQualifier = {
+        ReadOnly = 0,
+        WriteOnly = 1,
+        ReadWrite = 2,
+    },
+
+    FunctionParameterAttribute = {
+        Zext = 0,
+        Sext = 1,
+        ByVal = 2,
+        Sret = 3,
+        NoAlias = 4,
+        NoCapture = 5,
+        NoWrite = 6,
+        NoReadWrite = 7,
+    },
+
+    Decoration = {
+        RelaxedPrecision = 0,
+        SpecId = 1,
+        Block = 2,
+        BufferBlock = 3,
+        RowMajor = 4,
+        ColMajor = 5,
+        ArrayStride = 6,
+        MatrixStride = 7,
+        GLSLShared = 8,
+        GLSLPacked = 9,
+        CPacked = 10,
+        BuiltIn = 11,
+        NoPerspective = 13,
+        Flat = 14,
+        Patch = 15,
+        Centroid = 16,
+        Sample = 17,
+        Invariant = 18,
+        Restrict = 19,
+        Aliased = 20,
+        Volatile = 21,
+        Constant = 22,
+        Coherent = 23,
+        NonWritable = 24,
+        NonReadable = 25,
+        Uniform = 26,
+        SaturatedConversion = 28,
+        Stream = 29,
+        Location = 30,
+        Component = 31,
+        Index = 32,
+        Binding = 33,
+        DescriptorSet = 34,
+        Offset = 35,
+        XfbBuffer = 36,
+        XfbStride = 37,
+        FuncParamAttr = 38,
+        FPRoundingMode = 39,
+        FPFastMathMode = 40,
+        LinkageAttributes = 41,
+        NoContraction = 42,
+        InputAttachmentIndex = 43,
+        Alignment = 44,
+    },
+
+    BuiltIn = {
+        Position = 0,
+        PointSize = 1,
+        ClipDistance = 3,
+        CullDistance = 4,
+        VertexId = 5,
+        InstanceId = 6,
+        PrimitiveId = 7,
+        InvocationId = 8,
+        Layer = 9,
+        ViewportIndex = 10,
+        TessLevelOuter = 11,
+        TessLevelInner = 12,
+        TessCoord = 13,
+        PatchVertices = 14,
+        FragCoord = 15,
+        PointCoord = 16,
+        FrontFacing = 17,
+        SampleId = 18,
+        SamplePosition = 19,
+        SampleMask = 20,
+        FragDepth = 22,
+        HelperInvocation = 23,
+        NumWorkgroups = 24,
+        WorkgroupSize = 25,
+        WorkgroupId = 26,
+        LocalInvocationId = 27,
+        GlobalInvocationId = 28,
+        LocalInvocationIndex = 29,
+        WorkDim = 30,
+        GlobalSize = 31,
+        EnqueuedWorkgroupSize = 32,
+        GlobalOffset = 33,
+        GlobalLinearId = 34,
+        SubgroupSize = 36,
+        SubgroupMaxSize = 37,
+        NumSubgroups = 38,
+        NumEnqueuedSubgroups = 39,
+        SubgroupId = 40,
+        SubgroupLocalInvocationId = 41,
+        VertexIndex = 42,
+        InstanceIndex = 43,
+    },
+
+    SelectionControlShift = {
+        Flatten = 0,
+        DontFlatten = 1,
+    },
+
+    SelectionControlMask = {
+        MaskNone = 0,
+        Flatten = 0x00000001,
+        DontFlatten = 0x00000002,
+    },
+
+    LoopControlShift = {
+        Unroll = 0,
+        DontUnroll = 1,
+    },
+
+    LoopControlMask = {
+        MaskNone = 0,
+        Unroll = 0x00000001,
+        DontUnroll = 0x00000002,
+    },
+
+    FunctionControlShift = {
+        Inline = 0,
+        DontInline = 1,
+        Pure = 2,
+        Const = 3,
+    },
+
+    FunctionControlMask = {
+        MaskNone = 0,
+        Inline = 0x00000001,
+        DontInline = 0x00000002,
+        Pure = 0x00000004,
+        Const = 0x00000008,
+    },
+
+    MemorySemanticsShift = {
+        Acquire = 1,
+        Release = 2,
+        AcquireRelease = 3,
+        SequentiallyConsistent = 4,
+        UniformMemory = 6,
+        SubgroupMemory = 7,
+        WorkgroupMemory = 8,
+        CrossWorkgroupMemory = 9,
+        AtomicCounterMemory = 10,
+        ImageMemory = 11,
+    },
+
+    MemorySemanticsMask = {
+        MaskNone = 0,
+        Acquire = 0x00000002,
+        Release = 0x00000004,
+        AcquireRelease = 0x00000008,
+        SequentiallyConsistent = 0x00000010,
+        UniformMemory = 0x00000040,
+        SubgroupMemory = 0x00000080,
+        WorkgroupMemory = 0x00000100,
+        CrossWorkgroupMemory = 0x00000200,
+        AtomicCounterMemory = 0x00000400,
+        ImageMemory = 0x00000800,
+    },
+
+    MemoryAccessShift = {
+        Volatile = 0,
+        Aligned = 1,
+        Nontemporal = 2,
+    },
+
+    MemoryAccessMask = {
+        MaskNone = 0,
+        Volatile = 0x00000001,
+        Aligned = 0x00000002,
+        Nontemporal = 0x00000004,
+    },
+
+    Scope = {
+        CrossDevice = 0,
+        Device = 1,
+        Workgroup = 2,
+        Subgroup = 3,
+        Invocation = 4,
+    },
+
+    GroupOperation = {
+        Reduce = 0,
+        InclusiveScan = 1,
+        ExclusiveScan = 2,
+    },
+
+    KernelEnqueueFlags = {
+        NoWait = 0,
+        WaitKernel = 1,
+        WaitWorkGroup = 2,
+    },
+
+    KernelProfilingInfoShift = {
+        CmdExecTime = 0,
+    },
+
+    KernelProfilingInfoMask = {
+        MaskNone = 0,
+        CmdExecTime = 0x00000001,
+    },
+
+    Capability = {
+        Matrix = 0,
+        Shader = 1,
+        Geometry = 2,
+        Tessellation = 3,
+        Addresses = 4,
+        Linkage = 5,
+        Kernel = 6,
+        Vector16 = 7,
+        Float16Buffer = 8,
+        Float16 = 9,
+        Float64 = 10,
+        Int64 = 11,
+        Int64Atomics = 12,
+        ImageBasic = 13,
+        ImageReadWrite = 14,
+        ImageMipmap = 15,
+        Pipes = 17,
+        Groups = 18,
+        DeviceEnqueue = 19,
+        LiteralSampler = 20,
+        AtomicStorage = 21,
+        Int16 = 22,
+        TessellationPointSize = 23,
+        GeometryPointSize = 24,
+        ImageGatherExtended = 25,
+        StorageImageMultisample = 27,
+        UniformBufferArrayDynamicIndexing = 28,
+        SampledImageArrayDynamicIndexing = 29,
+        StorageBufferArrayDynamicIndexing = 30,
+        StorageImageArrayDynamicIndexing = 31,
+        ClipDistance = 32,
+        CullDistance = 33,
+        ImageCubeArray = 34,
+        SampleRateShading = 35,
+        ImageRect = 36,
+        SampledRect = 37,
+        GenericPointer = 38,
+        Int8 = 39,
+        InputAttachment = 40,
+        SparseResidency = 41,
+        MinLod = 42,
+        Sampled1D = 43,
+        Image1D = 44,
+        SampledCubeArray = 45,
+        SampledBuffer = 46,
+        ImageBuffer = 47,
+        ImageMSArray = 48,
+        StorageImageExtendedFormats = 49,
+        ImageQuery = 50,
+        DerivativeControl = 51,
+        InterpolationFunction = 52,
+        TransformFeedback = 53,
+        GeometryStreams = 54,
+        StorageImageReadWithoutFormat = 55,
+        StorageImageWriteWithoutFormat = 56,
+        MultiViewport = 57,
+    },
+
+    Op = {
+        OpNop = 0,
+        OpUndef = 1,
+        OpSourceContinued = 2,
+        OpSource = 3,
+        OpSourceExtension = 4,
+        OpName = 5,
+        OpMemberName = 6,
+        OpString = 7,
+        OpLine = 8,
+        OpExtension = 10,
+        OpExtInstImport = 11,
+        OpExtInst = 12,
+        OpMemoryModel = 14,
+        OpEntryPoint = 15,
+        OpExecutionMode = 16,
+        OpCapability = 17,
+        OpTypeVoid = 19,
+        OpTypeBool = 20,
+        OpTypeInt = 21,
+        OpTypeFloat = 22,
+        OpTypeVector = 23,
+        OpTypeMatrix = 24,
+        OpTypeImage = 25,
+        OpTypeSampler = 26,
+        OpTypeSampledImage = 27,
+        OpTypeArray = 28,
+        OpTypeRuntimeArray = 29,
+        OpTypeStruct = 30,
+        OpTypeOpaque = 31,
+        OpTypePointer = 32,
+        OpTypeFunction = 33,
+        OpTypeEvent = 34,
+        OpTypeDeviceEvent = 35,
+        OpTypeReserveId = 36,
+        OpTypeQueue = 37,
+        OpTypePipe = 38,
+        OpTypeForwardPointer = 39,
+        OpConstantTrue = 41,
+        OpConstantFalse = 42,
+        OpConstant = 43,
+        OpConstantComposite = 44,
+        OpConstantSampler = 45,
+        OpConstantNull = 46,
+        OpSpecConstantTrue = 48,
+        OpSpecConstantFalse = 49,
+        OpSpecConstant = 50,
+        OpSpecConstantComposite = 51,
+        OpSpecConstantOp = 52,
+        OpFunction = 54,
+        OpFunctionParameter = 55,
+        OpFunctionEnd = 56,
+        OpFunctionCall = 57,
+        OpVariable = 59,
+        OpImageTexelPointer = 60,
+        OpLoad = 61,
+        OpStore = 62,
+        OpCopyMemory = 63,
+        OpCopyMemorySized = 64,
+        OpAccessChain = 65,
+        OpInBoundsAccessChain = 66,
+        OpPtrAccessChain = 67,
+        OpArrayLength = 68,
+        OpGenericPtrMemSemantics = 69,
+        OpInBoundsPtrAccessChain = 70,
+        OpDecorate = 71,
+        OpMemberDecorate = 72,
+        OpDecorationGroup = 73,
+        OpGroupDecorate = 74,
+        OpGroupMemberDecorate = 75,
+        OpVectorExtractDynamic = 77,
+        OpVectorInsertDynamic = 78,
+        OpVectorShuffle = 79,
+        OpCompositeConstruct = 80,
+        OpCompositeExtract = 81,
+        OpCompositeInsert = 82,
+        OpCopyObject = 83,
+        OpTranspose = 84,
+        OpSampledImage = 86,
+        OpImageSampleImplicitLod = 87,
+        OpImageSampleExplicitLod = 88,
+        OpImageSampleDrefImplicitLod = 89,
+        OpImageSampleDrefExplicitLod = 90,
+        OpImageSampleProjImplicitLod = 91,
+        OpImageSampleProjExplicitLod = 92,
+        OpImageSampleProjDrefImplicitLod = 93,
+        OpImageSampleProjDrefExplicitLod = 94,
+        OpImageFetch = 95,
+        OpImageGather = 96,
+        OpImageDrefGather = 97,
+        OpImageRead = 98,
+        OpImageWrite = 99,
+        OpImage = 100,
+        OpImageQueryFormat = 101,
+        OpImageQueryOrder = 102,
+        OpImageQuerySizeLod = 103,
+        OpImageQuerySize = 104,
+        OpImageQueryLod = 105,
+        OpImageQueryLevels = 106,
+        OpImageQuerySamples = 107,
+        OpConvertFToU = 109,
+        OpConvertFToS = 110,
+        OpConvertSToF = 111,
+        OpConvertUToF = 112,
+        OpUConvert = 113,
+        OpSConvert = 114,
+        OpFConvert = 115,
+        OpQuantizeToF16 = 116,
+        OpConvertPtrToU = 117,
+        OpSatConvertSToU = 118,
+        OpSatConvertUToS = 119,
+        OpConvertUToPtr = 120,
+        OpPtrCastToGeneric = 121,
+        OpGenericCastToPtr = 122,
+        OpGenericCastToPtrExplicit = 123,
+        OpBitcast = 124,
+        OpSNegate = 126,
+        OpFNegate = 127,
+        OpIAdd = 128,
+        OpFAdd = 129,
+        OpISub = 130,
+        OpFSub = 131,
+        OpIMul = 132,
+        OpFMul = 133,
+        OpUDiv = 134,
+        OpSDiv = 135,
+        OpFDiv = 136,
+        OpUMod = 137,
+        OpSRem = 138,
+        OpSMod = 139,
+        OpFRem = 140,
+        OpFMod = 141,
+        OpVectorTimesScalar = 142,
+        OpMatrixTimesScalar = 143,
+        OpVectorTimesMatrix = 144,
+        OpMatrixTimesVector = 145,
+        OpMatrixTimesMatrix = 146,
+        OpOuterProduct = 147,
+        OpDot = 148,
+        OpIAddCarry = 149,
+        OpISubBorrow = 150,
+        OpUMulExtended = 151,
+        OpSMulExtended = 152,
+        OpAny = 154,
+        OpAll = 155,
+        OpIsNan = 156,
+        OpIsInf = 157,
+        OpIsFinite = 158,
+        OpIsNormal = 159,
+        OpSignBitSet = 160,
+        OpLessOrGreater = 161,
+        OpOrdered = 162,
+        OpUnordered = 163,
+        OpLogicalEqual = 164,
+        OpLogicalNotEqual = 165,
+        OpLogicalOr = 166,
+        OpLogicalAnd = 167,
+        OpLogicalNot = 168,
+        OpSelect = 169,
+        OpIEqual = 170,
+        OpINotEqual = 171,
+        OpUGreaterThan = 172,
+        OpSGreaterThan = 173,
+        OpUGreaterThanEqual = 174,
+        OpSGreaterThanEqual = 175,
+        OpULessThan = 176,
+        OpSLessThan = 177,
+        OpULessThanEqual = 178,
+        OpSLessThanEqual = 179,
+        OpFOrdEqual = 180,
+        OpFUnordEqual = 181,
+        OpFOrdNotEqual = 182,
+        OpFUnordNotEqual = 183,
+        OpFOrdLessThan = 184,
+        OpFUnordLessThan = 185,
+        OpFOrdGreaterThan = 186,
+        OpFUnordGreaterThan = 187,
+        OpFOrdLessThanEqual = 188,
+        OpFUnordLessThanEqual = 189,
+        OpFOrdGreaterThanEqual = 190,
+        OpFUnordGreaterThanEqual = 191,
+        OpShiftRightLogical = 194,
+        OpShiftRightArithmetic = 195,
+        OpShiftLeftLogical = 196,
+        OpBitwiseOr = 197,
+        OpBitwiseXor = 198,
+        OpBitwiseAnd = 199,
+        OpNot = 200,
+        OpBitFieldInsert = 201,
+        OpBitFieldSExtract = 202,
+        OpBitFieldUExtract = 203,
+        OpBitReverse = 204,
+        OpBitCount = 205,
+        OpDPdx = 207,
+        OpDPdy = 208,
+        OpFwidth = 209,
+        OpDPdxFine = 210,
+        OpDPdyFine = 211,
+        OpFwidthFine = 212,
+        OpDPdxCoarse = 213,
+        OpDPdyCoarse = 214,
+        OpFwidthCoarse = 215,
+        OpEmitVertex = 218,
+        OpEndPrimitive = 219,
+        OpEmitStreamVertex = 220,
+        OpEndStreamPrimitive = 221,
+        OpControlBarrier = 224,
+        OpMemoryBarrier = 225,
+        OpAtomicLoad = 227,
+        OpAtomicStore = 228,
+        OpAtomicExchange = 229,
+        OpAtomicCompareExchange = 230,
+        OpAtomicCompareExchangeWeak = 231,
+        OpAtomicIIncrement = 232,
+        OpAtomicIDecrement = 233,
+        OpAtomicIAdd = 234,
+        OpAtomicISub = 235,
+        OpAtomicSMin = 236,
+        OpAtomicUMin = 237,
+        OpAtomicSMax = 238,
+        OpAtomicUMax = 239,
+        OpAtomicAnd = 240,
+        OpAtomicOr = 241,
+        OpAtomicXor = 242,
+        OpPhi = 245,
+        OpLoopMerge = 246,
+        OpSelectionMerge = 247,
+        OpLabel = 248,
+        OpBranch = 249,
+        OpBranchConditional = 250,
+        OpSwitch = 251,
+        OpKill = 252,
+        OpReturn = 253,
+        OpReturnValue = 254,
+        OpUnreachable = 255,
+        OpLifetimeStart = 256,
+        OpLifetimeStop = 257,
+        OpGroupAsyncCopy = 259,
+        OpGroupWaitEvents = 260,
+        OpGroupAll = 261,
+        OpGroupAny = 262,
+        OpGroupBroadcast = 263,
+        OpGroupIAdd = 264,
+        OpGroupFAdd = 265,
+        OpGroupFMin = 266,
+        OpGroupUMin = 267,
+        OpGroupSMin = 268,
+        OpGroupFMax = 269,
+        OpGroupUMax = 270,
+        OpGroupSMax = 271,
+        OpReadPipe = 274,
+        OpWritePipe = 275,
+        OpReservedReadPipe = 276,
+        OpReservedWritePipe = 277,
+        OpReserveReadPipePackets = 278,
+        OpReserveWritePipePackets = 279,
+        OpCommitReadPipe = 280,
+        OpCommitWritePipe = 281,
+        OpIsValidReserveId = 282,
+        OpGetNumPipePackets = 283,
+        OpGetMaxPipePackets = 284,
+        OpGroupReserveReadPipePackets = 285,
+        OpGroupReserveWritePipePackets = 286,
+        OpGroupCommitReadPipe = 287,
+        OpGroupCommitWritePipe = 288,
+        OpEnqueueMarker = 291,
+        OpEnqueueKernel = 292,
+        OpGetKernelNDrangeSubGroupCount = 293,
+        OpGetKernelNDrangeMaxSubGroupSize = 294,
+        OpGetKernelWorkGroupSize = 295,
+        OpGetKernelPreferredWorkGroupSizeMultiple = 296,
+        OpRetainEvent = 297,
+        OpReleaseEvent = 298,
+        OpCreateUserEvent = 299,
+        OpIsValidEvent = 300,
+        OpSetUserEventStatus = 301,
+        OpCaptureEventProfilingInfo = 302,
+        OpGetDefaultQueue = 303,
+        OpBuildNDRange = 304,
+        OpImageSparseSampleImplicitLod = 305,
+        OpImageSparseSampleExplicitLod = 306,
+        OpImageSparseSampleDrefImplicitLod = 307,
+        OpImageSparseSampleDrefExplicitLod = 308,
+        OpImageSparseSampleProjImplicitLod = 309,
+        OpImageSparseSampleProjExplicitLod = 310,
+        OpImageSparseSampleProjDrefImplicitLod = 311,
+        OpImageSparseSampleProjDrefExplicitLod = 312,
+        OpImageSparseFetch = 313,
+        OpImageSparseGather = 314,
+        OpImageSparseDrefGather = 315,
+        OpImageSparseTexelsResident = 316,
+        OpNoLine = 317,
+        OpAtomicFlagTestAndSet = 318,
+        OpAtomicFlagClear = 319,
+        OpImageSparseRead = 320,
+    },
+
+}
+
diff --git a/include/spirv/1.0/spirv.py b/include/spirv/1.0/spirv.py
new file mode 100644 (file)
index 0000000..fad772e
--- /dev/null
@@ -0,0 +1,858 @@
+# Copyright (c) 2014-2016 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.
+# 
+# MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+# STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+# HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+# 
+# 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 header is automatically generated by the same tool that creates
+# the Binary Section of the SPIR-V specification.
+
+# Enumeration tokens for SPIR-V, in various styles:
+#   C, C++, C++11, JSON, Lua, Python
+# 
+# - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+# - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+# - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+# - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
+# - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
+# 
+# Some tokens act like mask values, which can be OR'd together,
+# while others are mutually exclusive.  The mask-like ones have
+# "Mask" in their name, and a parallel enum that has the shift
+# amount (1 << x) for each corresponding enumerant.
+
+spv = {
+    'MagicNumber' : 0x07230203,
+    'Version' : 0x00010000,
+    'Revision' : 4,
+    'OpCodeMask' : 0xffff,
+    'WordCountShift' : 16,
+
+    'SourceLanguage' : {
+        'Unknown' : 0,
+        'ESSL' : 1,
+        'GLSL' : 2,
+        'OpenCL_C' : 3,
+        'OpenCL_CPP' : 4,
+    },
+
+    'ExecutionModel' : {
+        'Vertex' : 0,
+        'TessellationControl' : 1,
+        'TessellationEvaluation' : 2,
+        'Geometry' : 3,
+        'Fragment' : 4,
+        'GLCompute' : 5,
+        'Kernel' : 6,
+    },
+
+    'AddressingModel' : {
+        'Logical' : 0,
+        'Physical32' : 1,
+        'Physical64' : 2,
+    },
+
+    'MemoryModel' : {
+        'Simple' : 0,
+        'GLSL450' : 1,
+        'OpenCL' : 2,
+    },
+
+    'ExecutionMode' : {
+        'Invocations' : 0,
+        'SpacingEqual' : 1,
+        'SpacingFractionalEven' : 2,
+        'SpacingFractionalOdd' : 3,
+        'VertexOrderCw' : 4,
+        'VertexOrderCcw' : 5,
+        'PixelCenterInteger' : 6,
+        'OriginUpperLeft' : 7,
+        'OriginLowerLeft' : 8,
+        'EarlyFragmentTests' : 9,
+        'PointMode' : 10,
+        'Xfb' : 11,
+        'DepthReplacing' : 12,
+        'DepthGreater' : 14,
+        'DepthLess' : 15,
+        'DepthUnchanged' : 16,
+        'LocalSize' : 17,
+        'LocalSizeHint' : 18,
+        'InputPoints' : 19,
+        'InputLines' : 20,
+        'InputLinesAdjacency' : 21,
+        'Triangles' : 22,
+        'InputTrianglesAdjacency' : 23,
+        'Quads' : 24,
+        'Isolines' : 25,
+        'OutputVertices' : 26,
+        'OutputPoints' : 27,
+        'OutputLineStrip' : 28,
+        'OutputTriangleStrip' : 29,
+        'VecTypeHint' : 30,
+        'ContractionOff' : 31,
+    },
+
+    'StorageClass' : {
+        'UniformConstant' : 0,
+        'Input' : 1,
+        'Uniform' : 2,
+        'Output' : 3,
+        'Workgroup' : 4,
+        'CrossWorkgroup' : 5,
+        'Private' : 6,
+        'Function' : 7,
+        'Generic' : 8,
+        'PushConstant' : 9,
+        'AtomicCounter' : 10,
+        'Image' : 11,
+    },
+
+    'Dim' : {
+        'Dim1D' : 0,
+        'Dim2D' : 1,
+        'Dim3D' : 2,
+        'Cube' : 3,
+        'Rect' : 4,
+        'Buffer' : 5,
+        'SubpassData' : 6,
+    },
+
+    'SamplerAddressingMode' : {
+        'None' : 0,
+        'ClampToEdge' : 1,
+        'Clamp' : 2,
+        'Repeat' : 3,
+        'RepeatMirrored' : 4,
+    },
+
+    'SamplerFilterMode' : {
+        'Nearest' : 0,
+        'Linear' : 1,
+    },
+
+    'ImageFormat' : {
+        'Unknown' : 0,
+        'Rgba32f' : 1,
+        'Rgba16f' : 2,
+        'R32f' : 3,
+        'Rgba8' : 4,
+        'Rgba8Snorm' : 5,
+        'Rg32f' : 6,
+        'Rg16f' : 7,
+        'R11fG11fB10f' : 8,
+        'R16f' : 9,
+        'Rgba16' : 10,
+        'Rgb10A2' : 11,
+        'Rg16' : 12,
+        'Rg8' : 13,
+        'R16' : 14,
+        'R8' : 15,
+        'Rgba16Snorm' : 16,
+        'Rg16Snorm' : 17,
+        'Rg8Snorm' : 18,
+        'R16Snorm' : 19,
+        'R8Snorm' : 20,
+        'Rgba32i' : 21,
+        'Rgba16i' : 22,
+        'Rgba8i' : 23,
+        'R32i' : 24,
+        'Rg32i' : 25,
+        'Rg16i' : 26,
+        'Rg8i' : 27,
+        'R16i' : 28,
+        'R8i' : 29,
+        'Rgba32ui' : 30,
+        'Rgba16ui' : 31,
+        'Rgba8ui' : 32,
+        'R32ui' : 33,
+        'Rgb10a2ui' : 34,
+        'Rg32ui' : 35,
+        'Rg16ui' : 36,
+        'Rg8ui' : 37,
+        'R16ui' : 38,
+        'R8ui' : 39,
+    },
+
+    'ImageChannelOrder' : {
+        'R' : 0,
+        'A' : 1,
+        'RG' : 2,
+        'RA' : 3,
+        'RGB' : 4,
+        'RGBA' : 5,
+        'BGRA' : 6,
+        'ARGB' : 7,
+        'Intensity' : 8,
+        'Luminance' : 9,
+        'Rx' : 10,
+        'RGx' : 11,
+        'RGBx' : 12,
+        'Depth' : 13,
+        'DepthStencil' : 14,
+        'sRGB' : 15,
+        'sRGBx' : 16,
+        'sRGBA' : 17,
+        'sBGRA' : 18,
+    },
+
+    'ImageChannelDataType' : {
+        'SnormInt8' : 0,
+        'SnormInt16' : 1,
+        'UnormInt8' : 2,
+        'UnormInt16' : 3,
+        'UnormShort565' : 4,
+        'UnormShort555' : 5,
+        'UnormInt101010' : 6,
+        'SignedInt8' : 7,
+        'SignedInt16' : 8,
+        'SignedInt32' : 9,
+        'UnsignedInt8' : 10,
+        'UnsignedInt16' : 11,
+        'UnsignedInt32' : 12,
+        'HalfFloat' : 13,
+        'Float' : 14,
+        'UnormInt24' : 15,
+        'UnormInt101010_2' : 16,
+    },
+
+    'ImageOperandsShift' : {
+        'Bias' : 0,
+        'Lod' : 1,
+        'Grad' : 2,
+        'ConstOffset' : 3,
+        'Offset' : 4,
+        'ConstOffsets' : 5,
+        'Sample' : 6,
+        'MinLod' : 7,
+    },
+
+    'ImageOperandsMask' : {
+        'MaskNone' : 0,
+        'Bias' : 0x00000001,
+        'Lod' : 0x00000002,
+        'Grad' : 0x00000004,
+        'ConstOffset' : 0x00000008,
+        'Offset' : 0x00000010,
+        'ConstOffsets' : 0x00000020,
+        'Sample' : 0x00000040,
+        'MinLod' : 0x00000080,
+    },
+
+    'FPFastMathModeShift' : {
+        'NotNaN' : 0,
+        'NotInf' : 1,
+        'NSZ' : 2,
+        'AllowRecip' : 3,
+        'Fast' : 4,
+    },
+
+    'FPFastMathModeMask' : {
+        'MaskNone' : 0,
+        'NotNaN' : 0x00000001,
+        'NotInf' : 0x00000002,
+        'NSZ' : 0x00000004,
+        'AllowRecip' : 0x00000008,
+        'Fast' : 0x00000010,
+    },
+
+    'FPRoundingMode' : {
+        'RTE' : 0,
+        'RTZ' : 1,
+        'RTP' : 2,
+        'RTN' : 3,
+    },
+
+    'LinkageType' : {
+        'Export' : 0,
+        'Import' : 1,
+    },
+
+    'AccessQualifier' : {
+        'ReadOnly' : 0,
+        'WriteOnly' : 1,
+        'ReadWrite' : 2,
+    },
+
+    'FunctionParameterAttribute' : {
+        'Zext' : 0,
+        'Sext' : 1,
+        'ByVal' : 2,
+        'Sret' : 3,
+        'NoAlias' : 4,
+        'NoCapture' : 5,
+        'NoWrite' : 6,
+        'NoReadWrite' : 7,
+    },
+
+    'Decoration' : {
+        'RelaxedPrecision' : 0,
+        'SpecId' : 1,
+        'Block' : 2,
+        'BufferBlock' : 3,
+        'RowMajor' : 4,
+        'ColMajor' : 5,
+        'ArrayStride' : 6,
+        'MatrixStride' : 7,
+        'GLSLShared' : 8,
+        'GLSLPacked' : 9,
+        'CPacked' : 10,
+        'BuiltIn' : 11,
+        'NoPerspective' : 13,
+        'Flat' : 14,
+        'Patch' : 15,
+        'Centroid' : 16,
+        'Sample' : 17,
+        'Invariant' : 18,
+        'Restrict' : 19,
+        'Aliased' : 20,
+        'Volatile' : 21,
+        'Constant' : 22,
+        'Coherent' : 23,
+        'NonWritable' : 24,
+        'NonReadable' : 25,
+        'Uniform' : 26,
+        'SaturatedConversion' : 28,
+        'Stream' : 29,
+        'Location' : 30,
+        'Component' : 31,
+        'Index' : 32,
+        'Binding' : 33,
+        'DescriptorSet' : 34,
+        'Offset' : 35,
+        'XfbBuffer' : 36,
+        'XfbStride' : 37,
+        'FuncParamAttr' : 38,
+        'FPRoundingMode' : 39,
+        'FPFastMathMode' : 40,
+        'LinkageAttributes' : 41,
+        'NoContraction' : 42,
+        'InputAttachmentIndex' : 43,
+        'Alignment' : 44,
+    },
+
+    'BuiltIn' : {
+        'Position' : 0,
+        'PointSize' : 1,
+        'ClipDistance' : 3,
+        'CullDistance' : 4,
+        'VertexId' : 5,
+        'InstanceId' : 6,
+        'PrimitiveId' : 7,
+        'InvocationId' : 8,
+        'Layer' : 9,
+        'ViewportIndex' : 10,
+        'TessLevelOuter' : 11,
+        'TessLevelInner' : 12,
+        'TessCoord' : 13,
+        'PatchVertices' : 14,
+        'FragCoord' : 15,
+        'PointCoord' : 16,
+        'FrontFacing' : 17,
+        'SampleId' : 18,
+        'SamplePosition' : 19,
+        'SampleMask' : 20,
+        'FragDepth' : 22,
+        'HelperInvocation' : 23,
+        'NumWorkgroups' : 24,
+        'WorkgroupSize' : 25,
+        'WorkgroupId' : 26,
+        'LocalInvocationId' : 27,
+        'GlobalInvocationId' : 28,
+        'LocalInvocationIndex' : 29,
+        'WorkDim' : 30,
+        'GlobalSize' : 31,
+        'EnqueuedWorkgroupSize' : 32,
+        'GlobalOffset' : 33,
+        'GlobalLinearId' : 34,
+        'SubgroupSize' : 36,
+        'SubgroupMaxSize' : 37,
+        'NumSubgroups' : 38,
+        'NumEnqueuedSubgroups' : 39,
+        'SubgroupId' : 40,
+        'SubgroupLocalInvocationId' : 41,
+        'VertexIndex' : 42,
+        'InstanceIndex' : 43,
+    },
+
+    'SelectionControlShift' : {
+        'Flatten' : 0,
+        'DontFlatten' : 1,
+    },
+
+    'SelectionControlMask' : {
+        'MaskNone' : 0,
+        'Flatten' : 0x00000001,
+        'DontFlatten' : 0x00000002,
+    },
+
+    'LoopControlShift' : {
+        'Unroll' : 0,
+        'DontUnroll' : 1,
+    },
+
+    'LoopControlMask' : {
+        'MaskNone' : 0,
+        'Unroll' : 0x00000001,
+        'DontUnroll' : 0x00000002,
+    },
+
+    'FunctionControlShift' : {
+        'Inline' : 0,
+        'DontInline' : 1,
+        'Pure' : 2,
+        'Const' : 3,
+    },
+
+    'FunctionControlMask' : {
+        'MaskNone' : 0,
+        'Inline' : 0x00000001,
+        'DontInline' : 0x00000002,
+        'Pure' : 0x00000004,
+        'Const' : 0x00000008,
+    },
+
+    'MemorySemanticsShift' : {
+        'Acquire' : 1,
+        'Release' : 2,
+        'AcquireRelease' : 3,
+        'SequentiallyConsistent' : 4,
+        'UniformMemory' : 6,
+        'SubgroupMemory' : 7,
+        'WorkgroupMemory' : 8,
+        'CrossWorkgroupMemory' : 9,
+        'AtomicCounterMemory' : 10,
+        'ImageMemory' : 11,
+    },
+
+    'MemorySemanticsMask' : {
+        'MaskNone' : 0,
+        'Acquire' : 0x00000002,
+        'Release' : 0x00000004,
+        'AcquireRelease' : 0x00000008,
+        'SequentiallyConsistent' : 0x00000010,
+        'UniformMemory' : 0x00000040,
+        'SubgroupMemory' : 0x00000080,
+        'WorkgroupMemory' : 0x00000100,
+        'CrossWorkgroupMemory' : 0x00000200,
+        'AtomicCounterMemory' : 0x00000400,
+        'ImageMemory' : 0x00000800,
+    },
+
+    'MemoryAccessShift' : {
+        'Volatile' : 0,
+        'Aligned' : 1,
+        'Nontemporal' : 2,
+    },
+
+    'MemoryAccessMask' : {
+        'MaskNone' : 0,
+        'Volatile' : 0x00000001,
+        'Aligned' : 0x00000002,
+        'Nontemporal' : 0x00000004,
+    },
+
+    'Scope' : {
+        'CrossDevice' : 0,
+        'Device' : 1,
+        'Workgroup' : 2,
+        'Subgroup' : 3,
+        'Invocation' : 4,
+    },
+
+    'GroupOperation' : {
+        'Reduce' : 0,
+        'InclusiveScan' : 1,
+        'ExclusiveScan' : 2,
+    },
+
+    'KernelEnqueueFlags' : {
+        'NoWait' : 0,
+        'WaitKernel' : 1,
+        'WaitWorkGroup' : 2,
+    },
+
+    'KernelProfilingInfoShift' : {
+        'CmdExecTime' : 0,
+    },
+
+    'KernelProfilingInfoMask' : {
+        'MaskNone' : 0,
+        'CmdExecTime' : 0x00000001,
+    },
+
+    'Capability' : {
+        'Matrix' : 0,
+        'Shader' : 1,
+        'Geometry' : 2,
+        'Tessellation' : 3,
+        'Addresses' : 4,
+        'Linkage' : 5,
+        'Kernel' : 6,
+        'Vector16' : 7,
+        'Float16Buffer' : 8,
+        'Float16' : 9,
+        'Float64' : 10,
+        'Int64' : 11,
+        'Int64Atomics' : 12,
+        'ImageBasic' : 13,
+        'ImageReadWrite' : 14,
+        'ImageMipmap' : 15,
+        'Pipes' : 17,
+        'Groups' : 18,
+        'DeviceEnqueue' : 19,
+        'LiteralSampler' : 20,
+        'AtomicStorage' : 21,
+        'Int16' : 22,
+        'TessellationPointSize' : 23,
+        'GeometryPointSize' : 24,
+        'ImageGatherExtended' : 25,
+        'StorageImageMultisample' : 27,
+        'UniformBufferArrayDynamicIndexing' : 28,
+        'SampledImageArrayDynamicIndexing' : 29,
+        'StorageBufferArrayDynamicIndexing' : 30,
+        'StorageImageArrayDynamicIndexing' : 31,
+        'ClipDistance' : 32,
+        'CullDistance' : 33,
+        'ImageCubeArray' : 34,
+        'SampleRateShading' : 35,
+        'ImageRect' : 36,
+        'SampledRect' : 37,
+        'GenericPointer' : 38,
+        'Int8' : 39,
+        'InputAttachment' : 40,
+        'SparseResidency' : 41,
+        'MinLod' : 42,
+        'Sampled1D' : 43,
+        'Image1D' : 44,
+        'SampledCubeArray' : 45,
+        'SampledBuffer' : 46,
+        'ImageBuffer' : 47,
+        'ImageMSArray' : 48,
+        'StorageImageExtendedFormats' : 49,
+        'ImageQuery' : 50,
+        'DerivativeControl' : 51,
+        'InterpolationFunction' : 52,
+        'TransformFeedback' : 53,
+        'GeometryStreams' : 54,
+        'StorageImageReadWithoutFormat' : 55,
+        'StorageImageWriteWithoutFormat' : 56,
+        'MultiViewport' : 57,
+    },
+
+    'Op' : {
+        'OpNop' : 0,
+        'OpUndef' : 1,
+        'OpSourceContinued' : 2,
+        'OpSource' : 3,
+        'OpSourceExtension' : 4,
+        'OpName' : 5,
+        'OpMemberName' : 6,
+        'OpString' : 7,
+        'OpLine' : 8,
+        'OpExtension' : 10,
+        'OpExtInstImport' : 11,
+        'OpExtInst' : 12,
+        'OpMemoryModel' : 14,
+        'OpEntryPoint' : 15,
+        'OpExecutionMode' : 16,
+        'OpCapability' : 17,
+        'OpTypeVoid' : 19,
+        'OpTypeBool' : 20,
+        'OpTypeInt' : 21,
+        'OpTypeFloat' : 22,
+        'OpTypeVector' : 23,
+        'OpTypeMatrix' : 24,
+        'OpTypeImage' : 25,
+        'OpTypeSampler' : 26,
+        'OpTypeSampledImage' : 27,
+        'OpTypeArray' : 28,
+        'OpTypeRuntimeArray' : 29,
+        'OpTypeStruct' : 30,
+        'OpTypeOpaque' : 31,
+        'OpTypePointer' : 32,
+        'OpTypeFunction' : 33,
+        'OpTypeEvent' : 34,
+        'OpTypeDeviceEvent' : 35,
+        'OpTypeReserveId' : 36,
+        'OpTypeQueue' : 37,
+        'OpTypePipe' : 38,
+        'OpTypeForwardPointer' : 39,
+        'OpConstantTrue' : 41,
+        'OpConstantFalse' : 42,
+        'OpConstant' : 43,
+        'OpConstantComposite' : 44,
+        'OpConstantSampler' : 45,
+        'OpConstantNull' : 46,
+        'OpSpecConstantTrue' : 48,
+        'OpSpecConstantFalse' : 49,
+        'OpSpecConstant' : 50,
+        'OpSpecConstantComposite' : 51,
+        'OpSpecConstantOp' : 52,
+        'OpFunction' : 54,
+        'OpFunctionParameter' : 55,
+        'OpFunctionEnd' : 56,
+        'OpFunctionCall' : 57,
+        'OpVariable' : 59,
+        'OpImageTexelPointer' : 60,
+        'OpLoad' : 61,
+        'OpStore' : 62,
+        'OpCopyMemory' : 63,
+        'OpCopyMemorySized' : 64,
+        'OpAccessChain' : 65,
+        'OpInBoundsAccessChain' : 66,
+        'OpPtrAccessChain' : 67,
+        'OpArrayLength' : 68,
+        'OpGenericPtrMemSemantics' : 69,
+        'OpInBoundsPtrAccessChain' : 70,
+        'OpDecorate' : 71,
+        'OpMemberDecorate' : 72,
+        'OpDecorationGroup' : 73,
+        'OpGroupDecorate' : 74,
+        'OpGroupMemberDecorate' : 75,
+        'OpVectorExtractDynamic' : 77,
+        'OpVectorInsertDynamic' : 78,
+        'OpVectorShuffle' : 79,
+        'OpCompositeConstruct' : 80,
+        'OpCompositeExtract' : 81,
+        'OpCompositeInsert' : 82,
+        'OpCopyObject' : 83,
+        'OpTranspose' : 84,
+        'OpSampledImage' : 86,
+        'OpImageSampleImplicitLod' : 87,
+        'OpImageSampleExplicitLod' : 88,
+        'OpImageSampleDrefImplicitLod' : 89,
+        'OpImageSampleDrefExplicitLod' : 90,
+        'OpImageSampleProjImplicitLod' : 91,
+        'OpImageSampleProjExplicitLod' : 92,
+        'OpImageSampleProjDrefImplicitLod' : 93,
+        'OpImageSampleProjDrefExplicitLod' : 94,
+        'OpImageFetch' : 95,
+        'OpImageGather' : 96,
+        'OpImageDrefGather' : 97,
+        'OpImageRead' : 98,
+        'OpImageWrite' : 99,
+        'OpImage' : 100,
+        'OpImageQueryFormat' : 101,
+        'OpImageQueryOrder' : 102,
+        'OpImageQuerySizeLod' : 103,
+        'OpImageQuerySize' : 104,
+        'OpImageQueryLod' : 105,
+        'OpImageQueryLevels' : 106,
+        'OpImageQuerySamples' : 107,
+        'OpConvertFToU' : 109,
+        'OpConvertFToS' : 110,
+        'OpConvertSToF' : 111,
+        'OpConvertUToF' : 112,
+        'OpUConvert' : 113,
+        'OpSConvert' : 114,
+        'OpFConvert' : 115,
+        'OpQuantizeToF16' : 116,
+        'OpConvertPtrToU' : 117,
+        'OpSatConvertSToU' : 118,
+        'OpSatConvertUToS' : 119,
+        'OpConvertUToPtr' : 120,
+        'OpPtrCastToGeneric' : 121,
+        'OpGenericCastToPtr' : 122,
+        'OpGenericCastToPtrExplicit' : 123,
+        'OpBitcast' : 124,
+        'OpSNegate' : 126,
+        'OpFNegate' : 127,
+        'OpIAdd' : 128,
+        'OpFAdd' : 129,
+        'OpISub' : 130,
+        'OpFSub' : 131,
+        'OpIMul' : 132,
+        'OpFMul' : 133,
+        'OpUDiv' : 134,
+        'OpSDiv' : 135,
+        'OpFDiv' : 136,
+        'OpUMod' : 137,
+        'OpSRem' : 138,
+        'OpSMod' : 139,
+        'OpFRem' : 140,
+        'OpFMod' : 141,
+        'OpVectorTimesScalar' : 142,
+        'OpMatrixTimesScalar' : 143,
+        'OpVectorTimesMatrix' : 144,
+        'OpMatrixTimesVector' : 145,
+        'OpMatrixTimesMatrix' : 146,
+        'OpOuterProduct' : 147,
+        'OpDot' : 148,
+        'OpIAddCarry' : 149,
+        'OpISubBorrow' : 150,
+        'OpUMulExtended' : 151,
+        'OpSMulExtended' : 152,
+        'OpAny' : 154,
+        'OpAll' : 155,
+        'OpIsNan' : 156,
+        'OpIsInf' : 157,
+        'OpIsFinite' : 158,
+        'OpIsNormal' : 159,
+        'OpSignBitSet' : 160,
+        'OpLessOrGreater' : 161,
+        'OpOrdered' : 162,
+        'OpUnordered' : 163,
+        'OpLogicalEqual' : 164,
+        'OpLogicalNotEqual' : 165,
+        'OpLogicalOr' : 166,
+        'OpLogicalAnd' : 167,
+        'OpLogicalNot' : 168,
+        'OpSelect' : 169,
+        'OpIEqual' : 170,
+        'OpINotEqual' : 171,
+        'OpUGreaterThan' : 172,
+        'OpSGreaterThan' : 173,
+        'OpUGreaterThanEqual' : 174,
+        'OpSGreaterThanEqual' : 175,
+        'OpULessThan' : 176,
+        'OpSLessThan' : 177,
+        'OpULessThanEqual' : 178,
+        'OpSLessThanEqual' : 179,
+        'OpFOrdEqual' : 180,
+        'OpFUnordEqual' : 181,
+        'OpFOrdNotEqual' : 182,
+        'OpFUnordNotEqual' : 183,
+        'OpFOrdLessThan' : 184,
+        'OpFUnordLessThan' : 185,
+        'OpFOrdGreaterThan' : 186,
+        'OpFUnordGreaterThan' : 187,
+        'OpFOrdLessThanEqual' : 188,
+        'OpFUnordLessThanEqual' : 189,
+        'OpFOrdGreaterThanEqual' : 190,
+        'OpFUnordGreaterThanEqual' : 191,
+        'OpShiftRightLogical' : 194,
+        'OpShiftRightArithmetic' : 195,
+        'OpShiftLeftLogical' : 196,
+        'OpBitwiseOr' : 197,
+        'OpBitwiseXor' : 198,
+        'OpBitwiseAnd' : 199,
+        'OpNot' : 200,
+        'OpBitFieldInsert' : 201,
+        'OpBitFieldSExtract' : 202,
+        'OpBitFieldUExtract' : 203,
+        'OpBitReverse' : 204,
+        'OpBitCount' : 205,
+        'OpDPdx' : 207,
+        'OpDPdy' : 208,
+        'OpFwidth' : 209,
+        'OpDPdxFine' : 210,
+        'OpDPdyFine' : 211,
+        'OpFwidthFine' : 212,
+        'OpDPdxCoarse' : 213,
+        'OpDPdyCoarse' : 214,
+        'OpFwidthCoarse' : 215,
+        'OpEmitVertex' : 218,
+        'OpEndPrimitive' : 219,
+        'OpEmitStreamVertex' : 220,
+        'OpEndStreamPrimitive' : 221,
+        'OpControlBarrier' : 224,
+        'OpMemoryBarrier' : 225,
+        'OpAtomicLoad' : 227,
+        'OpAtomicStore' : 228,
+        'OpAtomicExchange' : 229,
+        'OpAtomicCompareExchange' : 230,
+        'OpAtomicCompareExchangeWeak' : 231,
+        'OpAtomicIIncrement' : 232,
+        'OpAtomicIDecrement' : 233,
+        'OpAtomicIAdd' : 234,
+        'OpAtomicISub' : 235,
+        'OpAtomicSMin' : 236,
+        'OpAtomicUMin' : 237,
+        'OpAtomicSMax' : 238,
+        'OpAtomicUMax' : 239,
+        'OpAtomicAnd' : 240,
+        'OpAtomicOr' : 241,
+        'OpAtomicXor' : 242,
+        'OpPhi' : 245,
+        'OpLoopMerge' : 246,
+        'OpSelectionMerge' : 247,
+        'OpLabel' : 248,
+        'OpBranch' : 249,
+        'OpBranchConditional' : 250,
+        'OpSwitch' : 251,
+        'OpKill' : 252,
+        'OpReturn' : 253,
+        'OpReturnValue' : 254,
+        'OpUnreachable' : 255,
+        'OpLifetimeStart' : 256,
+        'OpLifetimeStop' : 257,
+        'OpGroupAsyncCopy' : 259,
+        'OpGroupWaitEvents' : 260,
+        'OpGroupAll' : 261,
+        'OpGroupAny' : 262,
+        'OpGroupBroadcast' : 263,
+        'OpGroupIAdd' : 264,
+        'OpGroupFAdd' : 265,
+        'OpGroupFMin' : 266,
+        'OpGroupUMin' : 267,
+        'OpGroupSMin' : 268,
+        'OpGroupFMax' : 269,
+        'OpGroupUMax' : 270,
+        'OpGroupSMax' : 271,
+        'OpReadPipe' : 274,
+        'OpWritePipe' : 275,
+        'OpReservedReadPipe' : 276,
+        'OpReservedWritePipe' : 277,
+        'OpReserveReadPipePackets' : 278,
+        'OpReserveWritePipePackets' : 279,
+        'OpCommitReadPipe' : 280,
+        'OpCommitWritePipe' : 281,
+        'OpIsValidReserveId' : 282,
+        'OpGetNumPipePackets' : 283,
+        'OpGetMaxPipePackets' : 284,
+        'OpGroupReserveReadPipePackets' : 285,
+        'OpGroupReserveWritePipePackets' : 286,
+        'OpGroupCommitReadPipe' : 287,
+        'OpGroupCommitWritePipe' : 288,
+        'OpEnqueueMarker' : 291,
+        'OpEnqueueKernel' : 292,
+        'OpGetKernelNDrangeSubGroupCount' : 293,
+        'OpGetKernelNDrangeMaxSubGroupSize' : 294,
+        'OpGetKernelWorkGroupSize' : 295,
+        'OpGetKernelPreferredWorkGroupSizeMultiple' : 296,
+        'OpRetainEvent' : 297,
+        'OpReleaseEvent' : 298,
+        'OpCreateUserEvent' : 299,
+        'OpIsValidEvent' : 300,
+        'OpSetUserEventStatus' : 301,
+        'OpCaptureEventProfilingInfo' : 302,
+        'OpGetDefaultQueue' : 303,
+        'OpBuildNDRange' : 304,
+        'OpImageSparseSampleImplicitLod' : 305,
+        'OpImageSparseSampleExplicitLod' : 306,
+        'OpImageSparseSampleDrefImplicitLod' : 307,
+        'OpImageSparseSampleDrefExplicitLod' : 308,
+        'OpImageSparseSampleProjImplicitLod' : 309,
+        'OpImageSparseSampleProjExplicitLod' : 310,
+        'OpImageSparseSampleProjDrefImplicitLod' : 311,
+        'OpImageSparseSampleProjDrefExplicitLod' : 312,
+        'OpImageSparseFetch' : 313,
+        'OpImageSparseGather' : 314,
+        'OpImageSparseDrefGather' : 315,
+        'OpImageSparseTexelsResident' : 316,
+        'OpNoLine' : 317,
+        'OpAtomicFlagTestAndSet' : 318,
+        'OpAtomicFlagClear' : 319,
+        'OpImageSparseRead' : 320,
+    },
+
+}
+
diff --git a/include/spirv/spir-v.xml b/include/spirv/spir-v.xml
new file mode 100644 (file)
index 0000000..d3a58c8
--- /dev/null
@@ -0,0 +1,90 @@
+<?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 and Opcode 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/
+    -->
+
+    <!-- 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 Neil Henning, neil@codeplay.com"/>
+        <id value="4"   vendor="NVIDIA"     comment="Contact Kerch Holt, kholt@nvidia.com"/>
+        <id value="5"   vendor="ARM"        comment="Contact Alexander Galazin, alexander.galazin@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"/>
+            <unused start="11" end="0xFFFF" comment="Tool ID range reservable for future use by vendors"/>
+    </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. -->
+
+    <!-- Reserved opcode & enumerant blocks -->
+    <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="4416" end="4479" vendor="Khronos" comment="SPV_ARB_shader_ballot - contact Neil Henning, neil@codeplay.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"/>
+
+    <!-- Opcodes & enumerants reservable 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="5504" end="5504+64n-1" vendor="Add vendor" comment="Contact TBD"/> -->
+
+    <ids type="opcode" start="5504" end="1000000" comment="Opcode range reservable for future use by vendors"/>
+
+</registry>