layers: port ShaderChecker to SPIR-V v31 (from ChrisF)
authorGregF <greg@LunarG.com>
Tue, 21 Jul 2015 23:22:50 +0000 (17:22 -0600)
committerGregF <greg@LunarG.com>
Tue, 11 Aug 2015 00:09:37 +0000 (18:09 -0600)
layers/shader_checker.cpp
layers/spirv/spirv.h [deleted file]
layers/spirv/spirv.hpp [new file with mode: 0644]

index de83b90..e3f822c 100644 (file)
@@ -43,7 +43,7 @@
 #include "vk_loader_platform.h"
 #include "vk_layer_extension_utils.h"
 
-#include "spirv/spirv.h"
+#include "spirv/spirv.hpp"
 
 
 typedef struct _layer_data {
@@ -105,8 +105,9 @@ build_type_def_index(std::vector<unsigned> const &words, std::unordered_map<unsi
         case spv::OpTypeFloat:
         case spv::OpTypeVector:
         case spv::OpTypeMatrix:
+        case spv::OpTypeImage:
         case spv::OpTypeSampler:
-        case spv::OpTypeFilter:
+        case spv::OpTypeSampledImage:
         case spv::OpTypeArray:
         case spv::OpTypeRuntimeArray:
         case spv::OpTypeStruct:
@@ -296,8 +297,8 @@ storage_class_name(unsigned sc)
     case spv::StorageClassPrivateGlobal: return "private global";
     case spv::StorageClassFunction: return "function";
     case spv::StorageClassGeneric: return "generic";
-    case spv::StorageClassPrivate: return "private";
     case spv::StorageClassAtomicCounter: return "atomic counter";
+    case spv::StorageClassImage: return "image";
     default: return "unknown";
     }
 }
diff --git a/layers/spirv/spirv.h b/layers/spirv/spirv.h
deleted file mode 100644 (file)
index f3d18a3..0000000
+++ /dev/null
@@ -1,1304 +0,0 @@
-/*\r
-** Copyright (c) 2015 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
-\r
-/*\r
-** This header is automatically generated by the same tool that creates\r
-** the Binary Section of the SPIR-V specification.\r
-*/\r
-\r
-/*\r
-** Specification revision 30.\r
-** Enumeration tokens for SPIR-V, in three styles: C, C++, generic.\r
-** - C++ will have the tokens in the "spv" name space, with no prefix.\r
-** - C will have tokens with as "Spv" prefix.\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
-\r
-#ifndef spirv_H\r
-#define spirv_H\r
-\r
-#ifdef __cplusplus\r
-\r
-namespace spv {\r
-\r
-const int MagicNumber = 0x07230203;\r
-const int Version = 99;\r
-\r
-typedef unsigned int Id;\r
-\r
-const unsigned int OpCodeMask = 0xFFFF;\r
-const unsigned int WordCountShift = 16;\r
-\r
-enum SourceLanguage {\r
-    SourceLanguageUnknown = 0,\r
-    SourceLanguageESSL = 1,\r
-    SourceLanguageGLSL = 2,\r
-    SourceLanguageOpenCL = 3,\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
-    MemoryModelOpenCL12 = 2,\r
-    MemoryModelOpenCL20 = 3,\r
-    MemoryModelOpenCL21 = 4,\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
-    ExecutionModeEarlyFragmentTests = 8,\r
-    ExecutionModePointMode = 9,\r
-    ExecutionModeXfb = 10,\r
-    ExecutionModeDepthReplacing = 11,\r
-    ExecutionModeDepthAny = 12,\r
-    ExecutionModeDepthGreater = 13,\r
-    ExecutionModeDepthLess = 14,\r
-    ExecutionModeDepthUnchanged = 15,\r
-    ExecutionModeLocalSize = 16,\r
-    ExecutionModeLocalSizeHint = 17,\r
-    ExecutionModeInputPoints = 18,\r
-    ExecutionModeInputLines = 19,\r
-    ExecutionModeInputLinesAdjacency = 20,\r
-    ExecutionModeInputTriangles = 21,\r
-    ExecutionModeInputTrianglesAdjacency = 22,\r
-    ExecutionModeInputQuads = 23,\r
-    ExecutionModeInputIsolines = 24,\r
-    ExecutionModeOutputVertices = 25,\r
-    ExecutionModeOutputPoints = 26,\r
-    ExecutionModeOutputLineStrip = 27,\r
-    ExecutionModeOutputTriangleStrip = 28,\r
-    ExecutionModeVecTypeHint = 29,\r
-    ExecutionModeContractionOff = 30,\r
-};\r
-\r
-enum StorageClass {\r
-    StorageClassUniformConstant = 0,\r
-    StorageClassInput = 1,\r
-    StorageClassUniform = 2,\r
-    StorageClassOutput = 3,\r
-    StorageClassWorkgroupLocal = 4,\r
-    StorageClassWorkgroupGlobal = 5,\r
-    StorageClassPrivateGlobal = 6,\r
-    StorageClassFunction = 7,\r
-    StorageClassGeneric = 8,\r
-    StorageClassPrivate = 9,\r
-    StorageClassAtomicCounter = 10,\r
-};\r
-\r
-enum Dim {\r
-    Dim1D = 0,\r
-    Dim2D = 1,\r
-    Dim3D = 2,\r
-    DimCube = 3,\r
-    DimRect = 4,\r
-    DimBuffer = 5,\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 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
-    FunctionParameterAttributeSVM = 6,\r
-    FunctionParameterAttributeNoWrite = 7,\r
-    FunctionParameterAttributeNoReadWrite = 8,\r
-};\r
-\r
-enum Decoration {\r
-    DecorationPrecisionLow = 0,\r
-    DecorationPrecisionMedium = 1,\r
-    DecorationPrecisionHigh = 2,\r
-    DecorationBlock = 3,\r
-    DecorationBufferBlock = 4,\r
-    DecorationRowMajor = 5,\r
-    DecorationColMajor = 6,\r
-    DecorationGLSLShared = 7,\r
-    DecorationGLSLStd140 = 8,\r
-    DecorationGLSLStd430 = 9,\r
-    DecorationGLSLPacked = 10,\r
-    DecorationSmooth = 11,\r
-    DecorationNoperspective = 12,\r
-    DecorationFlat = 13,\r
-    DecorationPatch = 14,\r
-    DecorationCentroid = 15,\r
-    DecorationSample = 16,\r
-    DecorationInvariant = 17,\r
-    DecorationRestrict = 18,\r
-    DecorationAliased = 19,\r
-    DecorationVolatile = 20,\r
-    DecorationConstant = 21,\r
-    DecorationCoherent = 22,\r
-    DecorationNonwritable = 23,\r
-    DecorationNonreadable = 24,\r
-    DecorationUniform = 25,\r
-    DecorationNoStaticUse = 26,\r
-    DecorationCPacked = 27,\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
-    DecorationAlignment = 36,\r
-    DecorationXfbBuffer = 37,\r
-    DecorationStride = 38,\r
-    DecorationBuiltIn = 39,\r
-    DecorationFuncParamAttr = 40,\r
-    DecorationFPRoundingMode = 41,\r
-    DecorationFPFastMathMode = 42,\r
-    DecorationLinkageAttributes = 43,\r
-    DecorationSpecId = 44,\r
-};\r
-\r
-enum BuiltIn {\r
-    BuiltInPosition = 0,\r
-    BuiltInPointSize = 1,\r
-    BuiltInClipVertex = 2,\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
-    BuiltInFragColor = 21,\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
-    BuiltInWorkgroupLinearId = 35,\r
-    BuiltInSubgroupSize = 36,\r
-    BuiltInSubgroupMaxSize = 37,\r
-    BuiltInNumSubgroups = 38,\r
-    BuiltInNumEnqueuedSubgroups = 39,\r
-    BuiltInSubgroupId = 40,\r
-    BuiltInSubgroupLocalInvocationId = 41,\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
-    MemorySemanticsRelaxedShift = 0,\r
-    MemorySemanticsSequentiallyConsistentShift = 1,\r
-    MemorySemanticsAcquireShift = 2,\r
-    MemorySemanticsReleaseShift = 3,\r
-    MemorySemanticsUniformMemoryShift = 4,\r
-    MemorySemanticsSubgroupMemoryShift = 5,\r
-    MemorySemanticsWorkgroupLocalMemoryShift = 6,\r
-    MemorySemanticsWorkgroupGlobalMemoryShift = 7,\r
-    MemorySemanticsAtomicCounterMemoryShift = 8,\r
-    MemorySemanticsImageMemoryShift = 9,\r
-};\r
-\r
-enum MemorySemanticsMask {\r
-    MemorySemanticsMaskNone = 0,\r
-    MemorySemanticsRelaxedMask = 0x00000001,\r
-    MemorySemanticsSequentiallyConsistentMask = 0x00000002,\r
-    MemorySemanticsAcquireMask = 0x00000004,\r
-    MemorySemanticsReleaseMask = 0x00000008,\r
-    MemorySemanticsUniformMemoryMask = 0x00000010,\r
-    MemorySemanticsSubgroupMemoryMask = 0x00000020,\r
-    MemorySemanticsWorkgroupLocalMemoryMask = 0x00000040,\r
-    MemorySemanticsWorkgroupGlobalMemoryMask = 0x00000080,\r
-    MemorySemanticsAtomicCounterMemoryMask = 0x00000100,\r
-    MemorySemanticsImageMemoryMask = 0x00000200,\r
-};\r
-\r
-enum MemoryAccessShift {\r
-    MemoryAccessVolatileShift = 0,\r
-    MemoryAccessAlignedShift = 1,\r
-};\r
-\r
-enum MemoryAccessMask {\r
-    MemoryAccessMaskNone = 0,\r
-    MemoryAccessVolatileMask = 0x00000001,\r
-    MemoryAccessAlignedMask = 0x00000002,\r
-};\r
-\r
-enum ExecutionScope {\r
-    ExecutionScopeCrossDevice = 0,\r
-    ExecutionScopeDevice = 1,\r
-    ExecutionScopeWorkgroup = 2,\r
-    ExecutionScopeSubgroup = 3,\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 Op {\r
-    OpNop = 0,\r
-    OpSource = 1,\r
-    OpSourceExtension = 2,\r
-    OpExtension = 3,\r
-    OpExtInstImport = 4,\r
-    OpMemoryModel = 5,\r
-    OpEntryPoint = 6,\r
-    OpExecutionMode = 7,\r
-    OpTypeVoid = 8,\r
-    OpTypeBool = 9,\r
-    OpTypeInt = 10,\r
-    OpTypeFloat = 11,\r
-    OpTypeVector = 12,\r
-    OpTypeMatrix = 13,\r
-    OpTypeSampler = 14,\r
-    OpTypeFilter = 15,\r
-    OpTypeArray = 16,\r
-    OpTypeRuntimeArray = 17,\r
-    OpTypeStruct = 18,\r
-    OpTypeOpaque = 19,\r
-    OpTypePointer = 20,\r
-    OpTypeFunction = 21,\r
-    OpTypeEvent = 22,\r
-    OpTypeDeviceEvent = 23,\r
-    OpTypeReserveId = 24,\r
-    OpTypeQueue = 25,\r
-    OpTypePipe = 26,\r
-    OpConstantTrue = 27,\r
-    OpConstantFalse = 28,\r
-    OpConstant = 29,\r
-    OpConstantComposite = 30,\r
-    OpConstantSampler = 31,\r
-    OpConstantNullPointer = 32,\r
-    OpConstantNullObject = 33,\r
-    OpSpecConstantTrue = 34,\r
-    OpSpecConstantFalse = 35,\r
-    OpSpecConstant = 36,\r
-    OpSpecConstantComposite = 37,\r
-    OpVariable = 38,\r
-    OpVariableArray = 39,\r
-    OpFunction = 40,\r
-    OpFunctionParameter = 41,\r
-    OpFunctionEnd = 42,\r
-    OpFunctionCall = 43,\r
-    OpExtInst = 44,\r
-    OpUndef = 45,\r
-    OpLoad = 46,\r
-    OpStore = 47,\r
-    OpPhi = 48,\r
-    OpDecorationGroup = 49,\r
-    OpDecorate = 50,\r
-    OpMemberDecorate = 51,\r
-    OpGroupDecorate = 52,\r
-    OpGroupMemberDecorate = 53,\r
-    OpName = 54,\r
-    OpMemberName = 55,\r
-    OpString = 56,\r
-    OpLine = 57,\r
-    OpVectorExtractDynamic = 58,\r
-    OpVectorInsertDynamic = 59,\r
-    OpVectorShuffle = 60,\r
-    OpCompositeConstruct = 61,\r
-    OpCompositeExtract = 62,\r
-    OpCompositeInsert = 63,\r
-    OpCopyObject = 64,\r
-    OpCopyMemory = 65,\r
-    OpCopyMemorySized = 66,\r
-    OpSampler = 67,\r
-    OpTextureSample = 68,\r
-    OpTextureSampleDref = 69,\r
-    OpTextureSampleLod = 70,\r
-    OpTextureSampleProj = 71,\r
-    OpTextureSampleGrad = 72,\r
-    OpTextureSampleOffset = 73,\r
-    OpTextureSampleProjLod = 74,\r
-    OpTextureSampleProjGrad = 75,\r
-    OpTextureSampleLodOffset = 76,\r
-    OpTextureSampleProjOffset = 77,\r
-    OpTextureSampleGradOffset = 78,\r
-    OpTextureSampleProjLodOffset = 79,\r
-    OpTextureSampleProjGradOffset = 80,\r
-    OpTextureFetchTexelLod = 81,\r
-    OpTextureFetchTexelOffset = 82,\r
-    OpTextureFetchSample = 83,\r
-    OpTextureFetchTexel = 84,\r
-    OpTextureGather = 85,\r
-    OpTextureGatherOffset = 86,\r
-    OpTextureGatherOffsets = 87,\r
-    OpTextureQuerySizeLod = 88,\r
-    OpTextureQuerySize = 89,\r
-    OpTextureQueryLod = 90,\r
-    OpTextureQueryLevels = 91,\r
-    OpTextureQuerySamples = 92,\r
-    OpAccessChain = 93,\r
-    OpInBoundsAccessChain = 94,\r
-    OpSNegate = 95,\r
-    OpFNegate = 96,\r
-    OpNot = 97,\r
-    OpAny = 98,\r
-    OpAll = 99,\r
-    OpConvertFToU = 100,\r
-    OpConvertFToS = 101,\r
-    OpConvertSToF = 102,\r
-    OpConvertUToF = 103,\r
-    OpUConvert = 104,\r
-    OpSConvert = 105,\r
-    OpFConvert = 106,\r
-    OpConvertPtrToU = 107,\r
-    OpConvertUToPtr = 108,\r
-    OpPtrCastToGeneric = 109,\r
-    OpGenericCastToPtr = 110,\r
-    OpBitcast = 111,\r
-    OpTranspose = 112,\r
-    OpIsNan = 113,\r
-    OpIsInf = 114,\r
-    OpIsFinite = 115,\r
-    OpIsNormal = 116,\r
-    OpSignBitSet = 117,\r
-    OpLessOrGreater = 118,\r
-    OpOrdered = 119,\r
-    OpUnordered = 120,\r
-    OpArrayLength = 121,\r
-    OpIAdd = 122,\r
-    OpFAdd = 123,\r
-    OpISub = 124,\r
-    OpFSub = 125,\r
-    OpIMul = 126,\r
-    OpFMul = 127,\r
-    OpUDiv = 128,\r
-    OpSDiv = 129,\r
-    OpFDiv = 130,\r
-    OpUMod = 131,\r
-    OpSRem = 132,\r
-    OpSMod = 133,\r
-    OpFRem = 134,\r
-    OpFMod = 135,\r
-    OpVectorTimesScalar = 136,\r
-    OpMatrixTimesScalar = 137,\r
-    OpVectorTimesMatrix = 138,\r
-    OpMatrixTimesVector = 139,\r
-    OpMatrixTimesMatrix = 140,\r
-    OpOuterProduct = 141,\r
-    OpDot = 142,\r
-    OpShiftRightLogical = 143,\r
-    OpShiftRightArithmetic = 144,\r
-    OpShiftLeftLogical = 145,\r
-    OpLogicalOr = 146,\r
-    OpLogicalXor = 147,\r
-    OpLogicalAnd = 148,\r
-    OpBitwiseOr = 149,\r
-    OpBitwiseXor = 150,\r
-    OpBitwiseAnd = 151,\r
-    OpSelect = 152,\r
-    OpIEqual = 153,\r
-    OpFOrdEqual = 154,\r
-    OpFUnordEqual = 155,\r
-    OpINotEqual = 156,\r
-    OpFOrdNotEqual = 157,\r
-    OpFUnordNotEqual = 158,\r
-    OpULessThan = 159,\r
-    OpSLessThan = 160,\r
-    OpFOrdLessThan = 161,\r
-    OpFUnordLessThan = 162,\r
-    OpUGreaterThan = 163,\r
-    OpSGreaterThan = 164,\r
-    OpFOrdGreaterThan = 165,\r
-    OpFUnordGreaterThan = 166,\r
-    OpULessThanEqual = 167,\r
-    OpSLessThanEqual = 168,\r
-    OpFOrdLessThanEqual = 169,\r
-    OpFUnordLessThanEqual = 170,\r
-    OpUGreaterThanEqual = 171,\r
-    OpSGreaterThanEqual = 172,\r
-    OpFOrdGreaterThanEqual = 173,\r
-    OpFUnordGreaterThanEqual = 174,\r
-    OpDPdx = 175,\r
-    OpDPdy = 176,\r
-    OpFwidth = 177,\r
-    OpDPdxFine = 178,\r
-    OpDPdyFine = 179,\r
-    OpFwidthFine = 180,\r
-    OpDPdxCoarse = 181,\r
-    OpDPdyCoarse = 182,\r
-    OpFwidthCoarse = 183,\r
-    OpEmitVertex = 184,\r
-    OpEndPrimitive = 185,\r
-    OpEmitStreamVertex = 186,\r
-    OpEndStreamPrimitive = 187,\r
-    OpControlBarrier = 188,\r
-    OpMemoryBarrier = 189,\r
-    OpImagePointer = 190,\r
-    OpAtomicInit = 191,\r
-    OpAtomicLoad = 192,\r
-    OpAtomicStore = 193,\r
-    OpAtomicExchange = 194,\r
-    OpAtomicCompareExchange = 195,\r
-    OpAtomicCompareExchangeWeak = 196,\r
-    OpAtomicIIncrement = 197,\r
-    OpAtomicIDecrement = 198,\r
-    OpAtomicIAdd = 199,\r
-    OpAtomicISub = 200,\r
-    OpAtomicUMin = 201,\r
-    OpAtomicUMax = 202,\r
-    OpAtomicAnd = 203,\r
-    OpAtomicOr = 204,\r
-    OpAtomicXor = 205,\r
-    OpLoopMerge = 206,\r
-    OpSelectionMerge = 207,\r
-    OpLabel = 208,\r
-    OpBranch = 209,\r
-    OpBranchConditional = 210,\r
-    OpSwitch = 211,\r
-    OpKill = 212,\r
-    OpReturn = 213,\r
-    OpReturnValue = 214,\r
-    OpUnreachable = 215,\r
-    OpLifetimeStart = 216,\r
-    OpLifetimeStop = 217,\r
-    OpCompileFlag = 218,\r
-    OpAsyncGroupCopy = 219,\r
-    OpWaitGroupEvents = 220,\r
-    OpGroupAll = 221,\r
-    OpGroupAny = 222,\r
-    OpGroupBroadcast = 223,\r
-    OpGroupIAdd = 224,\r
-    OpGroupFAdd = 225,\r
-    OpGroupFMin = 226,\r
-    OpGroupUMin = 227,\r
-    OpGroupSMin = 228,\r
-    OpGroupFMax = 229,\r
-    OpGroupUMax = 230,\r
-    OpGroupSMax = 231,\r
-    OpGenericCastToPtrExplicit = 232,\r
-    OpGenericPtrMemSemantics = 233,\r
-    OpReadPipe = 234,\r
-    OpWritePipe = 235,\r
-    OpReservedReadPipe = 236,\r
-    OpReservedWritePipe = 237,\r
-    OpReserveReadPipePackets = 238,\r
-    OpReserveWritePipePackets = 239,\r
-    OpCommitReadPipe = 240,\r
-    OpCommitWritePipe = 241,\r
-    OpIsValidReserveId = 242,\r
-    OpGetNumPipePackets = 243,\r
-    OpGetMaxPipePackets = 244,\r
-    OpGroupReserveReadPipePackets = 245,\r
-    OpGroupReserveWritePipePackets = 246,\r
-    OpGroupCommitReadPipe = 247,\r
-    OpGroupCommitWritePipe = 248,\r
-    OpEnqueueMarker = 249,\r
-    OpEnqueueKernel = 250,\r
-    OpGetKernelNDrangeSubGroupCount = 251,\r
-    OpGetKernelNDrangeMaxSubGroupSize = 252,\r
-    OpGetKernelWorkGroupSize = 253,\r
-    OpGetKernelPreferredWorkGroupSizeMultiple = 254,\r
-    OpRetainEvent = 255,\r
-    OpReleaseEvent = 256,\r
-    OpCreateUserEvent = 257,\r
-    OpIsValidEvent = 258,\r
-    OpSetUserEventStatus = 259,\r
-    OpCaptureEventProfilingInfo = 260,\r
-    OpGetDefaultQueue = 261,\r
-    OpBuildNDRange = 262,\r
-    OpSatConvertSToU = 263,\r
-    OpSatConvertUToS = 264,\r
-    OpAtomicIMin = 265,\r
-    OpAtomicIMax = 266,\r
-};\r
-\r
-};  // end namespace spv\r
-\r
-#endif  // #ifdef __cplusplus\r
-\r
-\r
-#ifndef __cplusplus\r
-\r
-const int SpvMagicNumber = 0x07230203;\r
-const int SpvVersion = 99;\r
-\r
-typedef unsigned int SpvId;\r
-\r
-const unsigned int SpvOpCodeMask = 0xFFFF;\r
-const unsigned int SpvWordCountShift = 16;\r
-\r
-typedef enum SpvSourceLanguage_ {\r
-    SpvSourceLanguageUnknown = 0,\r
-    SpvSourceLanguageESSL = 1,\r
-    SpvSourceLanguageGLSL = 2,\r
-    SpvSourceLanguageOpenCL = 3,\r
-} SpvSourceLanguage;\r
-\r
-typedef enum SpvExecutionModel_ {\r
-    SpvExecutionModelVertex = 0,\r
-    SpvExecutionModelTessellationControl = 1,\r
-    SpvExecutionModelTessellationEvaluation = 2,\r
-    SpvExecutionModelGeometry = 3,\r
-    SpvExecutionModelFragment = 4,\r
-    SpvExecutionModelGLCompute = 5,\r
-    SpvExecutionModelKernel = 6,\r
-} SpvExecutionModel;\r
-\r
-typedef enum SpvAddressingModel_ {\r
-    SpvAddressingModelLogical = 0,\r
-    SpvAddressingModelPhysical32 = 1,\r
-    SpvAddressingModelPhysical64 = 2,\r
-} SpvAddressingModel;\r
-\r
-typedef enum SpvMemoryModel_ {\r
-    SpvMemoryModelSimple = 0,\r
-    SpvMemoryModelGLSL450 = 1,\r
-    SpvMemoryModelOpenCL12 = 2,\r
-    SpvMemoryModelOpenCL20 = 3,\r
-    SpvMemoryModelOpenCL21 = 4,\r
-} SpvMemoryModel;\r
-\r
-typedef enum SpvExecutionMode_ {\r
-    SpvExecutionModeInvocations = 0,\r
-    SpvExecutionModeSpacingEqual = 1,\r
-    SpvExecutionModeSpacingFractionalEven = 2,\r
-    SpvExecutionModeSpacingFractionalOdd = 3,\r
-    SpvExecutionModeVertexOrderCw = 4,\r
-    SpvExecutionModeVertexOrderCcw = 5,\r
-    SpvExecutionModePixelCenterInteger = 6,\r
-    SpvExecutionModeOriginUpperLeft = 7,\r
-    SpvExecutionModeEarlyFragmentTests = 8,\r
-    SpvExecutionModePointMode = 9,\r
-    SpvExecutionModeXfb = 10,\r
-    SpvExecutionModeDepthReplacing = 11,\r
-    SpvExecutionModeDepthAny = 12,\r
-    SpvExecutionModeDepthGreater = 13,\r
-    SpvExecutionModeDepthLess = 14,\r
-    SpvExecutionModeDepthUnchanged = 15,\r
-    SpvExecutionModeLocalSize = 16,\r
-    SpvExecutionModeLocalSizeHint = 17,\r
-    SpvExecutionModeInputPoints = 18,\r
-    SpvExecutionModeInputLines = 19,\r
-    SpvExecutionModeInputLinesAdjacency = 20,\r
-    SpvExecutionModeInputTriangles = 21,\r
-    SpvExecutionModeInputTrianglesAdjacency = 22,\r
-    SpvExecutionModeInputQuads = 23,\r
-    SpvExecutionModeInputIsolines = 24,\r
-    SpvExecutionModeOutputVertices = 25,\r
-    SpvExecutionModeOutputPoints = 26,\r
-    SpvExecutionModeOutputLineStrip = 27,\r
-    SpvExecutionModeOutputTriangleStrip = 28,\r
-    SpvExecutionModeVecTypeHint = 29,\r
-    SpvExecutionModeContractionOff = 30,\r
-} SpvExecutionMode;\r
-\r
-typedef enum SpvStorageClass_ {\r
-    SpvStorageClassUniformConstant = 0,\r
-    SpvStorageClassInput = 1,\r
-    SpvStorageClassUniform = 2,\r
-    SpvStorageClassOutput = 3,\r
-    SpvStorageClassWorkgroupLocal = 4,\r
-    SpvStorageClassWorkgroupGlobal = 5,\r
-    SpvStorageClassPrivateGlobal = 6,\r
-    SpvStorageClassFunction = 7,\r
-    SpvStorageClassGeneric = 8,\r
-    SpvStorageClassPrivate = 9,\r
-    SpvStorageClassAtomicCounter = 10,\r
-} SpvStorageClass;\r
-\r
-typedef enum SpvDim_ {\r
-    SpvDim1D = 0,\r
-    SpvDim2D = 1,\r
-    SpvDim3D = 2,\r
-    SpvDimCube = 3,\r
-    SpvDimRect = 4,\r
-    SpvDimBuffer = 5,\r
-} SpvDim;\r
-\r
-typedef enum SpvSamplerAddressingMode_ {\r
-    SpvSamplerAddressingModeNone = 0,\r
-    SpvSamplerAddressingModeClampToEdge = 1,\r
-    SpvSamplerAddressingModeClamp = 2,\r
-    SpvSamplerAddressingModeRepeat = 3,\r
-    SpvSamplerAddressingModeRepeatMirrored = 4,\r
-} SpvSamplerAddressingMode;\r
-\r
-typedef enum SpvSamplerFilterMode_ {\r
-    SpvSamplerFilterModeNearest = 0,\r
-    SpvSamplerFilterModeLinear = 1,\r
-} SpvSamplerFilterMode;\r
-\r
-typedef enum SpvFPFastMathModeShift_ {\r
-    SpvFPFastMathModeNotNaNShift = 0,\r
-    SpvFPFastMathModeNotInfShift = 1,\r
-    SpvFPFastMathModeNSZShift = 2,\r
-    SpvFPFastMathModeAllowRecipShift = 3,\r
-    SpvFPFastMathModeFastShift = 4,\r
-} SpvFPFastMathModeShift;\r
-\r
-typedef enum SpvFPFastMathModeMask_ {\r
-    SpvFPFastMathModeMaskNone = 0,\r
-    SpvFPFastMathModeNotNaNMask = 0x00000001,\r
-    SpvFPFastMathModeNotInfMask = 0x00000002,\r
-    SpvFPFastMathModeNSZMask = 0x00000004,\r
-    SpvFPFastMathModeAllowRecipMask = 0x00000008,\r
-    SpvFPFastMathModeFastMask = 0x00000010,\r
-} SpvFPFastMathModeMask;\r
-\r
-typedef enum SpvFPRoundingMode_ {\r
-    SpvFPRoundingModeRTE = 0,\r
-    SpvFPRoundingModeRTZ = 1,\r
-    SpvFPRoundingModeRTP = 2,\r
-    SpvFPRoundingModeRTN = 3,\r
-} SpvFPRoundingMode;\r
-\r
-typedef enum SpvLinkageType_ {\r
-    SpvLinkageTypeExport = 0,\r
-    SpvLinkageTypeImport = 1,\r
-} SpvLinkageType;\r
-\r
-typedef enum SpvAccessQualifier_ {\r
-    SpvAccessQualifierReadOnly = 0,\r
-    SpvAccessQualifierWriteOnly = 1,\r
-    SpvAccessQualifierReadWrite = 2,\r
-} SpvAccessQualifier;\r
-\r
-typedef enum SpvFunctionParameterAttribute_ {\r
-    SpvFunctionParameterAttributeZext = 0,\r
-    SpvFunctionParameterAttributeSext = 1,\r
-    SpvFunctionParameterAttributeByVal = 2,\r
-    SpvFunctionParameterAttributeSret = 3,\r
-    SpvFunctionParameterAttributeNoAlias = 4,\r
-    SpvFunctionParameterAttributeNoCapture = 5,\r
-    SpvFunctionParameterAttributeSVM = 6,\r
-    SpvFunctionParameterAttributeNoWrite = 7,\r
-    SpvFunctionParameterAttributeNoReadWrite = 8,\r
-} SpvFunctionParameterAttribute;\r
-\r
-typedef enum SpvDecoration_ {\r
-    SpvDecorationPrecisionLow = 0,\r
-    SpvDecorationPrecisionMedium = 1,\r
-    SpvDecorationPrecisionHigh = 2,\r
-    SpvDecorationBlock = 3,\r
-    SpvDecorationBufferBlock = 4,\r
-    SpvDecorationRowMajor = 5,\r
-    SpvDecorationColMajor = 6,\r
-    SpvDecorationGLSLShared = 7,\r
-    SpvDecorationGLSLStd140 = 8,\r
-    SpvDecorationGLSLStd430 = 9,\r
-    SpvDecorationGLSLPacked = 10,\r
-    SpvDecorationSmooth = 11,\r
-    SpvDecorationNoperspective = 12,\r
-    SpvDecorationFlat = 13,\r
-    SpvDecorationPatch = 14,\r
-    SpvDecorationCentroid = 15,\r
-    SpvDecorationSample = 16,\r
-    SpvDecorationInvariant = 17,\r
-    SpvDecorationRestrict = 18,\r
-    SpvDecorationAliased = 19,\r
-    SpvDecorationVolatile = 20,\r
-    SpvDecorationConstant = 21,\r
-    SpvDecorationCoherent = 22,\r
-    SpvDecorationNonwritable = 23,\r
-    SpvDecorationNonreadable = 24,\r
-    SpvDecorationUniform = 25,\r
-    SpvDecorationNoStaticUse = 26,\r
-    SpvDecorationCPacked = 27,\r
-    SpvDecorationSaturatedConversion = 28,\r
-    SpvDecorationStream = 29,\r
-    SpvDecorationLocation = 30,\r
-    SpvDecorationComponent = 31,\r
-    SpvDecorationIndex = 32,\r
-    SpvDecorationBinding = 33,\r
-    SpvDecorationDescriptorSet = 34,\r
-    SpvDecorationOffset = 35,\r
-    SpvDecorationAlignment = 36,\r
-    SpvDecorationXfbBuffer = 37,\r
-    SpvDecorationStride = 38,\r
-    SpvDecorationBuiltIn = 39,\r
-    SpvDecorationFuncParamAttr = 40,\r
-    SpvDecorationFPRoundingMode = 41,\r
-    SpvDecorationFPFastMathMode = 42,\r
-    SpvDecorationLinkageAttributes = 43,\r
-    SpvDecorationSpecId = 44,\r
-} SpvDecoration;\r
-\r
-typedef enum SpvBuiltIn_ {\r
-    SpvBuiltInPosition = 0,\r
-    SpvBuiltInPointSize = 1,\r
-    SpvBuiltInClipVertex = 2,\r
-    SpvBuiltInClipDistance = 3,\r
-    SpvBuiltInCullDistance = 4,\r
-    SpvBuiltInVertexId = 5,\r
-    SpvBuiltInInstanceId = 6,\r
-    SpvBuiltInPrimitiveId = 7,\r
-    SpvBuiltInInvocationId = 8,\r
-    SpvBuiltInLayer = 9,\r
-    SpvBuiltInViewportIndex = 10,\r
-    SpvBuiltInTessLevelOuter = 11,\r
-    SpvBuiltInTessLevelInner = 12,\r
-    SpvBuiltInTessCoord = 13,\r
-    SpvBuiltInPatchVertices = 14,\r
-    SpvBuiltInFragCoord = 15,\r
-    SpvBuiltInPointCoord = 16,\r
-    SpvBuiltInFrontFacing = 17,\r
-    SpvBuiltInSampleId = 18,\r
-    SpvBuiltInSamplePosition = 19,\r
-    SpvBuiltInSampleMask = 20,\r
-    SpvBuiltInFragColor = 21,\r
-    SpvBuiltInFragDepth = 22,\r
-    SpvBuiltInHelperInvocation = 23,\r
-    SpvBuiltInNumWorkgroups = 24,\r
-    SpvBuiltInWorkgroupSize = 25,\r
-    SpvBuiltInWorkgroupId = 26,\r
-    SpvBuiltInLocalInvocationId = 27,\r
-    SpvBuiltInGlobalInvocationId = 28,\r
-    SpvBuiltInLocalInvocationIndex = 29,\r
-    SpvBuiltInWorkDim = 30,\r
-    SpvBuiltInGlobalSize = 31,\r
-    SpvBuiltInEnqueuedWorkgroupSize = 32,\r
-    SpvBuiltInGlobalOffset = 33,\r
-    SpvBuiltInGlobalLinearId = 34,\r
-    SpvBuiltInWorkgroupLinearId = 35,\r
-    SpvBuiltInSubgroupSize = 36,\r
-    SpvBuiltInSubgroupMaxSize = 37,\r
-    SpvBuiltInNumSubgroups = 38,\r
-    SpvBuiltInNumEnqueuedSubgroups = 39,\r
-    SpvBuiltInSubgroupId = 40,\r
-    SpvBuiltInSubgroupLocalInvocationId = 41,\r
-} SpvBuiltIn;\r
-\r
-typedef enum SpvSelectionControlShift_ {\r
-    SpvSelectionControlFlattenShift = 0,\r
-    SpvSelectionControlDontFlattenShift = 1,\r
-} SpvSelectionControlShift;\r
-\r
-typedef enum SpvSelectionControlMask_ {\r
-    SpvSelectionControlMaskNone = 0,\r
-    SpvSelectionControlFlattenMask = 0x00000001,\r
-    SpvSelectionControlDontFlattenMask = 0x00000002,\r
-} SpvSelectionControlMask;\r
-\r
-typedef enum SpvLoopControlShift_ {\r
-    SpvLoopControlUnrollShift = 0,\r
-    SpvLoopControlDontUnrollShift = 1,\r
-} SpvLoopControlShift;\r
-\r
-typedef enum SpvLoopControlMask_ {\r
-    SpvLoopControlMaskNone = 0,\r
-    SpvLoopControlUnrollMask = 0x00000001,\r
-    SpvLoopControlDontUnrollMask = 0x00000002,\r
-} SpvLoopControlMask;\r
-\r
-typedef enum SpvFunctionControlShift_ {\r
-    SpvFunctionControlInlineShift = 0,\r
-    SpvFunctionControlDontInlineShift = 1,\r
-    SpvFunctionControlPureShift = 2,\r
-    SpvFunctionControlConstShift = 3,\r
-} SpvFunctionControlShift;\r
-\r
-typedef enum SpvFunctionControlMask_ {\r
-    SpvFunctionControlMaskNone = 0,\r
-    SpvFunctionControlInlineMask = 0x00000001,\r
-    SpvFunctionControlDontInlineMask = 0x00000002,\r
-    SpvFunctionControlPureMask = 0x00000004,\r
-    SpvFunctionControlConstMask = 0x00000008,\r
-} SpvFunctionControlMask;\r
-\r
-typedef enum SpvMemorySemanticsShift_ {\r
-    SpvMemorySemanticsRelaxedShift = 0,\r
-    SpvMemorySemanticsSequentiallyConsistentShift = 1,\r
-    SpvMemorySemanticsAcquireShift = 2,\r
-    SpvMemorySemanticsReleaseShift = 3,\r
-    SpvMemorySemanticsUniformMemoryShift = 4,\r
-    SpvMemorySemanticsSubgroupMemoryShift = 5,\r
-    SpvMemorySemanticsWorkgroupLocalMemoryShift = 6,\r
-    SpvMemorySemanticsWorkgroupGlobalMemoryShift = 7,\r
-    SpvMemorySemanticsAtomicCounterMemoryShift = 8,\r
-    SpvMemorySemanticsImageMemoryShift = 9,\r
-} SpvMemorySemanticsShift;\r
-\r
-typedef enum SpvMemorySemanticsMask_ {\r
-    SpvMemorySemanticsMaskNone = 0,\r
-    SpvMemorySemanticsRelaxedMask = 0x00000001,\r
-    SpvMemorySemanticsSequentiallyConsistentMask = 0x00000002,\r
-    SpvMemorySemanticsAcquireMask = 0x00000004,\r
-    SpvMemorySemanticsReleaseMask = 0x00000008,\r
-    SpvMemorySemanticsUniformMemoryMask = 0x00000010,\r
-    SpvMemorySemanticsSubgroupMemoryMask = 0x00000020,\r
-    SpvMemorySemanticsWorkgroupLocalMemoryMask = 0x00000040,\r
-    SpvMemorySemanticsWorkgroupGlobalMemoryMask = 0x00000080,\r
-    SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000100,\r
-    SpvMemorySemanticsImageMemoryMask = 0x00000200,\r
-} SpvMemorySemanticsMask;\r
-\r
-typedef enum SpvMemoryAccessShift_ {\r
-    SpvMemoryAccessVolatileShift = 0,\r
-    SpvMemoryAccessAlignedShift = 1,\r
-} SpvMemoryAccessShift;\r
-\r
-typedef enum SpvMemoryAccessMask_ {\r
-    SpvMemoryAccessMaskNone = 0,\r
-    SpvMemoryAccessVolatileMask = 0x00000001,\r
-    SpvMemoryAccessAlignedMask = 0x00000002,\r
-} SpvMemoryAccessMask;\r
-\r
-typedef enum SpvExecutionScope_ {\r
-    SpvExecutionScopeCrossDevice = 0,\r
-    SpvExecutionScopeDevice = 1,\r
-    SpvExecutionScopeWorkgroup = 2,\r
-    SpvExecutionScopeSubgroup = 3,\r
-} SpvExecutionScope;\r
-\r
-typedef enum SpvGroupOperation_ {\r
-    SpvGroupOperationReduce = 0,\r
-    SpvGroupOperationInclusiveScan = 1,\r
-    SpvGroupOperationExclusiveScan = 2,\r
-} SpvGroupOperation;\r
-\r
-typedef enum SpvKernelEnqueueFlags_ {\r
-    SpvKernelEnqueueFlagsNoWait = 0,\r
-    SpvKernelEnqueueFlagsWaitKernel = 1,\r
-    SpvKernelEnqueueFlagsWaitWorkGroup = 2,\r
-} SpvKernelEnqueueFlags;\r
-\r
-typedef enum SpvKernelProfilingInfoShift_ {\r
-    SpvKernelProfilingInfoCmdExecTimeShift = 0,\r
-} SpvKernelProfilingInfoShift;\r
-\r
-typedef enum SpvKernelProfilingInfoMask_ {\r
-    SpvKernelProfilingInfoMaskNone = 0,\r
-    SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,\r
-} SpvKernelProfilingInfoMask;\r
-\r
-typedef enum SpvOp_ {\r
-    SpvOpNop = 0,\r
-    SpvOpSource = 1,\r
-    SpvOpSourceExtension = 2,\r
-    SpvOpExtension = 3,\r
-    SpvOpExtInstImport = 4,\r
-    SpvOpMemoryModel = 5,\r
-    SpvOpEntryPoint = 6,\r
-    SpvOpExecutionMode = 7,\r
-    SpvOpTypeVoid = 8,\r
-    SpvOpTypeBool = 9,\r
-    SpvOpTypeInt = 10,\r
-    SpvOpTypeFloat = 11,\r
-    SpvOpTypeVector = 12,\r
-    SpvOpTypeMatrix = 13,\r
-    SpvOpTypeSampler = 14,\r
-    SpvOpTypeFilter = 15,\r
-    SpvOpTypeArray = 16,\r
-    SpvOpTypeRuntimeArray = 17,\r
-    SpvOpTypeStruct = 18,\r
-    SpvOpTypeOpaque = 19,\r
-    SpvOpTypePointer = 20,\r
-    SpvOpTypeFunction = 21,\r
-    SpvOpTypeEvent = 22,\r
-    SpvOpTypeDeviceEvent = 23,\r
-    SpvOpTypeReserveId = 24,\r
-    SpvOpTypeQueue = 25,\r
-    SpvOpTypePipe = 26,\r
-    SpvOpConstantTrue = 27,\r
-    SpvOpConstantFalse = 28,\r
-    SpvOpConstant = 29,\r
-    SpvOpConstantComposite = 30,\r
-    SpvOpConstantSampler = 31,\r
-    SpvOpConstantNullPointer = 32,\r
-    SpvOpConstantNullObject = 33,\r
-    SpvOpSpecConstantTrue = 34,\r
-    SpvOpSpecConstantFalse = 35,\r
-    SpvOpSpecConstant = 36,\r
-    SpvOpSpecConstantComposite = 37,\r
-    SpvOpVariable = 38,\r
-    SpvOpVariableArray = 39,\r
-    SpvOpFunction = 40,\r
-    SpvOpFunctionParameter = 41,\r
-    SpvOpFunctionEnd = 42,\r
-    SpvOpFunctionCall = 43,\r
-    SpvOpExtInst = 44,\r
-    SpvOpUndef = 45,\r
-    SpvOpLoad = 46,\r
-    SpvOpStore = 47,\r
-    SpvOpPhi = 48,\r
-    SpvOpDecorationGroup = 49,\r
-    SpvOpDecorate = 50,\r
-    SpvOpMemberDecorate = 51,\r
-    SpvOpGroupDecorate = 52,\r
-    SpvOpGroupMemberDecorate = 53,\r
-    SpvOpName = 54,\r
-    SpvOpMemberName = 55,\r
-    SpvOpString = 56,\r
-    SpvOpLine = 57,\r
-    SpvOpVectorExtractDynamic = 58,\r
-    SpvOpVectorInsertDynamic = 59,\r
-    SpvOpVectorShuffle = 60,\r
-    SpvOpCompositeConstruct = 61,\r
-    SpvOpCompositeExtract = 62,\r
-    SpvOpCompositeInsert = 63,\r
-    SpvOpCopyObject = 64,\r
-    SpvOpCopyMemory = 65,\r
-    SpvOpCopyMemorySized = 66,\r
-    SpvOpSampler = 67,\r
-    SpvOpTextureSample = 68,\r
-    SpvOpTextureSampleDref = 69,\r
-    SpvOpTextureSampleLod = 70,\r
-    SpvOpTextureSampleProj = 71,\r
-    SpvOpTextureSampleGrad = 72,\r
-    SpvOpTextureSampleOffset = 73,\r
-    SpvOpTextureSampleProjLod = 74,\r
-    SpvOpTextureSampleProjGrad = 75,\r
-    SpvOpTextureSampleLodOffset = 76,\r
-    SpvOpTextureSampleProjOffset = 77,\r
-    SpvOpTextureSampleGradOffset = 78,\r
-    SpvOpTextureSampleProjLodOffset = 79,\r
-    SpvOpTextureSampleProjGradOffset = 80,\r
-    SpvOpTextureFetchTexelLod = 81,\r
-    SpvOpTextureFetchTexelOffset = 82,\r
-    SpvOpTextureFetchSample = 83,\r
-    SpvOpTextureFetchTexel = 84,\r
-    SpvOpTextureGather = 85,\r
-    SpvOpTextureGatherOffset = 86,\r
-    SpvOpTextureGatherOffsets = 87,\r
-    SpvOpTextureQuerySizeLod = 88,\r
-    SpvOpTextureQuerySize = 89,\r
-    SpvOpTextureQueryLod = 90,\r
-    SpvOpTextureQueryLevels = 91,\r
-    SpvOpTextureQuerySamples = 92,\r
-    SpvOpAccessChain = 93,\r
-    SpvOpInBoundsAccessChain = 94,\r
-    SpvOpSNegate = 95,\r
-    SpvOpFNegate = 96,\r
-    SpvOpNot = 97,\r
-    SpvOpAny = 98,\r
-    SpvOpAll = 99,\r
-    SpvOpConvertFToU = 100,\r
-    SpvOpConvertFToS = 101,\r
-    SpvOpConvertSToF = 102,\r
-    SpvOpConvertUToF = 103,\r
-    SpvOpUConvert = 104,\r
-    SpvOpSConvert = 105,\r
-    SpvOpFConvert = 106,\r
-    SpvOpConvertPtrToU = 107,\r
-    SpvOpConvertUToPtr = 108,\r
-    SpvOpPtrCastToGeneric = 109,\r
-    SpvOpGenericCastToPtr = 110,\r
-    SpvOpBitcast = 111,\r
-    SpvOpTranspose = 112,\r
-    SpvOpIsNan = 113,\r
-    SpvOpIsInf = 114,\r
-    SpvOpIsFinite = 115,\r
-    SpvOpIsNormal = 116,\r
-    SpvOpSignBitSet = 117,\r
-    SpvOpLessOrGreater = 118,\r
-    SpvOpOrdered = 119,\r
-    SpvOpUnordered = 120,\r
-    SpvOpArrayLength = 121,\r
-    SpvOpIAdd = 122,\r
-    SpvOpFAdd = 123,\r
-    SpvOpISub = 124,\r
-    SpvOpFSub = 125,\r
-    SpvOpIMul = 126,\r
-    SpvOpFMul = 127,\r
-    SpvOpUDiv = 128,\r
-    SpvOpSDiv = 129,\r
-    SpvOpFDiv = 130,\r
-    SpvOpUMod = 131,\r
-    SpvOpSRem = 132,\r
-    SpvOpSMod = 133,\r
-    SpvOpFRem = 134,\r
-    SpvOpFMod = 135,\r
-    SpvOpVectorTimesScalar = 136,\r
-    SpvOpMatrixTimesScalar = 137,\r
-    SpvOpVectorTimesMatrix = 138,\r
-    SpvOpMatrixTimesVector = 139,\r
-    SpvOpMatrixTimesMatrix = 140,\r
-    SpvOpOuterProduct = 141,\r
-    SpvOpDot = 142,\r
-    SpvOpShiftRightLogical = 143,\r
-    SpvOpShiftRightArithmetic = 144,\r
-    SpvOpShiftLeftLogical = 145,\r
-    SpvOpLogicalOr = 146,\r
-    SpvOpLogicalXor = 147,\r
-    SpvOpLogicalAnd = 148,\r
-    SpvOpBitwiseOr = 149,\r
-    SpvOpBitwiseXor = 150,\r
-    SpvOpBitwiseAnd = 151,\r
-    SpvOpSelect = 152,\r
-    SpvOpIEqual = 153,\r
-    SpvOpFOrdEqual = 154,\r
-    SpvOpFUnordEqual = 155,\r
-    SpvOpINotEqual = 156,\r
-    SpvOpFOrdNotEqual = 157,\r
-    SpvOpFUnordNotEqual = 158,\r
-    SpvOpULessThan = 159,\r
-    SpvOpSLessThan = 160,\r
-    SpvOpFOrdLessThan = 161,\r
-    SpvOpFUnordLessThan = 162,\r
-    SpvOpUGreaterThan = 163,\r
-    SpvOpSGreaterThan = 164,\r
-    SpvOpFOrdGreaterThan = 165,\r
-    SpvOpFUnordGreaterThan = 166,\r
-    SpvOpULessThanEqual = 167,\r
-    SpvOpSLessThanEqual = 168,\r
-    SpvOpFOrdLessThanEqual = 169,\r
-    SpvOpFUnordLessThanEqual = 170,\r
-    SpvOpUGreaterThanEqual = 171,\r
-    SpvOpSGreaterThanEqual = 172,\r
-    SpvOpFOrdGreaterThanEqual = 173,\r
-    SpvOpFUnordGreaterThanEqual = 174,\r
-    SpvOpDPdx = 175,\r
-    SpvOpDPdy = 176,\r
-    SpvOpFwidth = 177,\r
-    SpvOpDPdxFine = 178,\r
-    SpvOpDPdyFine = 179,\r
-    SpvOpFwidthFine = 180,\r
-    SpvOpDPdxCoarse = 181,\r
-    SpvOpDPdyCoarse = 182,\r
-    SpvOpFwidthCoarse = 183,\r
-    SpvOpEmitVertex = 184,\r
-    SpvOpEndPrimitive = 185,\r
-    SpvOpEmitStreamVertex = 186,\r
-    SpvOpEndStreamPrimitive = 187,\r
-    SpvOpControlBarrier = 188,\r
-    SpvOpMemoryBarrier = 189,\r
-    SpvOpImagePointer = 190,\r
-    SpvOpAtomicInit = 191,\r
-    SpvOpAtomicLoad = 192,\r
-    SpvOpAtomicStore = 193,\r
-    SpvOpAtomicExchange = 194,\r
-    SpvOpAtomicCompareExchange = 195,\r
-    SpvOpAtomicCompareExchangeWeak = 196,\r
-    SpvOpAtomicIIncrement = 197,\r
-    SpvOpAtomicIDecrement = 198,\r
-    SpvOpAtomicIAdd = 199,\r
-    SpvOpAtomicISub = 200,\r
-    SpvOpAtomicUMin = 201,\r
-    SpvOpAtomicUMax = 202,\r
-    SpvOpAtomicAnd = 203,\r
-    SpvOpAtomicOr = 204,\r
-    SpvOpAtomicXor = 205,\r
-    SpvOpLoopMerge = 206,\r
-    SpvOpSelectionMerge = 207,\r
-    SpvOpLabel = 208,\r
-    SpvOpBranch = 209,\r
-    SpvOpBranchConditional = 210,\r
-    SpvOpSwitch = 211,\r
-    SpvOpKill = 212,\r
-    SpvOpReturn = 213,\r
-    SpvOpReturnValue = 214,\r
-    SpvOpUnreachable = 215,\r
-    SpvOpLifetimeStart = 216,\r
-    SpvOpLifetimeStop = 217,\r
-    SpvOpCompileFlag = 218,\r
-    SpvOpAsyncGroupCopy = 219,\r
-    SpvOpWaitGroupEvents = 220,\r
-    SpvOpGroupAll = 221,\r
-    SpvOpGroupAny = 222,\r
-    SpvOpGroupBroadcast = 223,\r
-    SpvOpGroupIAdd = 224,\r
-    SpvOpGroupFAdd = 225,\r
-    SpvOpGroupFMin = 226,\r
-    SpvOpGroupUMin = 227,\r
-    SpvOpGroupSMin = 228,\r
-    SpvOpGroupFMax = 229,\r
-    SpvOpGroupUMax = 230,\r
-    SpvOpGroupSMax = 231,\r
-    SpvOpGenericCastToPtrExplicit = 232,\r
-    SpvOpGenericPtrMemSemantics = 233,\r
-    SpvOpReadPipe = 234,\r
-    SpvOpWritePipe = 235,\r
-    SpvOpReservedReadPipe = 236,\r
-    SpvOpReservedWritePipe = 237,\r
-    SpvOpReserveReadPipePackets = 238,\r
-    SpvOpReserveWritePipePackets = 239,\r
-    SpvOpCommitReadPipe = 240,\r
-    SpvOpCommitWritePipe = 241,\r
-    SpvOpIsValidReserveId = 242,\r
-    SpvOpGetNumPipePackets = 243,\r
-    SpvOpGetMaxPipePackets = 244,\r
-    SpvOpGroupReserveReadPipePackets = 245,\r
-    SpvOpGroupReserveWritePipePackets = 246,\r
-    SpvOpGroupCommitReadPipe = 247,\r
-    SpvOpGroupCommitWritePipe = 248,\r
-    SpvOpEnqueueMarker = 249,\r
-    SpvOpEnqueueKernel = 250,\r
-    SpvOpGetKernelNDrangeSubGroupCount = 251,\r
-    SpvOpGetKernelNDrangeMaxSubGroupSize = 252,\r
-    SpvOpGetKernelWorkGroupSize = 253,\r
-    SpvOpGetKernelPreferredWorkGroupSizeMultiple = 254,\r
-    SpvOpRetainEvent = 255,\r
-    SpvOpReleaseEvent = 256,\r
-    SpvOpCreateUserEvent = 257,\r
-    SpvOpIsValidEvent = 258,\r
-    SpvOpSetUserEventStatus = 259,\r
-    SpvOpCaptureEventProfilingInfo = 260,\r
-    SpvOpGetDefaultQueue = 261,\r
-    SpvOpBuildNDRange = 262,\r
-    SpvOpSatConvertSToU = 263,\r
-    SpvOpSatConvertUToS = 264,\r
-    SpvOpAtomicIMin = 265,\r
-    SpvOpAtomicIMax = 266,\r
-} SpvOp;\r
-\r
-#endif  // #ifndef __cplusplus\r
-\r
-#endif  // #ifndef spirv_H\r
diff --git a/layers/spirv/spirv.hpp b/layers/spirv/spirv.hpp
new file mode 100644 (file)
index 0000000..b04748b
--- /dev/null
@@ -0,0 +1,818 @@
+// Copyright (c) 2014-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.
+// 
+// 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.
+
+// Specification revision 31.
+// 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
+
+namespace spv {
+
+typedef unsigned int Id;
+
+static const unsigned int MagicNumber = 0x07230203;
+static const unsigned int Version = 99;
+static const unsigned int Revision = 31;
+static const unsigned int OpCodeMask = 0xffff;
+static const unsigned int WordCountShift = 16;
+
+enum SourceLanguage {
+    SourceLanguageUnknown = 0,
+    SourceLanguageESSL = 1,
+    SourceLanguageGLSL = 2,
+    SourceLanguageOpenCL = 3,
+};
+
+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,
+    ExecutionModeDepthAny = 13,
+    ExecutionModeDepthGreater = 14,
+    ExecutionModeDepthLess = 15,
+    ExecutionModeDepthUnchanged = 16,
+    ExecutionModeLocalSize = 17,
+    ExecutionModeLocalSizeHint = 18,
+    ExecutionModeInputPoints = 19,
+    ExecutionModeInputLines = 20,
+    ExecutionModeInputLinesAdjacency = 21,
+    ExecutionModeInputTriangles = 22,
+    ExecutionModeInputTrianglesAdjacency = 23,
+    ExecutionModeInputQuads = 24,
+    ExecutionModeInputIsolines = 25,
+    ExecutionModeOutputVertices = 26,
+    ExecutionModeOutputPoints = 27,
+    ExecutionModeOutputLineStrip = 28,
+    ExecutionModeOutputTriangleStrip = 29,
+    ExecutionModeVecTypeHint = 30,
+    ExecutionModeContractionOff = 31,
+};
+
+enum StorageClass {
+    StorageClassUniformConstant = 0,
+    StorageClassInput = 1,
+    StorageClassUniform = 2,
+    StorageClassOutput = 3,
+    StorageClassWorkgroupLocal = 4,
+    StorageClassWorkgroupGlobal = 5,
+    StorageClassPrivateGlobal = 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,
+};
+
+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,
+};
+
+enum ImageOperandsShift {
+    ImageOperandsBiasShift = 0,
+    ImageOperandsLodShift = 1,
+    ImageOperandsGradShift = 2,
+    ImageOperandsOffsetShift = 3,
+    ImageOperandsOffsetsShift = 4,
+    ImageOperandsSampleShift = 5,
+};
+
+enum ImageOperandsMask {
+    ImageOperandsMaskNone = 0,
+    ImageOperandsBiasMask = 0x00000001,
+    ImageOperandsLodMask = 0x00000002,
+    ImageOperandsGradMask = 0x00000004,
+    ImageOperandsOffsetMask = 0x00000008,
+    ImageOperandsOffsetsMask = 0x00000010,
+    ImageOperandsSampleMask = 0x00000020,
+};
+
+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,
+    FunctionParameterAttributeSVM = 6,
+    FunctionParameterAttributeNoWrite = 7,
+    FunctionParameterAttributeNoReadWrite = 8,
+};
+
+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,
+    DecorationSmooth = 12,
+    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,
+    DecorationNoStaticUse = 27,
+    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,
+};
+
+enum BuiltIn {
+    BuiltInPosition = 0,
+    BuiltInPointSize = 1,
+    BuiltInClipVertex = 2,
+    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,
+    BuiltInFragColor = 21,
+    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,
+    BuiltInWorkgroupLinearId = 35,
+    BuiltInSubgroupSize = 36,
+    BuiltInSubgroupMaxSize = 37,
+    BuiltInNumSubgroups = 38,
+    BuiltInNumEnqueuedSubgroups = 39,
+    BuiltInSubgroupId = 40,
+    BuiltInSubgroupLocalInvocationId = 41,
+};
+
+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 {
+    MemorySemanticsRelaxedShift = 0,
+    MemorySemanticsSequentiallyConsistentShift = 1,
+    MemorySemanticsAcquireShift = 2,
+    MemorySemanticsReleaseShift = 3,
+    MemorySemanticsUniformMemoryShift = 4,
+    MemorySemanticsSubgroupMemoryShift = 5,
+    MemorySemanticsWorkgroupLocalMemoryShift = 6,
+    MemorySemanticsWorkgroupGlobalMemoryShift = 7,
+    MemorySemanticsAtomicCounterMemoryShift = 8,
+    MemorySemanticsImageMemoryShift = 9,
+};
+
+enum MemorySemanticsMask {
+    MemorySemanticsMaskNone = 0,
+    MemorySemanticsRelaxedMask = 0x00000001,
+    MemorySemanticsSequentiallyConsistentMask = 0x00000002,
+    MemorySemanticsAcquireMask = 0x00000004,
+    MemorySemanticsReleaseMask = 0x00000008,
+    MemorySemanticsUniformMemoryMask = 0x00000010,
+    MemorySemanticsSubgroupMemoryMask = 0x00000020,
+    MemorySemanticsWorkgroupLocalMemoryMask = 0x00000040,
+    MemorySemanticsWorkgroupGlobalMemoryMask = 0x00000080,
+    MemorySemanticsAtomicCounterMemoryMask = 0x00000100,
+    MemorySemanticsImageMemoryMask = 0x00000200,
+};
+
+enum MemoryAccessShift {
+    MemoryAccessVolatileShift = 0,
+    MemoryAccessAlignedShift = 1,
+};
+
+enum MemoryAccessMask {
+    MemoryAccessMaskNone = 0,
+    MemoryAccessVolatileMask = 0x00000001,
+    MemoryAccessAlignedMask = 0x00000002,
+};
+
+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,
+    CapabilityImageSRGBWrite = 16,
+    CapabilityPipes = 17,
+    CapabilityGroups = 18,
+    CapabilityDeviceEnqueue = 19,
+    CapabilityLiteralSampler = 20,
+    CapabilityAtomicStorage = 21,
+    CapabilityInt16 = 22,
+};
+
+enum Op {
+    OpNop = 0,
+    OpUndef = 1,
+    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,
+    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,
+    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,
+    OpImageQueryDim = 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,
+    OpIMulExtended = 151,
+    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,
+    OpAtomicIMin = 236,
+    OpAtomicUMin = 237,
+    OpAtomicIMax = 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,
+    OpAsyncGroupCopy = 259,
+    OpWaitGroupEvents = 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,
+};
+
+// 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_H
+