Build: Switch to Rev. 6 of headers, removing "BadValue" enum stuff.
authorJohn Kessenich <cepheus@frii.com>
Fri, 15 Jul 2016 17:53:56 +0000 (11:53 -0600)
committerJohn Kessenich <cepheus@frii.com>
Fri, 15 Jul 2016 17:55:34 +0000 (11:55 -0600)
Note: Technically, this is glslang's modified private copy of official headers.
Official headers will appear in other places, like
https://github.com/KhronosGroup/SPIRV-Headers.

SPIRV/GlslangToSpv.cpp
SPIRV/SpvBuilder.cpp
SPIRV/spirv.hpp
SPIRV/spvIR.h

index 61c9ae7..dd11304 100755 (executable)
@@ -301,7 +301,7 @@ spv::Decoration TranslateBlockDecoration(const glslang::TType& type)
         }
     }
 
-    return (spv::Decoration)spv::BadValue;
+    return spv::DecorationMax;
 }
 
 // Translate glslang type to SPIR-V memory decorations.
@@ -330,12 +330,12 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
             return spv::DecorationColMajor;
         default:
             // opaque layouts don't need a majorness
-            return (spv::Decoration)spv::BadValue;
+            return spv::DecorationMax;
         }
     } else {
         switch (type.getBasicType()) {
         default:
-            return (spv::Decoration)spv::BadValue;
+            return spv::DecorationMax;
             break;
         case glslang::EbtBlock:
             switch (type.getQualifier().storage) {
@@ -345,38 +345,38 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
                 case glslang::ElpShared:  return spv::DecorationGLSLShared;
                 case glslang::ElpPacked:  return spv::DecorationGLSLPacked;
                 default:
-                    return (spv::Decoration)spv::BadValue;
+                    return spv::DecorationMax;
                 }
             case glslang::EvqVaryingIn:
             case glslang::EvqVaryingOut:
                 assert(type.getQualifier().layoutPacking == glslang::ElpNone);
-                return (spv::Decoration)spv::BadValue;
+                return spv::DecorationMax;
             default:
                 assert(0);
-                return (spv::Decoration)spv::BadValue;
+                return spv::DecorationMax;
             }
         }
     }
 }
 
 // Translate glslang type to SPIR-V interpolation decorations.
-// Returns spv::Decoration(spv::BadValue) when no decoration
+// Returns spv::DecorationMax when no decoration
 // should be applied.
 spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier)
 {
     if (qualifier.smooth)
         // Smooth decoration doesn't exist in SPIR-V 1.0
-        return (spv::Decoration)spv::BadValue;
+        return spv::DecorationMax;
     else if (qualifier.nopersp)
         return spv::DecorationNoPerspective;
     else if (qualifier.flat)
         return spv::DecorationFlat;
     else
-        return (spv::Decoration)spv::BadValue;
+        return spv::DecorationMax;
 }
 
 // Translate glslang type to SPIR-V auxiliary storage decorations.
-// Returns spv::Decoration(spv::BadValue) when no decoration
+// Returns spv::DecorationMax when no decoration
 // should be applied.
 spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier)
 {
@@ -388,7 +388,7 @@ spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(cons
         builder.addCapability(spv::CapabilitySampleRateShading);
         return spv::DecorationSample;
     } else
-        return (spv::Decoration)spv::BadValue;
+        return spv::DecorationMax;
 }
 
 // If glslang type is invariant, return SPIR-V invariant decoration.
@@ -397,7 +397,7 @@ spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifie
     if (qualifier.invariant)
         return spv::DecorationInvariant;
     else
-        return (spv::Decoration)spv::BadValue;
+        return spv::DecorationMax;
 }
 
 // If glslang type is noContraction, return SPIR-V NoContraction decoration.
@@ -406,7 +406,7 @@ spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qual
     if (qualifier.noContraction)
         return spv::DecorationNoContraction;
     else
-        return (spv::Decoration)spv::BadValue;
+        return spv::DecorationMax;
 }
 
 // Translate a glslang built-in variable to a SPIR-V built in decoration.  Also generate
@@ -480,7 +480,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
     case glslang::EbvDrawId:
         // TODO: Add SPIR-V builtin ID.
         logger->missingFunctionality("shader draw parameters");
-        return (spv::BuiltIn)spv::BadValue;
+        return spv::BuiltInMax;
     case glslang::EbvPrimitiveId:          return spv::BuiltInPrimitiveId;
     case glslang::EbvInvocationId:         return spv::BuiltInInvocationId;
     case glslang::EbvTessLevelInner:       return spv::BuiltInTessLevelInner;
@@ -507,8 +507,8 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
     case glslang::EbvSubGroupLtMask:
         // TODO: Add SPIR-V builtin ID.
         logger->missingFunctionality("shader ballot");
-        return (spv::BuiltIn)spv::BadValue;
-    default:                               return (spv::BuiltIn)spv::BadValue;
+        return spv::BuiltInMax;
+    default:                               return spv::BuiltInMax;
     }
 }
 
@@ -596,7 +596,7 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy
     case glslang::ElfRg8ui:         return spv::ImageFormatRg8ui;
     case glslang::ElfR16ui:         return spv::ImageFormatR16ui;
     case glslang::ElfR8ui:          return spv::ImageFormatR8ui;
-    default:                        return (spv::ImageFormat)spv::BadValue;
+    default:                        return spv::ImageFormatMax;
     }
 }
 
@@ -705,26 +705,26 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
         case glslang::ElgTriangles:           mode = spv::ExecutionModeTriangles;     break;
         case glslang::ElgQuads:               mode = spv::ExecutionModeQuads;         break;
         case glslang::ElgIsolines:            mode = spv::ExecutionModeIsolines;      break;
-        default:                              mode = spv::BadValue;                        break;
+        default:                              mode = spv::ExecutionModeMax;           break;
         }
-        if (mode != spv::BadValue)
+        if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
 
         switch (glslangIntermediate->getVertexSpacing()) {
         case glslang::EvsEqual:            mode = spv::ExecutionModeSpacingEqual;          break;
         case glslang::EvsFractionalEven:   mode = spv::ExecutionModeSpacingFractionalEven; break;
         case glslang::EvsFractionalOdd:    mode = spv::ExecutionModeSpacingFractionalOdd;  break;
-        default:                           mode = spv::BadValue;                           break;
+        default:                           mode = spv::ExecutionModeMax;                   break;
         }
-        if (mode != spv::BadValue)
+        if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
 
         switch (glslangIntermediate->getVertexOrder()) {
         case glslang::EvoCw:     mode = spv::ExecutionModeVertexOrderCw;  break;
         case glslang::EvoCcw:    mode = spv::ExecutionModeVertexOrderCcw; break;
-        default:                 mode = spv::BadValue;                    break;
+        default:                 mode = spv::ExecutionModeMax;            break;
         }
-        if (mode != spv::BadValue)
+        if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
 
         if (glslangIntermediate->getPointMode())
@@ -739,9 +739,9 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
         case glslang::ElgLinesAdjacency:     mode = spv::ExecutionModeInputLinesAdjacency;     break;
         case glslang::ElgTriangles:          mode = spv::ExecutionModeTriangles;               break;
         case glslang::ElgTrianglesAdjacency: mode = spv::ExecutionModeInputTrianglesAdjacency; break;
-        default:                             mode = spv::BadValue;         break;
+        default:                             mode = spv::ExecutionModeMax;                     break;
         }
-        if (mode != spv::BadValue)
+        if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
 
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeInvocations, glslangIntermediate->getInvocations());
@@ -750,9 +750,9 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
         case glslang::ElgPoints:        mode = spv::ExecutionModeOutputPoints;                 break;
         case glslang::ElgLineStrip:     mode = spv::ExecutionModeOutputLineStrip;              break;
         case glslang::ElgTriangleStrip: mode = spv::ExecutionModeOutputTriangleStrip;          break;
-        default:                        mode = spv::BadValue;              break;
+        default:                        mode = spv::ExecutionModeMax;                          break;
         }
-        if (mode != spv::BadValue)
+        if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices());
         break;
@@ -773,9 +773,9 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
         switch(glslangIntermediate->getDepth()) {
         case glslang::EldGreater:  mode = spv::ExecutionModeDepthGreater; break;
         case glslang::EldLess:     mode = spv::ExecutionModeDepthLess;    break;
-        default:                   mode = spv::BadValue;                  break;
+        default:                   mode = spv::ExecutionModeMax;          break;
         }
-        if (mode != spv::BadValue)
+        if (mode != spv::ExecutionModeMax)
             builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode);
 
         if (glslangIntermediate->getDepth() != glslang::EldUnchanged && glslangIntermediate->isDepthReplacing())
@@ -2070,7 +2070,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
 
             // built-in variable decorations
             spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true);
-            if (builtIn != spv::BadValue)
+            if (builtIn != spv::BuiltInMax)
                 addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
         }
     }
@@ -4122,7 +4122,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
 
     // built-in variable decorations
     spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
-    if (builtIn != spv::BadValue)
+    if (builtIn != spv::BuiltInMax)
         addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
 
     return id;
@@ -4131,28 +4131,28 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
 // If 'dec' is valid, add no-operand decoration to an object
 void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec)
 {
-    if (dec != spv::BadValue)
+    if (dec != spv::DecorationMax)
         builder.addDecoration(id, dec);
 }
 
 // If 'dec' is valid, add a one-operand decoration to an object
 void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec, unsigned value)
 {
-    if (dec != spv::BadValue)
+    if (dec != spv::DecorationMax)
         builder.addDecoration(id, dec, value);
 }
 
 // If 'dec' is valid, add a no-operand decoration to a struct member
 void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec)
 {
-    if (dec != spv::BadValue)
+    if (dec != spv::DecorationMax)
         builder.addMemberDecoration(id, (unsigned)member, dec);
 }
 
 // If 'dec' is valid, add a one-operand decoration to a struct member
 void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value)
 {
-    if (dec != spv::BadValue)
+    if (dec != spv::DecorationMax)
         builder.addMemberDecoration(id, (unsigned)member, dec, value);
 }
 
index f71b935..e5317ab 100644 (file)
@@ -907,7 +907,7 @@ void Builder::addLine(Id target, Id fileName, int lineNum, int column)
 
 void Builder::addDecoration(Id id, Decoration decoration, int num)
 {
-    if (decoration == (spv::Decoration)spv::BadValue)
+    if (decoration == spv::DecorationMax)
         return;
     Instruction* dec = new Instruction(OpDecorate);
     dec->addIdOperand(id);
index 7447fcf..e3d1342 100755 (executable)
-// Copyright (c) 2014-2016 The Khronos Group Inc.\r
-// \r
-// Permission is hereby granted, free of charge, to any person obtaining a copy\r
-// of this software and/or associated documentation files (the "Materials"),\r
-// to deal in the Materials without restriction, including without limitation\r
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
-// and/or sell copies of the Materials, and to permit persons to whom the\r
-// Materials are furnished to do so, subject to the following conditions:\r
-// \r
-// The above copyright notice and this permission notice shall be included in\r
-// all copies or substantial portions of the Materials.\r
-// \r
-// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\r
-// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\r
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ \r
-// \r
-// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
-// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS\r
-// IN THE MATERIALS.\r
-\r
-// This header is automatically generated by the same tool that creates\r
-// the Binary Section of the SPIR-V specification.\r
-\r
-// Enumeration tokens for SPIR-V, in various styles:\r
-//   C, C++, C++11, JSON, Lua, Python\r
-// \r
-// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL\r
-// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL\r
-// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL\r
-// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL\r
-// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']\r
-// \r
-// Some tokens act like mask values, which can be OR'd together,\r
-// while others are mutually exclusive.  The mask-like ones have\r
-// "Mask" in their name, and a parallel enum that has the shift\r
-// amount (1 << x) for each corresponding enumerant.\r
-\r
-#ifndef spirv_HPP\r
-#define spirv_HPP\r
-\r
-namespace spv {\r
-\r
-typedef unsigned int Id;\r
-\r
-#define SPV_VERSION 0x10000\r
-#define SPV_REVISION 3\r
-\r
-static const unsigned int MagicNumber = 0x07230203;\r
-static const unsigned int Version = 0x00010000;\r
-static const unsigned int Revision = 3;\r
-static const unsigned int OpCodeMask = 0xffff;\r
-static const unsigned int WordCountShift = 16;\r
-\r
-enum SourceLanguage {\r
-    SourceLanguageUnknown = 0,\r
-    SourceLanguageESSL = 1,\r
-    SourceLanguageGLSL = 2,\r
-    SourceLanguageOpenCL_C = 3,\r
-    SourceLanguageOpenCL_CPP = 4,\r
-    SourceLanguageHLSL = 5,\r
-};\r
-\r
-enum ExecutionModel {\r
-    ExecutionModelVertex = 0,\r
-    ExecutionModelTessellationControl = 1,\r
-    ExecutionModelTessellationEvaluation = 2,\r
-    ExecutionModelGeometry = 3,\r
-    ExecutionModelFragment = 4,\r
-    ExecutionModelGLCompute = 5,\r
-    ExecutionModelKernel = 6,\r
-};\r
-\r
-enum AddressingModel {\r
-    AddressingModelLogical = 0,\r
-    AddressingModelPhysical32 = 1,\r
-    AddressingModelPhysical64 = 2,\r
-};\r
-\r
-enum MemoryModel {\r
-    MemoryModelSimple = 0,\r
-    MemoryModelGLSL450 = 1,\r
-    MemoryModelOpenCL = 2,\r
-};\r
-\r
-enum ExecutionMode {\r
-    ExecutionModeInvocations = 0,\r
-    ExecutionModeSpacingEqual = 1,\r
-    ExecutionModeSpacingFractionalEven = 2,\r
-    ExecutionModeSpacingFractionalOdd = 3,\r
-    ExecutionModeVertexOrderCw = 4,\r
-    ExecutionModeVertexOrderCcw = 5,\r
-    ExecutionModePixelCenterInteger = 6,\r
-    ExecutionModeOriginUpperLeft = 7,\r
-    ExecutionModeOriginLowerLeft = 8,\r
-    ExecutionModeEarlyFragmentTests = 9,\r
-    ExecutionModePointMode = 10,\r
-    ExecutionModeXfb = 11,\r
-    ExecutionModeDepthReplacing = 12,\r
-    ExecutionModeDepthGreater = 14,\r
-    ExecutionModeDepthLess = 15,\r
-    ExecutionModeDepthUnchanged = 16,\r
-    ExecutionModeLocalSize = 17,\r
-    ExecutionModeLocalSizeHint = 18,\r
-    ExecutionModeInputPoints = 19,\r
-    ExecutionModeInputLines = 20,\r
-    ExecutionModeInputLinesAdjacency = 21,\r
-    ExecutionModeTriangles = 22,\r
-    ExecutionModeInputTrianglesAdjacency = 23,\r
-    ExecutionModeQuads = 24,\r
-    ExecutionModeIsolines = 25,\r
-    ExecutionModeOutputVertices = 26,\r
-    ExecutionModeOutputPoints = 27,\r
-    ExecutionModeOutputLineStrip = 28,\r
-    ExecutionModeOutputTriangleStrip = 29,\r
-    ExecutionModeVecTypeHint = 30,\r
-    ExecutionModeContractionOff = 31,\r
-};\r
-\r
-enum StorageClass {\r
-    StorageClassUniformConstant = 0,\r
-    StorageClassInput = 1,\r
-    StorageClassUniform = 2,\r
-    StorageClassOutput = 3,\r
-    StorageClassWorkgroup = 4,\r
-    StorageClassCrossWorkgroup = 5,\r
-    StorageClassPrivate = 6,\r
-    StorageClassFunction = 7,\r
-    StorageClassGeneric = 8,\r
-    StorageClassPushConstant = 9,\r
-    StorageClassAtomicCounter = 10,\r
-    StorageClassImage = 11,\r
-};\r
-\r
-enum Dim {\r
-    Dim1D = 0,\r
-    Dim2D = 1,\r
-    Dim3D = 2,\r
-    DimCube = 3,\r
-    DimRect = 4,\r
-    DimBuffer = 5,\r
-    DimSubpassData = 6,\r
-};\r
-\r
-enum SamplerAddressingMode {\r
-    SamplerAddressingModeNone = 0,\r
-    SamplerAddressingModeClampToEdge = 1,\r
-    SamplerAddressingModeClamp = 2,\r
-    SamplerAddressingModeRepeat = 3,\r
-    SamplerAddressingModeRepeatMirrored = 4,\r
-};\r
-\r
-enum SamplerFilterMode {\r
-    SamplerFilterModeNearest = 0,\r
-    SamplerFilterModeLinear = 1,\r
-};\r
-\r
-enum ImageFormat {\r
-    ImageFormatUnknown = 0,\r
-    ImageFormatRgba32f = 1,\r
-    ImageFormatRgba16f = 2,\r
-    ImageFormatR32f = 3,\r
-    ImageFormatRgba8 = 4,\r
-    ImageFormatRgba8Snorm = 5,\r
-    ImageFormatRg32f = 6,\r
-    ImageFormatRg16f = 7,\r
-    ImageFormatR11fG11fB10f = 8,\r
-    ImageFormatR16f = 9,\r
-    ImageFormatRgba16 = 10,\r
-    ImageFormatRgb10A2 = 11,\r
-    ImageFormatRg16 = 12,\r
-    ImageFormatRg8 = 13,\r
-    ImageFormatR16 = 14,\r
-    ImageFormatR8 = 15,\r
-    ImageFormatRgba16Snorm = 16,\r
-    ImageFormatRg16Snorm = 17,\r
-    ImageFormatRg8Snorm = 18,\r
-    ImageFormatR16Snorm = 19,\r
-    ImageFormatR8Snorm = 20,\r
-    ImageFormatRgba32i = 21,\r
-    ImageFormatRgba16i = 22,\r
-    ImageFormatRgba8i = 23,\r
-    ImageFormatR32i = 24,\r
-    ImageFormatRg32i = 25,\r
-    ImageFormatRg16i = 26,\r
-    ImageFormatRg8i = 27,\r
-    ImageFormatR16i = 28,\r
-    ImageFormatR8i = 29,\r
-    ImageFormatRgba32ui = 30,\r
-    ImageFormatRgba16ui = 31,\r
-    ImageFormatRgba8ui = 32,\r
-    ImageFormatR32ui = 33,\r
-    ImageFormatRgb10a2ui = 34,\r
-    ImageFormatRg32ui = 35,\r
-    ImageFormatRg16ui = 36,\r
-    ImageFormatRg8ui = 37,\r
-    ImageFormatR16ui = 38,\r
-    ImageFormatR8ui = 39,\r
-};\r
-\r
-enum ImageChannelOrder {\r
-    ImageChannelOrderR = 0,\r
-    ImageChannelOrderA = 1,\r
-    ImageChannelOrderRG = 2,\r
-    ImageChannelOrderRA = 3,\r
-    ImageChannelOrderRGB = 4,\r
-    ImageChannelOrderRGBA = 5,\r
-    ImageChannelOrderBGRA = 6,\r
-    ImageChannelOrderARGB = 7,\r
-    ImageChannelOrderIntensity = 8,\r
-    ImageChannelOrderLuminance = 9,\r
-    ImageChannelOrderRx = 10,\r
-    ImageChannelOrderRGx = 11,\r
-    ImageChannelOrderRGBx = 12,\r
-    ImageChannelOrderDepth = 13,\r
-    ImageChannelOrderDepthStencil = 14,\r
-    ImageChannelOrdersRGB = 15,\r
-    ImageChannelOrdersRGBx = 16,\r
-    ImageChannelOrdersRGBA = 17,\r
-    ImageChannelOrdersBGRA = 18,\r
-};\r
-\r
-enum ImageChannelDataType {\r
-    ImageChannelDataTypeSnormInt8 = 0,\r
-    ImageChannelDataTypeSnormInt16 = 1,\r
-    ImageChannelDataTypeUnormInt8 = 2,\r
-    ImageChannelDataTypeUnormInt16 = 3,\r
-    ImageChannelDataTypeUnormShort565 = 4,\r
-    ImageChannelDataTypeUnormShort555 = 5,\r
-    ImageChannelDataTypeUnormInt101010 = 6,\r
-    ImageChannelDataTypeSignedInt8 = 7,\r
-    ImageChannelDataTypeSignedInt16 = 8,\r
-    ImageChannelDataTypeSignedInt32 = 9,\r
-    ImageChannelDataTypeUnsignedInt8 = 10,\r
-    ImageChannelDataTypeUnsignedInt16 = 11,\r
-    ImageChannelDataTypeUnsignedInt32 = 12,\r
-    ImageChannelDataTypeHalfFloat = 13,\r
-    ImageChannelDataTypeFloat = 14,\r
-    ImageChannelDataTypeUnormInt24 = 15,\r
-    ImageChannelDataTypeUnormInt101010_2 = 16,\r
-};\r
-\r
-enum ImageOperandsShift {\r
-    ImageOperandsBiasShift = 0,\r
-    ImageOperandsLodShift = 1,\r
-    ImageOperandsGradShift = 2,\r
-    ImageOperandsConstOffsetShift = 3,\r
-    ImageOperandsOffsetShift = 4,\r
-    ImageOperandsConstOffsetsShift = 5,\r
-    ImageOperandsSampleShift = 6,\r
-    ImageOperandsMinLodShift = 7,\r
-};\r
-\r
-enum ImageOperandsMask {\r
-    ImageOperandsMaskNone = 0,\r
-    ImageOperandsBiasMask = 0x00000001,\r
-    ImageOperandsLodMask = 0x00000002,\r
-    ImageOperandsGradMask = 0x00000004,\r
-    ImageOperandsConstOffsetMask = 0x00000008,\r
-    ImageOperandsOffsetMask = 0x00000010,\r
-    ImageOperandsConstOffsetsMask = 0x00000020,\r
-    ImageOperandsSampleMask = 0x00000040,\r
-    ImageOperandsMinLodMask = 0x00000080,\r
-};\r
-\r
-enum FPFastMathModeShift {\r
-    FPFastMathModeNotNaNShift = 0,\r
-    FPFastMathModeNotInfShift = 1,\r
-    FPFastMathModeNSZShift = 2,\r
-    FPFastMathModeAllowRecipShift = 3,\r
-    FPFastMathModeFastShift = 4,\r
-};\r
-\r
-enum FPFastMathModeMask {\r
-    FPFastMathModeMaskNone = 0,\r
-    FPFastMathModeNotNaNMask = 0x00000001,\r
-    FPFastMathModeNotInfMask = 0x00000002,\r
-    FPFastMathModeNSZMask = 0x00000004,\r
-    FPFastMathModeAllowRecipMask = 0x00000008,\r
-    FPFastMathModeFastMask = 0x00000010,\r
-};\r
-\r
-enum FPRoundingMode {\r
-    FPRoundingModeRTE = 0,\r
-    FPRoundingModeRTZ = 1,\r
-    FPRoundingModeRTP = 2,\r
-    FPRoundingModeRTN = 3,\r
-};\r
-\r
-enum LinkageType {\r
-    LinkageTypeExport = 0,\r
-    LinkageTypeImport = 1,\r
-};\r
-\r
-enum AccessQualifier {\r
-    AccessQualifierReadOnly = 0,\r
-    AccessQualifierWriteOnly = 1,\r
-    AccessQualifierReadWrite = 2,\r
-};\r
-\r
-enum FunctionParameterAttribute {\r
-    FunctionParameterAttributeZext = 0,\r
-    FunctionParameterAttributeSext = 1,\r
-    FunctionParameterAttributeByVal = 2,\r
-    FunctionParameterAttributeSret = 3,\r
-    FunctionParameterAttributeNoAlias = 4,\r
-    FunctionParameterAttributeNoCapture = 5,\r
-    FunctionParameterAttributeNoWrite = 6,\r
-    FunctionParameterAttributeNoReadWrite = 7,\r
-};\r
-\r
-enum Decoration {\r
-    DecorationRelaxedPrecision = 0,\r
-    DecorationSpecId = 1,\r
-    DecorationBlock = 2,\r
-    DecorationBufferBlock = 3,\r
-    DecorationRowMajor = 4,\r
-    DecorationColMajor = 5,\r
-    DecorationArrayStride = 6,\r
-    DecorationMatrixStride = 7,\r
-    DecorationGLSLShared = 8,\r
-    DecorationGLSLPacked = 9,\r
-    DecorationCPacked = 10,\r
-    DecorationBuiltIn = 11,\r
-    DecorationNoPerspective = 13,\r
-    DecorationFlat = 14,\r
-    DecorationPatch = 15,\r
-    DecorationCentroid = 16,\r
-    DecorationSample = 17,\r
-    DecorationInvariant = 18,\r
-    DecorationRestrict = 19,\r
-    DecorationAliased = 20,\r
-    DecorationVolatile = 21,\r
-    DecorationConstant = 22,\r
-    DecorationCoherent = 23,\r
-    DecorationNonWritable = 24,\r
-    DecorationNonReadable = 25,\r
-    DecorationUniform = 26,\r
-    DecorationSaturatedConversion = 28,\r
-    DecorationStream = 29,\r
-    DecorationLocation = 30,\r
-    DecorationComponent = 31,\r
-    DecorationIndex = 32,\r
-    DecorationBinding = 33,\r
-    DecorationDescriptorSet = 34,\r
-    DecorationOffset = 35,\r
-    DecorationXfbBuffer = 36,\r
-    DecorationXfbStride = 37,\r
-    DecorationFuncParamAttr = 38,\r
-    DecorationFPRoundingMode = 39,\r
-    DecorationFPFastMathMode = 40,\r
-    DecorationLinkageAttributes = 41,\r
-    DecorationNoContraction = 42,\r
-    DecorationInputAttachmentIndex = 43,\r
-    DecorationAlignment = 44,\r
-};\r
-\r
-enum BuiltIn {\r
-    BuiltInPosition = 0,\r
-    BuiltInPointSize = 1,\r
-    BuiltInClipDistance = 3,\r
-    BuiltInCullDistance = 4,\r
-    BuiltInVertexId = 5,\r
-    BuiltInInstanceId = 6,\r
-    BuiltInPrimitiveId = 7,\r
-    BuiltInInvocationId = 8,\r
-    BuiltInLayer = 9,\r
-    BuiltInViewportIndex = 10,\r
-    BuiltInTessLevelOuter = 11,\r
-    BuiltInTessLevelInner = 12,\r
-    BuiltInTessCoord = 13,\r
-    BuiltInPatchVertices = 14,\r
-    BuiltInFragCoord = 15,\r
-    BuiltInPointCoord = 16,\r
-    BuiltInFrontFacing = 17,\r
-    BuiltInSampleId = 18,\r
-    BuiltInSamplePosition = 19,\r
-    BuiltInSampleMask = 20,\r
-    BuiltInFragDepth = 22,\r
-    BuiltInHelperInvocation = 23,\r
-    BuiltInNumWorkgroups = 24,\r
-    BuiltInWorkgroupSize = 25,\r
-    BuiltInWorkgroupId = 26,\r
-    BuiltInLocalInvocationId = 27,\r
-    BuiltInGlobalInvocationId = 28,\r
-    BuiltInLocalInvocationIndex = 29,\r
-    BuiltInWorkDim = 30,\r
-    BuiltInGlobalSize = 31,\r
-    BuiltInEnqueuedWorkgroupSize = 32,\r
-    BuiltInGlobalOffset = 33,\r
-    BuiltInGlobalLinearId = 34,\r
-    BuiltInSubgroupSize = 36,\r
-    BuiltInSubgroupMaxSize = 37,\r
-    BuiltInNumSubgroups = 38,\r
-    BuiltInNumEnqueuedSubgroups = 39,\r
-    BuiltInSubgroupId = 40,\r
-    BuiltInSubgroupLocalInvocationId = 41,\r
-    BuiltInVertexIndex = 42,\r
-    BuiltInInstanceIndex = 43,\r
-};\r
-\r
-enum SelectionControlShift {\r
-    SelectionControlFlattenShift = 0,\r
-    SelectionControlDontFlattenShift = 1,\r
-};\r
-\r
-enum SelectionControlMask {\r
-    SelectionControlMaskNone = 0,\r
-    SelectionControlFlattenMask = 0x00000001,\r
-    SelectionControlDontFlattenMask = 0x00000002,\r
-};\r
-\r
-enum LoopControlShift {\r
-    LoopControlUnrollShift = 0,\r
-    LoopControlDontUnrollShift = 1,\r
-};\r
-\r
-enum LoopControlMask {\r
-    LoopControlMaskNone = 0,\r
-    LoopControlUnrollMask = 0x00000001,\r
-    LoopControlDontUnrollMask = 0x00000002,\r
-};\r
-\r
-enum FunctionControlShift {\r
-    FunctionControlInlineShift = 0,\r
-    FunctionControlDontInlineShift = 1,\r
-    FunctionControlPureShift = 2,\r
-    FunctionControlConstShift = 3,\r
-};\r
-\r
-enum FunctionControlMask {\r
-    FunctionControlMaskNone = 0,\r
-    FunctionControlInlineMask = 0x00000001,\r
-    FunctionControlDontInlineMask = 0x00000002,\r
-    FunctionControlPureMask = 0x00000004,\r
-    FunctionControlConstMask = 0x00000008,\r
-};\r
-\r
-enum MemorySemanticsShift {\r
-    MemorySemanticsAcquireShift = 1,\r
-    MemorySemanticsReleaseShift = 2,\r
-    MemorySemanticsAcquireReleaseShift = 3,\r
-    MemorySemanticsSequentiallyConsistentShift = 4,\r
-    MemorySemanticsUniformMemoryShift = 6,\r
-    MemorySemanticsSubgroupMemoryShift = 7,\r
-    MemorySemanticsWorkgroupMemoryShift = 8,\r
-    MemorySemanticsCrossWorkgroupMemoryShift = 9,\r
-    MemorySemanticsAtomicCounterMemoryShift = 10,\r
-    MemorySemanticsImageMemoryShift = 11,\r
-};\r
-\r
-enum MemorySemanticsMask {\r
-    MemorySemanticsMaskNone = 0,\r
-    MemorySemanticsAcquireMask = 0x00000002,\r
-    MemorySemanticsReleaseMask = 0x00000004,\r
-    MemorySemanticsAcquireReleaseMask = 0x00000008,\r
-    MemorySemanticsSequentiallyConsistentMask = 0x00000010,\r
-    MemorySemanticsUniformMemoryMask = 0x00000040,\r
-    MemorySemanticsSubgroupMemoryMask = 0x00000080,\r
-    MemorySemanticsWorkgroupMemoryMask = 0x00000100,\r
-    MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,\r
-    MemorySemanticsAtomicCounterMemoryMask = 0x00000400,\r
-    MemorySemanticsImageMemoryMask = 0x00000800,\r
-};\r
-\r
-enum MemoryAccessShift {\r
-    MemoryAccessVolatileShift = 0,\r
-    MemoryAccessAlignedShift = 1,\r
-    MemoryAccessNontemporalShift = 2,\r
-};\r
-\r
-enum MemoryAccessMask {\r
-    MemoryAccessMaskNone = 0,\r
-    MemoryAccessVolatileMask = 0x00000001,\r
-    MemoryAccessAlignedMask = 0x00000002,\r
-    MemoryAccessNontemporalMask = 0x00000004,\r
-};\r
-\r
-enum Scope {\r
-    ScopeCrossDevice = 0,\r
-    ScopeDevice = 1,\r
-    ScopeWorkgroup = 2,\r
-    ScopeSubgroup = 3,\r
-    ScopeInvocation = 4,\r
-};\r
-\r
-enum GroupOperation {\r
-    GroupOperationReduce = 0,\r
-    GroupOperationInclusiveScan = 1,\r
-    GroupOperationExclusiveScan = 2,\r
-};\r
-\r
-enum KernelEnqueueFlags {\r
-    KernelEnqueueFlagsNoWait = 0,\r
-    KernelEnqueueFlagsWaitKernel = 1,\r
-    KernelEnqueueFlagsWaitWorkGroup = 2,\r
-};\r
-\r
-enum KernelProfilingInfoShift {\r
-    KernelProfilingInfoCmdExecTimeShift = 0,\r
-};\r
-\r
-enum KernelProfilingInfoMask {\r
-    KernelProfilingInfoMaskNone = 0,\r
-    KernelProfilingInfoCmdExecTimeMask = 0x00000001,\r
-};\r
-\r
-enum Capability {\r
-    CapabilityMatrix = 0,\r
-    CapabilityShader = 1,\r
-    CapabilityGeometry = 2,\r
-    CapabilityTessellation = 3,\r
-    CapabilityAddresses = 4,\r
-    CapabilityLinkage = 5,\r
-    CapabilityKernel = 6,\r
-    CapabilityVector16 = 7,\r
-    CapabilityFloat16Buffer = 8,\r
-    CapabilityFloat16 = 9,\r
-    CapabilityFloat64 = 10,\r
-    CapabilityInt64 = 11,\r
-    CapabilityInt64Atomics = 12,\r
-    CapabilityImageBasic = 13,\r
-    CapabilityImageReadWrite = 14,\r
-    CapabilityImageMipmap = 15,\r
-    CapabilityPipes = 17,\r
-    CapabilityGroups = 18,\r
-    CapabilityDeviceEnqueue = 19,\r
-    CapabilityLiteralSampler = 20,\r
-    CapabilityAtomicStorage = 21,\r
-    CapabilityInt16 = 22,\r
-    CapabilityTessellationPointSize = 23,\r
-    CapabilityGeometryPointSize = 24,\r
-    CapabilityImageGatherExtended = 25,\r
-    CapabilityStorageImageMultisample = 27,\r
-    CapabilityUniformBufferArrayDynamicIndexing = 28,\r
-    CapabilitySampledImageArrayDynamicIndexing = 29,\r
-    CapabilityStorageBufferArrayDynamicIndexing = 30,\r
-    CapabilityStorageImageArrayDynamicIndexing = 31,\r
-    CapabilityClipDistance = 32,\r
-    CapabilityCullDistance = 33,\r
-    CapabilityImageCubeArray = 34,\r
-    CapabilitySampleRateShading = 35,\r
-    CapabilityImageRect = 36,\r
-    CapabilitySampledRect = 37,\r
-    CapabilityGenericPointer = 38,\r
-    CapabilityInt8 = 39,\r
-    CapabilityInputAttachment = 40,\r
-    CapabilitySparseResidency = 41,\r
-    CapabilityMinLod = 42,\r
-    CapabilitySampled1D = 43,\r
-    CapabilityImage1D = 44,\r
-    CapabilitySampledCubeArray = 45,\r
-    CapabilitySampledBuffer = 46,\r
-    CapabilityImageBuffer = 47,\r
-    CapabilityImageMSArray = 48,\r
-    CapabilityStorageImageExtendedFormats = 49,\r
-    CapabilityImageQuery = 50,\r
-    CapabilityDerivativeControl = 51,\r
-    CapabilityInterpolationFunction = 52,\r
-    CapabilityTransformFeedback = 53,\r
-    CapabilityGeometryStreams = 54,\r
-    CapabilityStorageImageReadWithoutFormat = 55,\r
-    CapabilityStorageImageWriteWithoutFormat = 56,\r
-    CapabilityMultiViewport = 57,\r
-};\r
-\r
-enum Op {\r
-    OpNop = 0,\r
-    OpUndef = 1,\r
-    OpSourceContinued = 2,\r
-    OpSource = 3,\r
-    OpSourceExtension = 4,\r
-    OpName = 5,\r
-    OpMemberName = 6,\r
-    OpString = 7,\r
-    OpLine = 8,\r
-    OpExtension = 10,\r
-    OpExtInstImport = 11,\r
-    OpExtInst = 12,\r
-    OpMemoryModel = 14,\r
-    OpEntryPoint = 15,\r
-    OpExecutionMode = 16,\r
-    OpCapability = 17,\r
-    OpTypeVoid = 19,\r
-    OpTypeBool = 20,\r
-    OpTypeInt = 21,\r
-    OpTypeFloat = 22,\r
-    OpTypeVector = 23,\r
-    OpTypeMatrix = 24,\r
-    OpTypeImage = 25,\r
-    OpTypeSampler = 26,\r
-    OpTypeSampledImage = 27,\r
-    OpTypeArray = 28,\r
-    OpTypeRuntimeArray = 29,\r
-    OpTypeStruct = 30,\r
-    OpTypeOpaque = 31,\r
-    OpTypePointer = 32,\r
-    OpTypeFunction = 33,\r
-    OpTypeEvent = 34,\r
-    OpTypeDeviceEvent = 35,\r
-    OpTypeReserveId = 36,\r
-    OpTypeQueue = 37,\r
-    OpTypePipe = 38,\r
-    OpTypeForwardPointer = 39,\r
-    OpConstantTrue = 41,\r
-    OpConstantFalse = 42,\r
-    OpConstant = 43,\r
-    OpConstantComposite = 44,\r
-    OpConstantSampler = 45,\r
-    OpConstantNull = 46,\r
-    OpSpecConstantTrue = 48,\r
-    OpSpecConstantFalse = 49,\r
-    OpSpecConstant = 50,\r
-    OpSpecConstantComposite = 51,\r
-    OpSpecConstantOp = 52,\r
-    OpFunction = 54,\r
-    OpFunctionParameter = 55,\r
-    OpFunctionEnd = 56,\r
-    OpFunctionCall = 57,\r
-    OpVariable = 59,\r
-    OpImageTexelPointer = 60,\r
-    OpLoad = 61,\r
-    OpStore = 62,\r
-    OpCopyMemory = 63,\r
-    OpCopyMemorySized = 64,\r
-    OpAccessChain = 65,\r
-    OpInBoundsAccessChain = 66,\r
-    OpPtrAccessChain = 67,\r
-    OpArrayLength = 68,\r
-    OpGenericPtrMemSemantics = 69,\r
-    OpInBoundsPtrAccessChain = 70,\r
-    OpDecorate = 71,\r
-    OpMemberDecorate = 72,\r
-    OpDecorationGroup = 73,\r
-    OpGroupDecorate = 74,\r
-    OpGroupMemberDecorate = 75,\r
-    OpVectorExtractDynamic = 77,\r
-    OpVectorInsertDynamic = 78,\r
-    OpVectorShuffle = 79,\r
-    OpCompositeConstruct = 80,\r
-    OpCompositeExtract = 81,\r
-    OpCompositeInsert = 82,\r
-    OpCopyObject = 83,\r
-    OpTranspose = 84,\r
-    OpSampledImage = 86,\r
-    OpImageSampleImplicitLod = 87,\r
-    OpImageSampleExplicitLod = 88,\r
-    OpImageSampleDrefImplicitLod = 89,\r
-    OpImageSampleDrefExplicitLod = 90,\r
-    OpImageSampleProjImplicitLod = 91,\r
-    OpImageSampleProjExplicitLod = 92,\r
-    OpImageSampleProjDrefImplicitLod = 93,\r
-    OpImageSampleProjDrefExplicitLod = 94,\r
-    OpImageFetch = 95,\r
-    OpImageGather = 96,\r
-    OpImageDrefGather = 97,\r
-    OpImageRead = 98,\r
-    OpImageWrite = 99,\r
-    OpImage = 100,\r
-    OpImageQueryFormat = 101,\r
-    OpImageQueryOrder = 102,\r
-    OpImageQuerySizeLod = 103,\r
-    OpImageQuerySize = 104,\r
-    OpImageQueryLod = 105,\r
-    OpImageQueryLevels = 106,\r
-    OpImageQuerySamples = 107,\r
-    OpConvertFToU = 109,\r
-    OpConvertFToS = 110,\r
-    OpConvertSToF = 111,\r
-    OpConvertUToF = 112,\r
-    OpUConvert = 113,\r
-    OpSConvert = 114,\r
-    OpFConvert = 115,\r
-    OpQuantizeToF16 = 116,\r
-    OpConvertPtrToU = 117,\r
-    OpSatConvertSToU = 118,\r
-    OpSatConvertUToS = 119,\r
-    OpConvertUToPtr = 120,\r
-    OpPtrCastToGeneric = 121,\r
-    OpGenericCastToPtr = 122,\r
-    OpGenericCastToPtrExplicit = 123,\r
-    OpBitcast = 124,\r
-    OpSNegate = 126,\r
-    OpFNegate = 127,\r
-    OpIAdd = 128,\r
-    OpFAdd = 129,\r
-    OpISub = 130,\r
-    OpFSub = 131,\r
-    OpIMul = 132,\r
-    OpFMul = 133,\r
-    OpUDiv = 134,\r
-    OpSDiv = 135,\r
-    OpFDiv = 136,\r
-    OpUMod = 137,\r
-    OpSRem = 138,\r
-    OpSMod = 139,\r
-    OpFRem = 140,\r
-    OpFMod = 141,\r
-    OpVectorTimesScalar = 142,\r
-    OpMatrixTimesScalar = 143,\r
-    OpVectorTimesMatrix = 144,\r
-    OpMatrixTimesVector = 145,\r
-    OpMatrixTimesMatrix = 146,\r
-    OpOuterProduct = 147,\r
-    OpDot = 148,\r
-    OpIAddCarry = 149,\r
-    OpISubBorrow = 150,\r
-    OpUMulExtended = 151,\r
-    OpSMulExtended = 152,\r
-    OpAny = 154,\r
-    OpAll = 155,\r
-    OpIsNan = 156,\r
-    OpIsInf = 157,\r
-    OpIsFinite = 158,\r
-    OpIsNormal = 159,\r
-    OpSignBitSet = 160,\r
-    OpLessOrGreater = 161,\r
-    OpOrdered = 162,\r
-    OpUnordered = 163,\r
-    OpLogicalEqual = 164,\r
-    OpLogicalNotEqual = 165,\r
-    OpLogicalOr = 166,\r
-    OpLogicalAnd = 167,\r
-    OpLogicalNot = 168,\r
-    OpSelect = 169,\r
-    OpIEqual = 170,\r
-    OpINotEqual = 171,\r
-    OpUGreaterThan = 172,\r
-    OpSGreaterThan = 173,\r
-    OpUGreaterThanEqual = 174,\r
-    OpSGreaterThanEqual = 175,\r
-    OpULessThan = 176,\r
-    OpSLessThan = 177,\r
-    OpULessThanEqual = 178,\r
-    OpSLessThanEqual = 179,\r
-    OpFOrdEqual = 180,\r
-    OpFUnordEqual = 181,\r
-    OpFOrdNotEqual = 182,\r
-    OpFUnordNotEqual = 183,\r
-    OpFOrdLessThan = 184,\r
-    OpFUnordLessThan = 185,\r
-    OpFOrdGreaterThan = 186,\r
-    OpFUnordGreaterThan = 187,\r
-    OpFOrdLessThanEqual = 188,\r
-    OpFUnordLessThanEqual = 189,\r
-    OpFOrdGreaterThanEqual = 190,\r
-    OpFUnordGreaterThanEqual = 191,\r
-    OpShiftRightLogical = 194,\r
-    OpShiftRightArithmetic = 195,\r
-    OpShiftLeftLogical = 196,\r
-    OpBitwiseOr = 197,\r
-    OpBitwiseXor = 198,\r
-    OpBitwiseAnd = 199,\r
-    OpNot = 200,\r
-    OpBitFieldInsert = 201,\r
-    OpBitFieldSExtract = 202,\r
-    OpBitFieldUExtract = 203,\r
-    OpBitReverse = 204,\r
-    OpBitCount = 205,\r
-    OpDPdx = 207,\r
-    OpDPdy = 208,\r
-    OpFwidth = 209,\r
-    OpDPdxFine = 210,\r
-    OpDPdyFine = 211,\r
-    OpFwidthFine = 212,\r
-    OpDPdxCoarse = 213,\r
-    OpDPdyCoarse = 214,\r
-    OpFwidthCoarse = 215,\r
-    OpEmitVertex = 218,\r
-    OpEndPrimitive = 219,\r
-    OpEmitStreamVertex = 220,\r
-    OpEndStreamPrimitive = 221,\r
-    OpControlBarrier = 224,\r
-    OpMemoryBarrier = 225,\r
-    OpAtomicLoad = 227,\r
-    OpAtomicStore = 228,\r
-    OpAtomicExchange = 229,\r
-    OpAtomicCompareExchange = 230,\r
-    OpAtomicCompareExchangeWeak = 231,\r
-    OpAtomicIIncrement = 232,\r
-    OpAtomicIDecrement = 233,\r
-    OpAtomicIAdd = 234,\r
-    OpAtomicISub = 235,\r
-    OpAtomicSMin = 236,\r
-    OpAtomicUMin = 237,\r
-    OpAtomicSMax = 238,\r
-    OpAtomicUMax = 239,\r
-    OpAtomicAnd = 240,\r
-    OpAtomicOr = 241,\r
-    OpAtomicXor = 242,\r
-    OpPhi = 245,\r
-    OpLoopMerge = 246,\r
-    OpSelectionMerge = 247,\r
-    OpLabel = 248,\r
-    OpBranch = 249,\r
-    OpBranchConditional = 250,\r
-    OpSwitch = 251,\r
-    OpKill = 252,\r
-    OpReturn = 253,\r
-    OpReturnValue = 254,\r
-    OpUnreachable = 255,\r
-    OpLifetimeStart = 256,\r
-    OpLifetimeStop = 257,\r
-    OpGroupAsyncCopy = 259,\r
-    OpGroupWaitEvents = 260,\r
-    OpGroupAll = 261,\r
-    OpGroupAny = 262,\r
-    OpGroupBroadcast = 263,\r
-    OpGroupIAdd = 264,\r
-    OpGroupFAdd = 265,\r
-    OpGroupFMin = 266,\r
-    OpGroupUMin = 267,\r
-    OpGroupSMin = 268,\r
-    OpGroupFMax = 269,\r
-    OpGroupUMax = 270,\r
-    OpGroupSMax = 271,\r
-    OpReadPipe = 274,\r
-    OpWritePipe = 275,\r
-    OpReservedReadPipe = 276,\r
-    OpReservedWritePipe = 277,\r
-    OpReserveReadPipePackets = 278,\r
-    OpReserveWritePipePackets = 279,\r
-    OpCommitReadPipe = 280,\r
-    OpCommitWritePipe = 281,\r
-    OpIsValidReserveId = 282,\r
-    OpGetNumPipePackets = 283,\r
-    OpGetMaxPipePackets = 284,\r
-    OpGroupReserveReadPipePackets = 285,\r
-    OpGroupReserveWritePipePackets = 286,\r
-    OpGroupCommitReadPipe = 287,\r
-    OpGroupCommitWritePipe = 288,\r
-    OpEnqueueMarker = 291,\r
-    OpEnqueueKernel = 292,\r
-    OpGetKernelNDrangeSubGroupCount = 293,\r
-    OpGetKernelNDrangeMaxSubGroupSize = 294,\r
-    OpGetKernelWorkGroupSize = 295,\r
-    OpGetKernelPreferredWorkGroupSizeMultiple = 296,\r
-    OpRetainEvent = 297,\r
-    OpReleaseEvent = 298,\r
-    OpCreateUserEvent = 299,\r
-    OpIsValidEvent = 300,\r
-    OpSetUserEventStatus = 301,\r
-    OpCaptureEventProfilingInfo = 302,\r
-    OpGetDefaultQueue = 303,\r
-    OpBuildNDRange = 304,\r
-    OpImageSparseSampleImplicitLod = 305,\r
-    OpImageSparseSampleExplicitLod = 306,\r
-    OpImageSparseSampleDrefImplicitLod = 307,\r
-    OpImageSparseSampleDrefExplicitLod = 308,\r
-    OpImageSparseSampleProjImplicitLod = 309,\r
-    OpImageSparseSampleProjExplicitLod = 310,\r
-    OpImageSparseSampleProjDrefImplicitLod = 311,\r
-    OpImageSparseSampleProjDrefExplicitLod = 312,\r
-    OpImageSparseFetch = 313,\r
-    OpImageSparseGather = 314,\r
-    OpImageSparseDrefGather = 315,\r
-    OpImageSparseTexelsResident = 316,\r
-    OpNoLine = 317,\r
-    OpAtomicFlagTestAndSet = 318,\r
-    OpAtomicFlagClear = 319,\r
-    OpImageSparseRead = 320,\r
-};\r
-\r
-// Overload operator| for mask bit combining\r
-\r
-inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }\r
-inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }\r
-inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }\r
-inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }\r
-inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }\r
-inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }\r
-inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }\r
-inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }\r
-\r
-}  // end namespace spv\r
-\r
-#endif  // #ifndef spirv_HPP\r
+// 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 6
+
+static const unsigned int MagicNumber = 0x07230203;
+static const unsigned int Version = 0x00010000;
+static const unsigned int Revision = 6;
+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,
+    SourceLanguageHLSL = 5,
+    SourceLanguageMax = 0x7fffffff,
+};
+
+enum ExecutionModel {
+    ExecutionModelVertex = 0,
+    ExecutionModelTessellationControl = 1,
+    ExecutionModelTessellationEvaluation = 2,
+    ExecutionModelGeometry = 3,
+    ExecutionModelFragment = 4,
+    ExecutionModelGLCompute = 5,
+    ExecutionModelKernel = 6,
+    ExecutionModelMax = 0x7fffffff,
+};
+
+enum AddressingModel {
+    AddressingModelLogical = 0,
+    AddressingModelPhysical32 = 1,
+    AddressingModelPhysical64 = 2,
+    AddressingModelMax = 0x7fffffff,
+};
+
+enum MemoryModel {
+    MemoryModelSimple = 0,
+    MemoryModelGLSL450 = 1,
+    MemoryModelOpenCL = 2,
+    MemoryModelMax = 0x7fffffff,
+};
+
+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,
+    ExecutionModeMax = 0x7fffffff,
+};
+
+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,
+    StorageClassMax = 0x7fffffff,
+};
+
+enum Dim {
+    Dim1D = 0,
+    Dim2D = 1,
+    Dim3D = 2,
+    DimCube = 3,
+    DimRect = 4,
+    DimBuffer = 5,
+    DimSubpassData = 6,
+    DimMax = 0x7fffffff,
+};
+
+enum SamplerAddressingMode {
+    SamplerAddressingModeNone = 0,
+    SamplerAddressingModeClampToEdge = 1,
+    SamplerAddressingModeClamp = 2,
+    SamplerAddressingModeRepeat = 3,
+    SamplerAddressingModeRepeatMirrored = 4,
+    SamplerAddressingModeMax = 0x7fffffff,
+};
+
+enum SamplerFilterMode {
+    SamplerFilterModeNearest = 0,
+    SamplerFilterModeLinear = 1,
+    SamplerFilterModeMax = 0x7fffffff,
+};
+
+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,
+    ImageFormatMax = 0x7fffffff,
+};
+
+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,
+    ImageChannelOrderABGR = 19,
+    ImageChannelOrderMax = 0x7fffffff,
+};
+
+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,
+    ImageChannelDataTypeMax = 0x7fffffff,
+};
+
+enum ImageOperandsShift {
+    ImageOperandsBiasShift = 0,
+    ImageOperandsLodShift = 1,
+    ImageOperandsGradShift = 2,
+    ImageOperandsConstOffsetShift = 3,
+    ImageOperandsOffsetShift = 4,
+    ImageOperandsConstOffsetsShift = 5,
+    ImageOperandsSampleShift = 6,
+    ImageOperandsMinLodShift = 7,
+    ImageOperandsMax = 0x7fffffff,
+};
+
+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,
+    FPFastMathModeMax = 0x7fffffff,
+};
+
+enum FPFastMathModeMask {
+    FPFastMathModeMaskNone = 0,
+    FPFastMathModeNotNaNMask = 0x00000001,
+    FPFastMathModeNotInfMask = 0x00000002,
+    FPFastMathModeNSZMask = 0x00000004,
+    FPFastMathModeAllowRecipMask = 0x00000008,
+    FPFastMathModeFastMask = 0x00000010,
+};
+
+enum FPRoundingMode {
+    FPRoundingModeRTE = 0,
+    FPRoundingModeRTZ = 1,
+    FPRoundingModeRTP = 2,
+    FPRoundingModeRTN = 3,
+    FPRoundingModeMax = 0x7fffffff,
+};
+
+enum LinkageType {
+    LinkageTypeExport = 0,
+    LinkageTypeImport = 1,
+    LinkageTypeMax = 0x7fffffff,
+};
+
+enum AccessQualifier {
+    AccessQualifierReadOnly = 0,
+    AccessQualifierWriteOnly = 1,
+    AccessQualifierReadWrite = 2,
+    AccessQualifierMax = 0x7fffffff,
+};
+
+enum FunctionParameterAttribute {
+    FunctionParameterAttributeZext = 0,
+    FunctionParameterAttributeSext = 1,
+    FunctionParameterAttributeByVal = 2,
+    FunctionParameterAttributeSret = 3,
+    FunctionParameterAttributeNoAlias = 4,
+    FunctionParameterAttributeNoCapture = 5,
+    FunctionParameterAttributeNoWrite = 6,
+    FunctionParameterAttributeNoReadWrite = 7,
+    FunctionParameterAttributeMax = 0x7fffffff,
+};
+
+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,
+    DecorationMax = 0x7fffffff,
+};
+
+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,
+    BuiltInMax = 0x7fffffff,
+};
+
+enum SelectionControlShift {
+    SelectionControlFlattenShift = 0,
+    SelectionControlDontFlattenShift = 1,
+    SelectionControlMax = 0x7fffffff,
+};
+
+enum SelectionControlMask {
+    SelectionControlMaskNone = 0,
+    SelectionControlFlattenMask = 0x00000001,
+    SelectionControlDontFlattenMask = 0x00000002,
+};
+
+enum LoopControlShift {
+    LoopControlUnrollShift = 0,
+    LoopControlDontUnrollShift = 1,
+    LoopControlMax = 0x7fffffff,
+};
+
+enum LoopControlMask {
+    LoopControlMaskNone = 0,
+    LoopControlUnrollMask = 0x00000001,
+    LoopControlDontUnrollMask = 0x00000002,
+};
+
+enum FunctionControlShift {
+    FunctionControlInlineShift = 0,
+    FunctionControlDontInlineShift = 1,
+    FunctionControlPureShift = 2,
+    FunctionControlConstShift = 3,
+    FunctionControlMax = 0x7fffffff,
+};
+
+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,
+    MemorySemanticsMax = 0x7fffffff,
+};
+
+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,
+    MemoryAccessMax = 0x7fffffff,
+};
+
+enum MemoryAccessMask {
+    MemoryAccessMaskNone = 0,
+    MemoryAccessVolatileMask = 0x00000001,
+    MemoryAccessAlignedMask = 0x00000002,
+    MemoryAccessNontemporalMask = 0x00000004,
+};
+
+enum Scope {
+    ScopeCrossDevice = 0,
+    ScopeDevice = 1,
+    ScopeWorkgroup = 2,
+    ScopeSubgroup = 3,
+    ScopeInvocation = 4,
+    ScopeMax = 0x7fffffff,
+};
+
+enum GroupOperation {
+    GroupOperationReduce = 0,
+    GroupOperationInclusiveScan = 1,
+    GroupOperationExclusiveScan = 2,
+    GroupOperationMax = 0x7fffffff,
+};
+
+enum KernelEnqueueFlags {
+    KernelEnqueueFlagsNoWait = 0,
+    KernelEnqueueFlagsWaitKernel = 1,
+    KernelEnqueueFlagsWaitWorkGroup = 2,
+    KernelEnqueueFlagsMax = 0x7fffffff,
+};
+
+enum KernelProfilingInfoShift {
+    KernelProfilingInfoCmdExecTimeShift = 0,
+    KernelProfilingInfoMax = 0x7fffffff,
+};
+
+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,
+    CapabilityMax = 0x7fffffff,
+};
+
+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,
+    OpMax = 0x7fffffff,
+};
+
+// 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
+
index 42c054a..c584c9d 100755 (executable)
@@ -64,8 +64,7 @@ class Module;
 const Id NoResult = 0;
 const Id NoType = 0;
 
-const unsigned int BadValue = 0xFFFFFFFF;
-const Decoration NoPrecision = (Decoration)BadValue;
+const Decoration NoPrecision = DecorationMax;
 const MemorySemanticsMask MemorySemanticsAllMemory = 
                 (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
                                       MemorySemanticsUniformMemoryMask |