Browse Source

SPIRV-Cross: remove C API files

The spirv header for those is outdated and can cause warnings because its contents don't match the other spirv header files in SPIRV-Cross and glslang
Sasha Szpakowski 1 year ago
parent
commit
8e361aefbf

+ 0 - 14
platform/xcode/liblove.xcodeproj/project.pbxproj

@@ -679,8 +679,6 @@
 		FA18CF2B23DCF67900263725 /* spirv_cross_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0423DCF67800263725 /* spirv_cross_util.cpp */; };
 		FA18CF2C23DCF67900263725 /* spirv_cross.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0523DCF67800263725 /* spirv_cross.cpp */; };
 		FA18CF2D23DCF67900263725 /* spirv_cross.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0523DCF67800263725 /* spirv_cross.cpp */; };
-		FA18CF2E23DCF67900263725 /* spirv_cross_c.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0623DCF67800263725 /* spirv_cross_c.cpp */; };
-		FA18CF2F23DCF67900263725 /* spirv_cross_c.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0623DCF67800263725 /* spirv_cross_c.cpp */; };
 		FA18CF3023DCF67900263725 /* spirv_hlsl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0723DCF67800263725 /* spirv_hlsl.cpp */; };
 		FA18CF3123DCF67900263725 /* spirv_hlsl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0723DCF67800263725 /* spirv_hlsl.cpp */; };
 		FA18CF3223DCF67900263725 /* spirv_cfg.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA18CF0823DCF67800263725 /* spirv_cfg.hpp */; };
@@ -688,8 +686,6 @@
 		FA18CF3423DCF67900263725 /* spirv_cpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0923DCF67800263725 /* spirv_cpp.cpp */; };
 		FA18CF3523DCF67900263725 /* spirv_cross_parsed_ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0A23DCF67800263725 /* spirv_cross_parsed_ir.cpp */; };
 		FA18CF3623DCF67900263725 /* spirv_cross_parsed_ir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA18CF0A23DCF67800263725 /* spirv_cross_parsed_ir.cpp */; };
-		FA18CF3723DCF67900263725 /* spirv.h in Headers */ = {isa = PBXBuildFile; fileRef = FA18CF0B23DCF67800263725 /* spirv.h */; };
-		FA18CF3823DCF67900263725 /* spirv_cross_c.h in Headers */ = {isa = PBXBuildFile; fileRef = FA18CF0C23DCF67800263725 /* spirv_cross_c.h */; };
 		FA18CF3923DCF67900263725 /* spirv_msl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA18CF0D23DCF67800263725 /* spirv_msl.hpp */; };
 		FA18CF3A23DCF67900263725 /* spirv_reflect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA18CF0E23DCF67800263725 /* spirv_reflect.hpp */; };
 		FA18CF3B23DCF67900263725 /* spirv_cross_util.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA18CF0F23DCF67800263725 /* spirv_cross_util.hpp */; };
@@ -1839,13 +1835,10 @@
 		FA18CF0323DCF67800263725 /* spirv_msl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_msl.cpp; sourceTree = "<group>"; };
 		FA18CF0423DCF67800263725 /* spirv_cross_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross_util.cpp; sourceTree = "<group>"; };
 		FA18CF0523DCF67800263725 /* spirv_cross.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross.cpp; sourceTree = "<group>"; };
-		FA18CF0623DCF67800263725 /* spirv_cross_c.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross_c.cpp; sourceTree = "<group>"; };
 		FA18CF0723DCF67800263725 /* spirv_hlsl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_hlsl.cpp; sourceTree = "<group>"; };
 		FA18CF0823DCF67800263725 /* spirv_cfg.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_cfg.hpp; sourceTree = "<group>"; };
 		FA18CF0923DCF67800263725 /* spirv_cpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cpp.cpp; sourceTree = "<group>"; };
 		FA18CF0A23DCF67800263725 /* spirv_cross_parsed_ir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spirv_cross_parsed_ir.cpp; sourceTree = "<group>"; };
-		FA18CF0B23DCF67800263725 /* spirv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv.h; sourceTree = "<group>"; };
-		FA18CF0C23DCF67800263725 /* spirv_cross_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spirv_cross_c.h; sourceTree = "<group>"; };
 		FA18CF0D23DCF67800263725 /* spirv_msl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_msl.hpp; sourceTree = "<group>"; };
 		FA18CF0E23DCF67800263725 /* spirv_reflect.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_reflect.hpp; sourceTree = "<group>"; };
 		FA18CF0F23DCF67800263725 /* spirv_cross_util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = spirv_cross_util.hpp; sourceTree = "<group>"; };
@@ -3458,8 +3451,6 @@
 				FA18CF1423DCF67800263725 /* spirv_common.hpp */,
 				FA18CF0923DCF67800263725 /* spirv_cpp.cpp */,
 				FA18CF0023DCF67800263725 /* spirv_cpp.hpp */,
-				FA18CF0623DCF67800263725 /* spirv_cross_c.cpp */,
-				FA18CF0C23DCF67800263725 /* spirv_cross_c.h */,
 				FA18CF1223DCF67800263725 /* spirv_cross_containers.hpp */,
 				FA18CEF423DCF67800263725 /* spirv_cross_error_handling.hpp */,
 				FA18CF0A23DCF67800263725 /* spirv_cross_parsed_ir.cpp */,
@@ -3478,7 +3469,6 @@
 				FA18CEF223DCF67800263725 /* spirv_parser.hpp */,
 				FA18CF0223DCF67800263725 /* spirv_reflect.cpp */,
 				FA18CF0E23DCF67800263725 /* spirv_reflect.hpp */,
-				FA18CF0B23DCF67800263725 /* spirv.h */,
 				FA18CEFE23DCF67800263725 /* spirv.hpp */,
 			);
 			path = spirv_cross;
@@ -4155,7 +4145,6 @@
 				FAF140AB1E20934C00F898D2 /* SymbolTable.h in Headers */,
 				FA18CF1E23DCF67900263725 /* external_interface.h in Headers */,
 				FA0B7ED71A95902D000E1D17 /* Timer.h in Headers */,
-				FA18CF3723DCF67900263725 /* spirv.h in Headers */,
 				FA0B7AC31A958EA3000E1D17 /* list.h in Headers */,
 				FA0B7B2D1A958EA3000E1D17 /* core.h in Headers */,
 				FA1E88841DF363DB00E808AA /* Filter.h in Headers */,
@@ -4399,7 +4388,6 @@
 				FA18CF2023DCF67900263725 /* spirv_hlsl.hpp in Headers */,
 				FA0B7D271A95902C000E1D17 /* wrap_Font.h in Headers */,
 				FA0B7DAA1A95902C000E1D17 /* PVRHandler.h in Headers */,
-				FA18CF3823DCF67900263725 /* spirv_cross_c.h in Headers */,
 				FA27B3B51B498151008A9DCE /* wrap_Video.h in Headers */,
 				FABDA9BC2552448300B5C523 /* b2_fixture.h in Headers */,
 				FA0B7D7B1A95902C000E1D17 /* Quad.h in Headers */,
@@ -5015,7 +5003,6 @@
 				FACA02F81F5E39760084B28F /* CompressedData.cpp in Sources */,
 				FA0B7ADA1A958EA3000E1D17 /* glad.cpp in Sources */,
 				FAF140541E20934C00F898D2 /* CodeGen.cpp in Sources */,
-				FA18CF2F23DCF67900263725 /* spirv_cross_c.cpp in Sources */,
 				FA0B7E1F1A95902C000E1D17 /* Physics.cpp in Sources */,
 				FA6A2B7B1F60B8250074C308 /* wrap_ByteData.cpp in Sources */,
 				FA0B7E821A95902C000E1D17 /* Shape.cpp in Sources */,
@@ -5302,7 +5289,6 @@
 				FA0B7E301A95902C000E1D17 /* Shape.cpp in Sources */,
 				FA93C4541F315B960087CCD4 /* FormatHandler.cpp in Sources */,
 				FA0B7E481A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */,
-				FA18CF2E23DCF67900263725 /* spirv_cross_c.cpp in Sources */,
 				FABDA9A72552448300B5C523 /* b2_motor_joint.cpp in Sources */,
 				FA0B792F1A958E3B000E1D17 /* Module.cpp in Sources */,
 				FA0B7E2A1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */,

+ 0 - 2568
src/libraries/spirv_cross/spirv.h

@@ -1,2568 +0,0 @@
-/*
-** Copyright (c) 2014-2020 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#, D, Beef
-** 
-** - 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']
-** - C# will use enum classes in the Specification class located in the "Spv" namespace,
-**     e.g.: Spv.Specification.SourceLanguage.GLSL
-** - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
-** - Beef will use enum classes in the Specification class located in the "Spv" namespace,
-**     e.g.: Spv.Specification.SourceLanguage.GLSL
-** 
-** Some tokens act like mask values, which can be OR'd together,
-** while others are mutually exclusive.  The mask-like ones have
-** "Mask" in their name, and a parallel enum that has the shift
-** amount (1 << x) for each corresponding enumerant.
-*/
-
-#ifndef spirv_H
-#define spirv_H
-
-typedef unsigned int SpvId;
-
-#define SPV_VERSION 0x10600
-#define SPV_REVISION 1
-
-static const unsigned int SpvMagicNumber = 0x07230203;
-static const unsigned int SpvVersion = 0x00010600;
-static const unsigned int SpvRevision = 1;
-static const unsigned int SpvOpCodeMask = 0xffff;
-static const unsigned int SpvWordCountShift = 16;
-
-typedef enum SpvSourceLanguage_ {
-    SpvSourceLanguageUnknown = 0,
-    SpvSourceLanguageESSL = 1,
-    SpvSourceLanguageGLSL = 2,
-    SpvSourceLanguageOpenCL_C = 3,
-    SpvSourceLanguageOpenCL_CPP = 4,
-    SpvSourceLanguageHLSL = 5,
-    SpvSourceLanguageCPP_for_OpenCL = 6,
-    SpvSourceLanguageSYCL = 7,
-    SpvSourceLanguageMax = 0x7fffffff,
-} SpvSourceLanguage;
-
-typedef enum SpvExecutionModel_ {
-    SpvExecutionModelVertex = 0,
-    SpvExecutionModelTessellationControl = 1,
-    SpvExecutionModelTessellationEvaluation = 2,
-    SpvExecutionModelGeometry = 3,
-    SpvExecutionModelFragment = 4,
-    SpvExecutionModelGLCompute = 5,
-    SpvExecutionModelKernel = 6,
-    SpvExecutionModelTaskNV = 5267,
-    SpvExecutionModelMeshNV = 5268,
-    SpvExecutionModelRayGenerationKHR = 5313,
-    SpvExecutionModelRayGenerationNV = 5313,
-    SpvExecutionModelIntersectionKHR = 5314,
-    SpvExecutionModelIntersectionNV = 5314,
-    SpvExecutionModelAnyHitKHR = 5315,
-    SpvExecutionModelAnyHitNV = 5315,
-    SpvExecutionModelClosestHitKHR = 5316,
-    SpvExecutionModelClosestHitNV = 5316,
-    SpvExecutionModelMissKHR = 5317,
-    SpvExecutionModelMissNV = 5317,
-    SpvExecutionModelCallableKHR = 5318,
-    SpvExecutionModelCallableNV = 5318,
-    SpvExecutionModelTaskEXT = 5364,
-    SpvExecutionModelMeshEXT = 5365,
-    SpvExecutionModelMax = 0x7fffffff,
-} SpvExecutionModel;
-
-typedef enum SpvAddressingModel_ {
-    SpvAddressingModelLogical = 0,
-    SpvAddressingModelPhysical32 = 1,
-    SpvAddressingModelPhysical64 = 2,
-    SpvAddressingModelPhysicalStorageBuffer64 = 5348,
-    SpvAddressingModelPhysicalStorageBuffer64EXT = 5348,
-    SpvAddressingModelMax = 0x7fffffff,
-} SpvAddressingModel;
-
-typedef enum SpvMemoryModel_ {
-    SpvMemoryModelSimple = 0,
-    SpvMemoryModelGLSL450 = 1,
-    SpvMemoryModelOpenCL = 2,
-    SpvMemoryModelVulkan = 3,
-    SpvMemoryModelVulkanKHR = 3,
-    SpvMemoryModelMax = 0x7fffffff,
-} SpvMemoryModel;
-
-typedef enum SpvExecutionMode_ {
-    SpvExecutionModeInvocations = 0,
-    SpvExecutionModeSpacingEqual = 1,
-    SpvExecutionModeSpacingFractionalEven = 2,
-    SpvExecutionModeSpacingFractionalOdd = 3,
-    SpvExecutionModeVertexOrderCw = 4,
-    SpvExecutionModeVertexOrderCcw = 5,
-    SpvExecutionModePixelCenterInteger = 6,
-    SpvExecutionModeOriginUpperLeft = 7,
-    SpvExecutionModeOriginLowerLeft = 8,
-    SpvExecutionModeEarlyFragmentTests = 9,
-    SpvExecutionModePointMode = 10,
-    SpvExecutionModeXfb = 11,
-    SpvExecutionModeDepthReplacing = 12,
-    SpvExecutionModeDepthGreater = 14,
-    SpvExecutionModeDepthLess = 15,
-    SpvExecutionModeDepthUnchanged = 16,
-    SpvExecutionModeLocalSize = 17,
-    SpvExecutionModeLocalSizeHint = 18,
-    SpvExecutionModeInputPoints = 19,
-    SpvExecutionModeInputLines = 20,
-    SpvExecutionModeInputLinesAdjacency = 21,
-    SpvExecutionModeTriangles = 22,
-    SpvExecutionModeInputTrianglesAdjacency = 23,
-    SpvExecutionModeQuads = 24,
-    SpvExecutionModeIsolines = 25,
-    SpvExecutionModeOutputVertices = 26,
-    SpvExecutionModeOutputPoints = 27,
-    SpvExecutionModeOutputLineStrip = 28,
-    SpvExecutionModeOutputTriangleStrip = 29,
-    SpvExecutionModeVecTypeHint = 30,
-    SpvExecutionModeContractionOff = 31,
-    SpvExecutionModeInitializer = 33,
-    SpvExecutionModeFinalizer = 34,
-    SpvExecutionModeSubgroupSize = 35,
-    SpvExecutionModeSubgroupsPerWorkgroup = 36,
-    SpvExecutionModeSubgroupsPerWorkgroupId = 37,
-    SpvExecutionModeLocalSizeId = 38,
-    SpvExecutionModeLocalSizeHintId = 39,
-    SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
-    SpvExecutionModePostDepthCoverage = 4446,
-    SpvExecutionModeDenormPreserve = 4459,
-    SpvExecutionModeDenormFlushToZero = 4460,
-    SpvExecutionModeSignedZeroInfNanPreserve = 4461,
-    SpvExecutionModeRoundingModeRTE = 4462,
-    SpvExecutionModeRoundingModeRTZ = 4463,
-    SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
-    SpvExecutionModeStencilRefReplacingEXT = 5027,
-    SpvExecutionModeStencilRefUnchangedFrontAMD = 5079,
-    SpvExecutionModeStencilRefGreaterFrontAMD = 5080,
-    SpvExecutionModeStencilRefLessFrontAMD = 5081,
-    SpvExecutionModeStencilRefUnchangedBackAMD = 5082,
-    SpvExecutionModeStencilRefGreaterBackAMD = 5083,
-    SpvExecutionModeStencilRefLessBackAMD = 5084,
-    SpvExecutionModeOutputLinesEXT = 5269,
-    SpvExecutionModeOutputLinesNV = 5269,
-    SpvExecutionModeOutputPrimitivesEXT = 5270,
-    SpvExecutionModeOutputPrimitivesNV = 5270,
-    SpvExecutionModeDerivativeGroupQuadsNV = 5289,
-    SpvExecutionModeDerivativeGroupLinearNV = 5290,
-    SpvExecutionModeOutputTrianglesEXT = 5298,
-    SpvExecutionModeOutputTrianglesNV = 5298,
-    SpvExecutionModePixelInterlockOrderedEXT = 5366,
-    SpvExecutionModePixelInterlockUnorderedEXT = 5367,
-    SpvExecutionModeSampleInterlockOrderedEXT = 5368,
-    SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
-    SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
-    SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
-    SpvExecutionModeSharedLocalMemorySizeINTEL = 5618,
-    SpvExecutionModeRoundingModeRTPINTEL = 5620,
-    SpvExecutionModeRoundingModeRTNINTEL = 5621,
-    SpvExecutionModeFloatingPointModeALTINTEL = 5622,
-    SpvExecutionModeFloatingPointModeIEEEINTEL = 5623,
-    SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
-    SpvExecutionModeMaxWorkDimINTEL = 5894,
-    SpvExecutionModeNoGlobalOffsetINTEL = 5895,
-    SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
-    SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
-    SpvExecutionModeNamedBarrierCountINTEL = 6417,
-    SpvExecutionModeMax = 0x7fffffff,
-} SpvExecutionMode;
-
-typedef enum SpvStorageClass_ {
-    SpvStorageClassUniformConstant = 0,
-    SpvStorageClassInput = 1,
-    SpvStorageClassUniform = 2,
-    SpvStorageClassOutput = 3,
-    SpvStorageClassWorkgroup = 4,
-    SpvStorageClassCrossWorkgroup = 5,
-    SpvStorageClassPrivate = 6,
-    SpvStorageClassFunction = 7,
-    SpvStorageClassGeneric = 8,
-    SpvStorageClassPushConstant = 9,
-    SpvStorageClassAtomicCounter = 10,
-    SpvStorageClassImage = 11,
-    SpvStorageClassStorageBuffer = 12,
-    SpvStorageClassCallableDataKHR = 5328,
-    SpvStorageClassCallableDataNV = 5328,
-    SpvStorageClassIncomingCallableDataKHR = 5329,
-    SpvStorageClassIncomingCallableDataNV = 5329,
-    SpvStorageClassRayPayloadKHR = 5338,
-    SpvStorageClassRayPayloadNV = 5338,
-    SpvStorageClassHitAttributeKHR = 5339,
-    SpvStorageClassHitAttributeNV = 5339,
-    SpvStorageClassIncomingRayPayloadKHR = 5342,
-    SpvStorageClassIncomingRayPayloadNV = 5342,
-    SpvStorageClassShaderRecordBufferKHR = 5343,
-    SpvStorageClassShaderRecordBufferNV = 5343,
-    SpvStorageClassPhysicalStorageBuffer = 5349,
-    SpvStorageClassPhysicalStorageBufferEXT = 5349,
-    SpvStorageClassTaskPayloadWorkgroupEXT = 5402,
-    SpvStorageClassCodeSectionINTEL = 5605,
-    SpvStorageClassDeviceOnlyINTEL = 5936,
-    SpvStorageClassHostOnlyINTEL = 5937,
-    SpvStorageClassMax = 0x7fffffff,
-} SpvStorageClass;
-
-typedef enum SpvDim_ {
-    SpvDim1D = 0,
-    SpvDim2D = 1,
-    SpvDim3D = 2,
-    SpvDimCube = 3,
-    SpvDimRect = 4,
-    SpvDimBuffer = 5,
-    SpvDimSubpassData = 6,
-    SpvDimMax = 0x7fffffff,
-} SpvDim;
-
-typedef enum SpvSamplerAddressingMode_ {
-    SpvSamplerAddressingModeNone = 0,
-    SpvSamplerAddressingModeClampToEdge = 1,
-    SpvSamplerAddressingModeClamp = 2,
-    SpvSamplerAddressingModeRepeat = 3,
-    SpvSamplerAddressingModeRepeatMirrored = 4,
-    SpvSamplerAddressingModeMax = 0x7fffffff,
-} SpvSamplerAddressingMode;
-
-typedef enum SpvSamplerFilterMode_ {
-    SpvSamplerFilterModeNearest = 0,
-    SpvSamplerFilterModeLinear = 1,
-    SpvSamplerFilterModeMax = 0x7fffffff,
-} SpvSamplerFilterMode;
-
-typedef enum SpvImageFormat_ {
-    SpvImageFormatUnknown = 0,
-    SpvImageFormatRgba32f = 1,
-    SpvImageFormatRgba16f = 2,
-    SpvImageFormatR32f = 3,
-    SpvImageFormatRgba8 = 4,
-    SpvImageFormatRgba8Snorm = 5,
-    SpvImageFormatRg32f = 6,
-    SpvImageFormatRg16f = 7,
-    SpvImageFormatR11fG11fB10f = 8,
-    SpvImageFormatR16f = 9,
-    SpvImageFormatRgba16 = 10,
-    SpvImageFormatRgb10A2 = 11,
-    SpvImageFormatRg16 = 12,
-    SpvImageFormatRg8 = 13,
-    SpvImageFormatR16 = 14,
-    SpvImageFormatR8 = 15,
-    SpvImageFormatRgba16Snorm = 16,
-    SpvImageFormatRg16Snorm = 17,
-    SpvImageFormatRg8Snorm = 18,
-    SpvImageFormatR16Snorm = 19,
-    SpvImageFormatR8Snorm = 20,
-    SpvImageFormatRgba32i = 21,
-    SpvImageFormatRgba16i = 22,
-    SpvImageFormatRgba8i = 23,
-    SpvImageFormatR32i = 24,
-    SpvImageFormatRg32i = 25,
-    SpvImageFormatRg16i = 26,
-    SpvImageFormatRg8i = 27,
-    SpvImageFormatR16i = 28,
-    SpvImageFormatR8i = 29,
-    SpvImageFormatRgba32ui = 30,
-    SpvImageFormatRgba16ui = 31,
-    SpvImageFormatRgba8ui = 32,
-    SpvImageFormatR32ui = 33,
-    SpvImageFormatRgb10a2ui = 34,
-    SpvImageFormatRg32ui = 35,
-    SpvImageFormatRg16ui = 36,
-    SpvImageFormatRg8ui = 37,
-    SpvImageFormatR16ui = 38,
-    SpvImageFormatR8ui = 39,
-    SpvImageFormatR64ui = 40,
-    SpvImageFormatR64i = 41,
-    SpvImageFormatMax = 0x7fffffff,
-} SpvImageFormat;
-
-typedef enum SpvImageChannelOrder_ {
-    SpvImageChannelOrderR = 0,
-    SpvImageChannelOrderA = 1,
-    SpvImageChannelOrderRG = 2,
-    SpvImageChannelOrderRA = 3,
-    SpvImageChannelOrderRGB = 4,
-    SpvImageChannelOrderRGBA = 5,
-    SpvImageChannelOrderBGRA = 6,
-    SpvImageChannelOrderARGB = 7,
-    SpvImageChannelOrderIntensity = 8,
-    SpvImageChannelOrderLuminance = 9,
-    SpvImageChannelOrderRx = 10,
-    SpvImageChannelOrderRGx = 11,
-    SpvImageChannelOrderRGBx = 12,
-    SpvImageChannelOrderDepth = 13,
-    SpvImageChannelOrderDepthStencil = 14,
-    SpvImageChannelOrdersRGB = 15,
-    SpvImageChannelOrdersRGBx = 16,
-    SpvImageChannelOrdersRGBA = 17,
-    SpvImageChannelOrdersBGRA = 18,
-    SpvImageChannelOrderABGR = 19,
-    SpvImageChannelOrderMax = 0x7fffffff,
-} SpvImageChannelOrder;
-
-typedef enum SpvImageChannelDataType_ {
-    SpvImageChannelDataTypeSnormInt8 = 0,
-    SpvImageChannelDataTypeSnormInt16 = 1,
-    SpvImageChannelDataTypeUnormInt8 = 2,
-    SpvImageChannelDataTypeUnormInt16 = 3,
-    SpvImageChannelDataTypeUnormShort565 = 4,
-    SpvImageChannelDataTypeUnormShort555 = 5,
-    SpvImageChannelDataTypeUnormInt101010 = 6,
-    SpvImageChannelDataTypeSignedInt8 = 7,
-    SpvImageChannelDataTypeSignedInt16 = 8,
-    SpvImageChannelDataTypeSignedInt32 = 9,
-    SpvImageChannelDataTypeUnsignedInt8 = 10,
-    SpvImageChannelDataTypeUnsignedInt16 = 11,
-    SpvImageChannelDataTypeUnsignedInt32 = 12,
-    SpvImageChannelDataTypeHalfFloat = 13,
-    SpvImageChannelDataTypeFloat = 14,
-    SpvImageChannelDataTypeUnormInt24 = 15,
-    SpvImageChannelDataTypeUnormInt101010_2 = 16,
-    SpvImageChannelDataTypeMax = 0x7fffffff,
-} SpvImageChannelDataType;
-
-typedef enum SpvImageOperandsShift_ {
-    SpvImageOperandsBiasShift = 0,
-    SpvImageOperandsLodShift = 1,
-    SpvImageOperandsGradShift = 2,
-    SpvImageOperandsConstOffsetShift = 3,
-    SpvImageOperandsOffsetShift = 4,
-    SpvImageOperandsConstOffsetsShift = 5,
-    SpvImageOperandsSampleShift = 6,
-    SpvImageOperandsMinLodShift = 7,
-    SpvImageOperandsMakeTexelAvailableShift = 8,
-    SpvImageOperandsMakeTexelAvailableKHRShift = 8,
-    SpvImageOperandsMakeTexelVisibleShift = 9,
-    SpvImageOperandsMakeTexelVisibleKHRShift = 9,
-    SpvImageOperandsNonPrivateTexelShift = 10,
-    SpvImageOperandsNonPrivateTexelKHRShift = 10,
-    SpvImageOperandsVolatileTexelShift = 11,
-    SpvImageOperandsVolatileTexelKHRShift = 11,
-    SpvImageOperandsSignExtendShift = 12,
-    SpvImageOperandsZeroExtendShift = 13,
-    SpvImageOperandsNontemporalShift = 14,
-    SpvImageOperandsOffsetsShift = 16,
-    SpvImageOperandsMax = 0x7fffffff,
-} SpvImageOperandsShift;
-
-typedef enum SpvImageOperandsMask_ {
-    SpvImageOperandsMaskNone = 0,
-    SpvImageOperandsBiasMask = 0x00000001,
-    SpvImageOperandsLodMask = 0x00000002,
-    SpvImageOperandsGradMask = 0x00000004,
-    SpvImageOperandsConstOffsetMask = 0x00000008,
-    SpvImageOperandsOffsetMask = 0x00000010,
-    SpvImageOperandsConstOffsetsMask = 0x00000020,
-    SpvImageOperandsSampleMask = 0x00000040,
-    SpvImageOperandsMinLodMask = 0x00000080,
-    SpvImageOperandsMakeTexelAvailableMask = 0x00000100,
-    SpvImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
-    SpvImageOperandsMakeTexelVisibleMask = 0x00000200,
-    SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
-    SpvImageOperandsNonPrivateTexelMask = 0x00000400,
-    SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400,
-    SpvImageOperandsVolatileTexelMask = 0x00000800,
-    SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
-    SpvImageOperandsSignExtendMask = 0x00001000,
-    SpvImageOperandsZeroExtendMask = 0x00002000,
-    SpvImageOperandsNontemporalMask = 0x00004000,
-    SpvImageOperandsOffsetsMask = 0x00010000,
-} SpvImageOperandsMask;
-
-typedef enum SpvFPFastMathModeShift_ {
-    SpvFPFastMathModeNotNaNShift = 0,
-    SpvFPFastMathModeNotInfShift = 1,
-    SpvFPFastMathModeNSZShift = 2,
-    SpvFPFastMathModeAllowRecipShift = 3,
-    SpvFPFastMathModeFastShift = 4,
-    SpvFPFastMathModeAllowContractFastINTELShift = 16,
-    SpvFPFastMathModeAllowReassocINTELShift = 17,
-    SpvFPFastMathModeMax = 0x7fffffff,
-} SpvFPFastMathModeShift;
-
-typedef enum SpvFPFastMathModeMask_ {
-    SpvFPFastMathModeMaskNone = 0,
-    SpvFPFastMathModeNotNaNMask = 0x00000001,
-    SpvFPFastMathModeNotInfMask = 0x00000002,
-    SpvFPFastMathModeNSZMask = 0x00000004,
-    SpvFPFastMathModeAllowRecipMask = 0x00000008,
-    SpvFPFastMathModeFastMask = 0x00000010,
-    SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
-    SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
-} SpvFPFastMathModeMask;
-
-typedef enum SpvFPRoundingMode_ {
-    SpvFPRoundingModeRTE = 0,
-    SpvFPRoundingModeRTZ = 1,
-    SpvFPRoundingModeRTP = 2,
-    SpvFPRoundingModeRTN = 3,
-    SpvFPRoundingModeMax = 0x7fffffff,
-} SpvFPRoundingMode;
-
-typedef enum SpvLinkageType_ {
-    SpvLinkageTypeExport = 0,
-    SpvLinkageTypeImport = 1,
-    SpvLinkageTypeLinkOnceODR = 2,
-    SpvLinkageTypeMax = 0x7fffffff,
-} SpvLinkageType;
-
-typedef enum SpvAccessQualifier_ {
-    SpvAccessQualifierReadOnly = 0,
-    SpvAccessQualifierWriteOnly = 1,
-    SpvAccessQualifierReadWrite = 2,
-    SpvAccessQualifierMax = 0x7fffffff,
-} SpvAccessQualifier;
-
-typedef enum SpvFunctionParameterAttribute_ {
-    SpvFunctionParameterAttributeZext = 0,
-    SpvFunctionParameterAttributeSext = 1,
-    SpvFunctionParameterAttributeByVal = 2,
-    SpvFunctionParameterAttributeSret = 3,
-    SpvFunctionParameterAttributeNoAlias = 4,
-    SpvFunctionParameterAttributeNoCapture = 5,
-    SpvFunctionParameterAttributeNoWrite = 6,
-    SpvFunctionParameterAttributeNoReadWrite = 7,
-    SpvFunctionParameterAttributeMax = 0x7fffffff,
-} SpvFunctionParameterAttribute;
-
-typedef enum SpvDecoration_ {
-    SpvDecorationRelaxedPrecision = 0,
-    SpvDecorationSpecId = 1,
-    SpvDecorationBlock = 2,
-    SpvDecorationBufferBlock = 3,
-    SpvDecorationRowMajor = 4,
-    SpvDecorationColMajor = 5,
-    SpvDecorationArrayStride = 6,
-    SpvDecorationMatrixStride = 7,
-    SpvDecorationGLSLShared = 8,
-    SpvDecorationGLSLPacked = 9,
-    SpvDecorationCPacked = 10,
-    SpvDecorationBuiltIn = 11,
-    SpvDecorationNoPerspective = 13,
-    SpvDecorationFlat = 14,
-    SpvDecorationPatch = 15,
-    SpvDecorationCentroid = 16,
-    SpvDecorationSample = 17,
-    SpvDecorationInvariant = 18,
-    SpvDecorationRestrict = 19,
-    SpvDecorationAliased = 20,
-    SpvDecorationVolatile = 21,
-    SpvDecorationConstant = 22,
-    SpvDecorationCoherent = 23,
-    SpvDecorationNonWritable = 24,
-    SpvDecorationNonReadable = 25,
-    SpvDecorationUniform = 26,
-    SpvDecorationUniformId = 27,
-    SpvDecorationSaturatedConversion = 28,
-    SpvDecorationStream = 29,
-    SpvDecorationLocation = 30,
-    SpvDecorationComponent = 31,
-    SpvDecorationIndex = 32,
-    SpvDecorationBinding = 33,
-    SpvDecorationDescriptorSet = 34,
-    SpvDecorationOffset = 35,
-    SpvDecorationXfbBuffer = 36,
-    SpvDecorationXfbStride = 37,
-    SpvDecorationFuncParamAttr = 38,
-    SpvDecorationFPRoundingMode = 39,
-    SpvDecorationFPFastMathMode = 40,
-    SpvDecorationLinkageAttributes = 41,
-    SpvDecorationNoContraction = 42,
-    SpvDecorationInputAttachmentIndex = 43,
-    SpvDecorationAlignment = 44,
-    SpvDecorationMaxByteOffset = 45,
-    SpvDecorationAlignmentId = 46,
-    SpvDecorationMaxByteOffsetId = 47,
-    SpvDecorationNoSignedWrap = 4469,
-    SpvDecorationNoUnsignedWrap = 4470,
-    SpvDecorationExplicitInterpAMD = 4999,
-    SpvDecorationOverrideCoverageNV = 5248,
-    SpvDecorationPassthroughNV = 5250,
-    SpvDecorationViewportRelativeNV = 5252,
-    SpvDecorationSecondaryViewportRelativeNV = 5256,
-    SpvDecorationPerPrimitiveEXT = 5271,
-    SpvDecorationPerPrimitiveNV = 5271,
-    SpvDecorationPerViewNV = 5272,
-    SpvDecorationPerTaskNV = 5273,
-    SpvDecorationPerVertexKHR = 5285,
-    SpvDecorationPerVertexNV = 5285,
-    SpvDecorationNonUniform = 5300,
-    SpvDecorationNonUniformEXT = 5300,
-    SpvDecorationRestrictPointer = 5355,
-    SpvDecorationRestrictPointerEXT = 5355,
-    SpvDecorationAliasedPointer = 5356,
-    SpvDecorationAliasedPointerEXT = 5356,
-    SpvDecorationBindlessSamplerNV = 5398,
-    SpvDecorationBindlessImageNV = 5399,
-    SpvDecorationBoundSamplerNV = 5400,
-    SpvDecorationBoundImageNV = 5401,
-    SpvDecorationSIMTCallINTEL = 5599,
-    SpvDecorationReferencedIndirectlyINTEL = 5602,
-    SpvDecorationClobberINTEL = 5607,
-    SpvDecorationSideEffectsINTEL = 5608,
-    SpvDecorationVectorComputeVariableINTEL = 5624,
-    SpvDecorationFuncParamIOKindINTEL = 5625,
-    SpvDecorationVectorComputeFunctionINTEL = 5626,
-    SpvDecorationStackCallINTEL = 5627,
-    SpvDecorationGlobalVariableOffsetINTEL = 5628,
-    SpvDecorationCounterBuffer = 5634,
-    SpvDecorationHlslCounterBufferGOOGLE = 5634,
-    SpvDecorationHlslSemanticGOOGLE = 5635,
-    SpvDecorationUserSemantic = 5635,
-    SpvDecorationUserTypeGOOGLE = 5636,
-    SpvDecorationFunctionRoundingModeINTEL = 5822,
-    SpvDecorationFunctionDenormModeINTEL = 5823,
-    SpvDecorationRegisterINTEL = 5825,
-    SpvDecorationMemoryINTEL = 5826,
-    SpvDecorationNumbanksINTEL = 5827,
-    SpvDecorationBankwidthINTEL = 5828,
-    SpvDecorationMaxPrivateCopiesINTEL = 5829,
-    SpvDecorationSinglepumpINTEL = 5830,
-    SpvDecorationDoublepumpINTEL = 5831,
-    SpvDecorationMaxReplicatesINTEL = 5832,
-    SpvDecorationSimpleDualPortINTEL = 5833,
-    SpvDecorationMergeINTEL = 5834,
-    SpvDecorationBankBitsINTEL = 5835,
-    SpvDecorationForcePow2DepthINTEL = 5836,
-    SpvDecorationBurstCoalesceINTEL = 5899,
-    SpvDecorationCacheSizeINTEL = 5900,
-    SpvDecorationDontStaticallyCoalesceINTEL = 5901,
-    SpvDecorationPrefetchINTEL = 5902,
-    SpvDecorationStallEnableINTEL = 5905,
-    SpvDecorationFuseLoopsInFunctionINTEL = 5907,
-    SpvDecorationAliasScopeINTEL = 5914,
-    SpvDecorationNoAliasINTEL = 5915,
-    SpvDecorationBufferLocationINTEL = 5921,
-    SpvDecorationIOPipeStorageINTEL = 5944,
-    SpvDecorationFunctionFloatingPointModeINTEL = 6080,
-    SpvDecorationSingleElementVectorINTEL = 6085,
-    SpvDecorationVectorComputeCallableFunctionINTEL = 6087,
-    SpvDecorationMediaBlockIOINTEL = 6140,
-    SpvDecorationMax = 0x7fffffff,
-} SpvDecoration;
-
-typedef enum SpvBuiltIn_ {
-    SpvBuiltInPosition = 0,
-    SpvBuiltInPointSize = 1,
-    SpvBuiltInClipDistance = 3,
-    SpvBuiltInCullDistance = 4,
-    SpvBuiltInVertexId = 5,
-    SpvBuiltInInstanceId = 6,
-    SpvBuiltInPrimitiveId = 7,
-    SpvBuiltInInvocationId = 8,
-    SpvBuiltInLayer = 9,
-    SpvBuiltInViewportIndex = 10,
-    SpvBuiltInTessLevelOuter = 11,
-    SpvBuiltInTessLevelInner = 12,
-    SpvBuiltInTessCoord = 13,
-    SpvBuiltInPatchVertices = 14,
-    SpvBuiltInFragCoord = 15,
-    SpvBuiltInPointCoord = 16,
-    SpvBuiltInFrontFacing = 17,
-    SpvBuiltInSampleId = 18,
-    SpvBuiltInSamplePosition = 19,
-    SpvBuiltInSampleMask = 20,
-    SpvBuiltInFragDepth = 22,
-    SpvBuiltInHelperInvocation = 23,
-    SpvBuiltInNumWorkgroups = 24,
-    SpvBuiltInWorkgroupSize = 25,
-    SpvBuiltInWorkgroupId = 26,
-    SpvBuiltInLocalInvocationId = 27,
-    SpvBuiltInGlobalInvocationId = 28,
-    SpvBuiltInLocalInvocationIndex = 29,
-    SpvBuiltInWorkDim = 30,
-    SpvBuiltInGlobalSize = 31,
-    SpvBuiltInEnqueuedWorkgroupSize = 32,
-    SpvBuiltInGlobalOffset = 33,
-    SpvBuiltInGlobalLinearId = 34,
-    SpvBuiltInSubgroupSize = 36,
-    SpvBuiltInSubgroupMaxSize = 37,
-    SpvBuiltInNumSubgroups = 38,
-    SpvBuiltInNumEnqueuedSubgroups = 39,
-    SpvBuiltInSubgroupId = 40,
-    SpvBuiltInSubgroupLocalInvocationId = 41,
-    SpvBuiltInVertexIndex = 42,
-    SpvBuiltInInstanceIndex = 43,
-    SpvBuiltInSubgroupEqMask = 4416,
-    SpvBuiltInSubgroupEqMaskKHR = 4416,
-    SpvBuiltInSubgroupGeMask = 4417,
-    SpvBuiltInSubgroupGeMaskKHR = 4417,
-    SpvBuiltInSubgroupGtMask = 4418,
-    SpvBuiltInSubgroupGtMaskKHR = 4418,
-    SpvBuiltInSubgroupLeMask = 4419,
-    SpvBuiltInSubgroupLeMaskKHR = 4419,
-    SpvBuiltInSubgroupLtMask = 4420,
-    SpvBuiltInSubgroupLtMaskKHR = 4420,
-    SpvBuiltInBaseVertex = 4424,
-    SpvBuiltInBaseInstance = 4425,
-    SpvBuiltInDrawIndex = 4426,
-    SpvBuiltInPrimitiveShadingRateKHR = 4432,
-    SpvBuiltInDeviceIndex = 4438,
-    SpvBuiltInViewIndex = 4440,
-    SpvBuiltInShadingRateKHR = 4444,
-    SpvBuiltInBaryCoordNoPerspAMD = 4992,
-    SpvBuiltInBaryCoordNoPerspCentroidAMD = 4993,
-    SpvBuiltInBaryCoordNoPerspSampleAMD = 4994,
-    SpvBuiltInBaryCoordSmoothAMD = 4995,
-    SpvBuiltInBaryCoordSmoothCentroidAMD = 4996,
-    SpvBuiltInBaryCoordSmoothSampleAMD = 4997,
-    SpvBuiltInBaryCoordPullModelAMD = 4998,
-    SpvBuiltInFragStencilRefEXT = 5014,
-    SpvBuiltInViewportMaskNV = 5253,
-    SpvBuiltInSecondaryPositionNV = 5257,
-    SpvBuiltInSecondaryViewportMaskNV = 5258,
-    SpvBuiltInPositionPerViewNV = 5261,
-    SpvBuiltInViewportMaskPerViewNV = 5262,
-    SpvBuiltInFullyCoveredEXT = 5264,
-    SpvBuiltInTaskCountNV = 5274,
-    SpvBuiltInPrimitiveCountNV = 5275,
-    SpvBuiltInPrimitiveIndicesNV = 5276,
-    SpvBuiltInClipDistancePerViewNV = 5277,
-    SpvBuiltInCullDistancePerViewNV = 5278,
-    SpvBuiltInLayerPerViewNV = 5279,
-    SpvBuiltInMeshViewCountNV = 5280,
-    SpvBuiltInMeshViewIndicesNV = 5281,
-    SpvBuiltInBaryCoordKHR = 5286,
-    SpvBuiltInBaryCoordNV = 5286,
-    SpvBuiltInBaryCoordNoPerspKHR = 5287,
-    SpvBuiltInBaryCoordNoPerspNV = 5287,
-    SpvBuiltInFragSizeEXT = 5292,
-    SpvBuiltInFragmentSizeNV = 5292,
-    SpvBuiltInFragInvocationCountEXT = 5293,
-    SpvBuiltInInvocationsPerPixelNV = 5293,
-    SpvBuiltInPrimitivePointIndicesEXT = 5294,
-    SpvBuiltInPrimitiveLineIndicesEXT = 5295,
-    SpvBuiltInPrimitiveTriangleIndicesEXT = 5296,
-    SpvBuiltInCullPrimitiveEXT = 5299,
-    SpvBuiltInLaunchIdKHR = 5319,
-    SpvBuiltInLaunchIdNV = 5319,
-    SpvBuiltInLaunchSizeKHR = 5320,
-    SpvBuiltInLaunchSizeNV = 5320,
-    SpvBuiltInWorldRayOriginKHR = 5321,
-    SpvBuiltInWorldRayOriginNV = 5321,
-    SpvBuiltInWorldRayDirectionKHR = 5322,
-    SpvBuiltInWorldRayDirectionNV = 5322,
-    SpvBuiltInObjectRayOriginKHR = 5323,
-    SpvBuiltInObjectRayOriginNV = 5323,
-    SpvBuiltInObjectRayDirectionKHR = 5324,
-    SpvBuiltInObjectRayDirectionNV = 5324,
-    SpvBuiltInRayTminKHR = 5325,
-    SpvBuiltInRayTminNV = 5325,
-    SpvBuiltInRayTmaxKHR = 5326,
-    SpvBuiltInRayTmaxNV = 5326,
-    SpvBuiltInInstanceCustomIndexKHR = 5327,
-    SpvBuiltInInstanceCustomIndexNV = 5327,
-    SpvBuiltInObjectToWorldKHR = 5330,
-    SpvBuiltInObjectToWorldNV = 5330,
-    SpvBuiltInWorldToObjectKHR = 5331,
-    SpvBuiltInWorldToObjectNV = 5331,
-    SpvBuiltInHitTNV = 5332,
-    SpvBuiltInHitKindKHR = 5333,
-    SpvBuiltInHitKindNV = 5333,
-    SpvBuiltInCurrentRayTimeNV = 5334,
-    SpvBuiltInIncomingRayFlagsKHR = 5351,
-    SpvBuiltInIncomingRayFlagsNV = 5351,
-    SpvBuiltInRayGeometryIndexKHR = 5352,
-    SpvBuiltInWarpsPerSMNV = 5374,
-    SpvBuiltInSMCountNV = 5375,
-    SpvBuiltInWarpIDNV = 5376,
-    SpvBuiltInSMIDNV = 5377,
-    SpvBuiltInCullMaskKHR = 6021,
-    SpvBuiltInMax = 0x7fffffff,
-} SpvBuiltIn;
-
-typedef enum SpvSelectionControlShift_ {
-    SpvSelectionControlFlattenShift = 0,
-    SpvSelectionControlDontFlattenShift = 1,
-    SpvSelectionControlMax = 0x7fffffff,
-} SpvSelectionControlShift;
-
-typedef enum SpvSelectionControlMask_ {
-    SpvSelectionControlMaskNone = 0,
-    SpvSelectionControlFlattenMask = 0x00000001,
-    SpvSelectionControlDontFlattenMask = 0x00000002,
-} SpvSelectionControlMask;
-
-typedef enum SpvLoopControlShift_ {
-    SpvLoopControlUnrollShift = 0,
-    SpvLoopControlDontUnrollShift = 1,
-    SpvLoopControlDependencyInfiniteShift = 2,
-    SpvLoopControlDependencyLengthShift = 3,
-    SpvLoopControlMinIterationsShift = 4,
-    SpvLoopControlMaxIterationsShift = 5,
-    SpvLoopControlIterationMultipleShift = 6,
-    SpvLoopControlPeelCountShift = 7,
-    SpvLoopControlPartialCountShift = 8,
-    SpvLoopControlInitiationIntervalINTELShift = 16,
-    SpvLoopControlMaxConcurrencyINTELShift = 17,
-    SpvLoopControlDependencyArrayINTELShift = 18,
-    SpvLoopControlPipelineEnableINTELShift = 19,
-    SpvLoopControlLoopCoalesceINTELShift = 20,
-    SpvLoopControlMaxInterleavingINTELShift = 21,
-    SpvLoopControlSpeculatedIterationsINTELShift = 22,
-    SpvLoopControlNoFusionINTELShift = 23,
-    SpvLoopControlMax = 0x7fffffff,
-} SpvLoopControlShift;
-
-typedef enum SpvLoopControlMask_ {
-    SpvLoopControlMaskNone = 0,
-    SpvLoopControlUnrollMask = 0x00000001,
-    SpvLoopControlDontUnrollMask = 0x00000002,
-    SpvLoopControlDependencyInfiniteMask = 0x00000004,
-    SpvLoopControlDependencyLengthMask = 0x00000008,
-    SpvLoopControlMinIterationsMask = 0x00000010,
-    SpvLoopControlMaxIterationsMask = 0x00000020,
-    SpvLoopControlIterationMultipleMask = 0x00000040,
-    SpvLoopControlPeelCountMask = 0x00000080,
-    SpvLoopControlPartialCountMask = 0x00000100,
-    SpvLoopControlInitiationIntervalINTELMask = 0x00010000,
-    SpvLoopControlMaxConcurrencyINTELMask = 0x00020000,
-    SpvLoopControlDependencyArrayINTELMask = 0x00040000,
-    SpvLoopControlPipelineEnableINTELMask = 0x00080000,
-    SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
-    SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
-    SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
-    SpvLoopControlNoFusionINTELMask = 0x00800000,
-} SpvLoopControlMask;
-
-typedef enum SpvFunctionControlShift_ {
-    SpvFunctionControlInlineShift = 0,
-    SpvFunctionControlDontInlineShift = 1,
-    SpvFunctionControlPureShift = 2,
-    SpvFunctionControlConstShift = 3,
-    SpvFunctionControlOptNoneINTELShift = 16,
-    SpvFunctionControlMax = 0x7fffffff,
-} SpvFunctionControlShift;
-
-typedef enum SpvFunctionControlMask_ {
-    SpvFunctionControlMaskNone = 0,
-    SpvFunctionControlInlineMask = 0x00000001,
-    SpvFunctionControlDontInlineMask = 0x00000002,
-    SpvFunctionControlPureMask = 0x00000004,
-    SpvFunctionControlConstMask = 0x00000008,
-    SpvFunctionControlOptNoneINTELMask = 0x00010000,
-} SpvFunctionControlMask;
-
-typedef enum SpvMemorySemanticsShift_ {
-    SpvMemorySemanticsAcquireShift = 1,
-    SpvMemorySemanticsReleaseShift = 2,
-    SpvMemorySemanticsAcquireReleaseShift = 3,
-    SpvMemorySemanticsSequentiallyConsistentShift = 4,
-    SpvMemorySemanticsUniformMemoryShift = 6,
-    SpvMemorySemanticsSubgroupMemoryShift = 7,
-    SpvMemorySemanticsWorkgroupMemoryShift = 8,
-    SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
-    SpvMemorySemanticsAtomicCounterMemoryShift = 10,
-    SpvMemorySemanticsImageMemoryShift = 11,
-    SpvMemorySemanticsOutputMemoryShift = 12,
-    SpvMemorySemanticsOutputMemoryKHRShift = 12,
-    SpvMemorySemanticsMakeAvailableShift = 13,
-    SpvMemorySemanticsMakeAvailableKHRShift = 13,
-    SpvMemorySemanticsMakeVisibleShift = 14,
-    SpvMemorySemanticsMakeVisibleKHRShift = 14,
-    SpvMemorySemanticsVolatileShift = 15,
-    SpvMemorySemanticsMax = 0x7fffffff,
-} SpvMemorySemanticsShift;
-
-typedef enum SpvMemorySemanticsMask_ {
-    SpvMemorySemanticsMaskNone = 0,
-    SpvMemorySemanticsAcquireMask = 0x00000002,
-    SpvMemorySemanticsReleaseMask = 0x00000004,
-    SpvMemorySemanticsAcquireReleaseMask = 0x00000008,
-    SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
-    SpvMemorySemanticsUniformMemoryMask = 0x00000040,
-    SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
-    SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
-    SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
-    SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
-    SpvMemorySemanticsImageMemoryMask = 0x00000800,
-    SpvMemorySemanticsOutputMemoryMask = 0x00001000,
-    SpvMemorySemanticsOutputMemoryKHRMask = 0x00001000,
-    SpvMemorySemanticsMakeAvailableMask = 0x00002000,
-    SpvMemorySemanticsMakeAvailableKHRMask = 0x00002000,
-    SpvMemorySemanticsMakeVisibleMask = 0x00004000,
-    SpvMemorySemanticsMakeVisibleKHRMask = 0x00004000,
-    SpvMemorySemanticsVolatileMask = 0x00008000,
-} SpvMemorySemanticsMask;
-
-typedef enum SpvMemoryAccessShift_ {
-    SpvMemoryAccessVolatileShift = 0,
-    SpvMemoryAccessAlignedShift = 1,
-    SpvMemoryAccessNontemporalShift = 2,
-    SpvMemoryAccessMakePointerAvailableShift = 3,
-    SpvMemoryAccessMakePointerAvailableKHRShift = 3,
-    SpvMemoryAccessMakePointerVisibleShift = 4,
-    SpvMemoryAccessMakePointerVisibleKHRShift = 4,
-    SpvMemoryAccessNonPrivatePointerShift = 5,
-    SpvMemoryAccessNonPrivatePointerKHRShift = 5,
-    SpvMemoryAccessAliasScopeINTELMaskShift = 16,
-    SpvMemoryAccessNoAliasINTELMaskShift = 17,
-    SpvMemoryAccessMax = 0x7fffffff,
-} SpvMemoryAccessShift;
-
-typedef enum SpvMemoryAccessMask_ {
-    SpvMemoryAccessMaskNone = 0,
-    SpvMemoryAccessVolatileMask = 0x00000001,
-    SpvMemoryAccessAlignedMask = 0x00000002,
-    SpvMemoryAccessNontemporalMask = 0x00000004,
-    SpvMemoryAccessMakePointerAvailableMask = 0x00000008,
-    SpvMemoryAccessMakePointerAvailableKHRMask = 0x00000008,
-    SpvMemoryAccessMakePointerVisibleMask = 0x00000010,
-    SpvMemoryAccessMakePointerVisibleKHRMask = 0x00000010,
-    SpvMemoryAccessNonPrivatePointerMask = 0x00000020,
-    SpvMemoryAccessNonPrivatePointerKHRMask = 0x00000020,
-    SpvMemoryAccessAliasScopeINTELMaskMask = 0x00010000,
-    SpvMemoryAccessNoAliasINTELMaskMask = 0x00020000,
-} SpvMemoryAccessMask;
-
-typedef enum SpvScope_ {
-    SpvScopeCrossDevice = 0,
-    SpvScopeDevice = 1,
-    SpvScopeWorkgroup = 2,
-    SpvScopeSubgroup = 3,
-    SpvScopeInvocation = 4,
-    SpvScopeQueueFamily = 5,
-    SpvScopeQueueFamilyKHR = 5,
-    SpvScopeShaderCallKHR = 6,
-    SpvScopeMax = 0x7fffffff,
-} SpvScope;
-
-typedef enum SpvGroupOperation_ {
-    SpvGroupOperationReduce = 0,
-    SpvGroupOperationInclusiveScan = 1,
-    SpvGroupOperationExclusiveScan = 2,
-    SpvGroupOperationClusteredReduce = 3,
-    SpvGroupOperationPartitionedReduceNV = 6,
-    SpvGroupOperationPartitionedInclusiveScanNV = 7,
-    SpvGroupOperationPartitionedExclusiveScanNV = 8,
-    SpvGroupOperationMax = 0x7fffffff,
-} SpvGroupOperation;
-
-typedef enum SpvKernelEnqueueFlags_ {
-    SpvKernelEnqueueFlagsNoWait = 0,
-    SpvKernelEnqueueFlagsWaitKernel = 1,
-    SpvKernelEnqueueFlagsWaitWorkGroup = 2,
-    SpvKernelEnqueueFlagsMax = 0x7fffffff,
-} SpvKernelEnqueueFlags;
-
-typedef enum SpvKernelProfilingInfoShift_ {
-    SpvKernelProfilingInfoCmdExecTimeShift = 0,
-    SpvKernelProfilingInfoMax = 0x7fffffff,
-} SpvKernelProfilingInfoShift;
-
-typedef enum SpvKernelProfilingInfoMask_ {
-    SpvKernelProfilingInfoMaskNone = 0,
-    SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,
-} SpvKernelProfilingInfoMask;
-
-typedef enum SpvCapability_ {
-    SpvCapabilityMatrix = 0,
-    SpvCapabilityShader = 1,
-    SpvCapabilityGeometry = 2,
-    SpvCapabilityTessellation = 3,
-    SpvCapabilityAddresses = 4,
-    SpvCapabilityLinkage = 5,
-    SpvCapabilityKernel = 6,
-    SpvCapabilityVector16 = 7,
-    SpvCapabilityFloat16Buffer = 8,
-    SpvCapabilityFloat16 = 9,
-    SpvCapabilityFloat64 = 10,
-    SpvCapabilityInt64 = 11,
-    SpvCapabilityInt64Atomics = 12,
-    SpvCapabilityImageBasic = 13,
-    SpvCapabilityImageReadWrite = 14,
-    SpvCapabilityImageMipmap = 15,
-    SpvCapabilityPipes = 17,
-    SpvCapabilityGroups = 18,
-    SpvCapabilityDeviceEnqueue = 19,
-    SpvCapabilityLiteralSampler = 20,
-    SpvCapabilityAtomicStorage = 21,
-    SpvCapabilityInt16 = 22,
-    SpvCapabilityTessellationPointSize = 23,
-    SpvCapabilityGeometryPointSize = 24,
-    SpvCapabilityImageGatherExtended = 25,
-    SpvCapabilityStorageImageMultisample = 27,
-    SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
-    SpvCapabilitySampledImageArrayDynamicIndexing = 29,
-    SpvCapabilityStorageBufferArrayDynamicIndexing = 30,
-    SpvCapabilityStorageImageArrayDynamicIndexing = 31,
-    SpvCapabilityClipDistance = 32,
-    SpvCapabilityCullDistance = 33,
-    SpvCapabilityImageCubeArray = 34,
-    SpvCapabilitySampleRateShading = 35,
-    SpvCapabilityImageRect = 36,
-    SpvCapabilitySampledRect = 37,
-    SpvCapabilityGenericPointer = 38,
-    SpvCapabilityInt8 = 39,
-    SpvCapabilityInputAttachment = 40,
-    SpvCapabilitySparseResidency = 41,
-    SpvCapabilityMinLod = 42,
-    SpvCapabilitySampled1D = 43,
-    SpvCapabilityImage1D = 44,
-    SpvCapabilitySampledCubeArray = 45,
-    SpvCapabilitySampledBuffer = 46,
-    SpvCapabilityImageBuffer = 47,
-    SpvCapabilityImageMSArray = 48,
-    SpvCapabilityStorageImageExtendedFormats = 49,
-    SpvCapabilityImageQuery = 50,
-    SpvCapabilityDerivativeControl = 51,
-    SpvCapabilityInterpolationFunction = 52,
-    SpvCapabilityTransformFeedback = 53,
-    SpvCapabilityGeometryStreams = 54,
-    SpvCapabilityStorageImageReadWithoutFormat = 55,
-    SpvCapabilityStorageImageWriteWithoutFormat = 56,
-    SpvCapabilityMultiViewport = 57,
-    SpvCapabilitySubgroupDispatch = 58,
-    SpvCapabilityNamedBarrier = 59,
-    SpvCapabilityPipeStorage = 60,
-    SpvCapabilityGroupNonUniform = 61,
-    SpvCapabilityGroupNonUniformVote = 62,
-    SpvCapabilityGroupNonUniformArithmetic = 63,
-    SpvCapabilityGroupNonUniformBallot = 64,
-    SpvCapabilityGroupNonUniformShuffle = 65,
-    SpvCapabilityGroupNonUniformShuffleRelative = 66,
-    SpvCapabilityGroupNonUniformClustered = 67,
-    SpvCapabilityGroupNonUniformQuad = 68,
-    SpvCapabilityShaderLayer = 69,
-    SpvCapabilityShaderViewportIndex = 70,
-    SpvCapabilityUniformDecoration = 71,
-    SpvCapabilityFragmentShadingRateKHR = 4422,
-    SpvCapabilitySubgroupBallotKHR = 4423,
-    SpvCapabilityDrawParameters = 4427,
-    SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
-    SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
-    SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
-    SpvCapabilitySubgroupVoteKHR = 4431,
-    SpvCapabilityStorageBuffer16BitAccess = 4433,
-    SpvCapabilityStorageUniformBufferBlock16 = 4433,
-    SpvCapabilityStorageUniform16 = 4434,
-    SpvCapabilityUniformAndStorageBuffer16BitAccess = 4434,
-    SpvCapabilityStoragePushConstant16 = 4435,
-    SpvCapabilityStorageInputOutput16 = 4436,
-    SpvCapabilityDeviceGroup = 4437,
-    SpvCapabilityMultiView = 4439,
-    SpvCapabilityVariablePointersStorageBuffer = 4441,
-    SpvCapabilityVariablePointers = 4442,
-    SpvCapabilityAtomicStorageOps = 4445,
-    SpvCapabilitySampleMaskPostDepthCoverage = 4447,
-    SpvCapabilityStorageBuffer8BitAccess = 4448,
-    SpvCapabilityUniformAndStorageBuffer8BitAccess = 4449,
-    SpvCapabilityStoragePushConstant8 = 4450,
-    SpvCapabilityDenormPreserve = 4464,
-    SpvCapabilityDenormFlushToZero = 4465,
-    SpvCapabilitySignedZeroInfNanPreserve = 4466,
-    SpvCapabilityRoundingModeRTE = 4467,
-    SpvCapabilityRoundingModeRTZ = 4468,
-    SpvCapabilityRayQueryProvisionalKHR = 4471,
-    SpvCapabilityRayQueryKHR = 4472,
-    SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478,
-    SpvCapabilityRayTracingKHR = 4479,
-    SpvCapabilityFloat16ImageAMD = 5008,
-    SpvCapabilityImageGatherBiasLodAMD = 5009,
-    SpvCapabilityFragmentMaskAMD = 5010,
-    SpvCapabilityStencilExportEXT = 5013,
-    SpvCapabilityImageReadWriteLodAMD = 5015,
-    SpvCapabilityInt64ImageEXT = 5016,
-    SpvCapabilityShaderClockKHR = 5055,
-    SpvCapabilitySampleMaskOverrideCoverageNV = 5249,
-    SpvCapabilityGeometryShaderPassthroughNV = 5251,
-    SpvCapabilityShaderViewportIndexLayerEXT = 5254,
-    SpvCapabilityShaderViewportIndexLayerNV = 5254,
-    SpvCapabilityShaderViewportMaskNV = 5255,
-    SpvCapabilityShaderStereoViewNV = 5259,
-    SpvCapabilityPerViewAttributesNV = 5260,
-    SpvCapabilityFragmentFullyCoveredEXT = 5265,
-    SpvCapabilityMeshShadingNV = 5266,
-    SpvCapabilityImageFootprintNV = 5282,
-    SpvCapabilityMeshShadingEXT = 5283,
-    SpvCapabilityFragmentBarycentricKHR = 5284,
-    SpvCapabilityFragmentBarycentricNV = 5284,
-    SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
-    SpvCapabilityFragmentDensityEXT = 5291,
-    SpvCapabilityShadingRateNV = 5291,
-    SpvCapabilityGroupNonUniformPartitionedNV = 5297,
-    SpvCapabilityShaderNonUniform = 5301,
-    SpvCapabilityShaderNonUniformEXT = 5301,
-    SpvCapabilityRuntimeDescriptorArray = 5302,
-    SpvCapabilityRuntimeDescriptorArrayEXT = 5302,
-    SpvCapabilityInputAttachmentArrayDynamicIndexing = 5303,
-    SpvCapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
-    SpvCapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
-    SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
-    SpvCapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
-    SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
-    SpvCapabilityUniformBufferArrayNonUniformIndexing = 5306,
-    SpvCapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
-    SpvCapabilitySampledImageArrayNonUniformIndexing = 5307,
-    SpvCapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
-    SpvCapabilityStorageBufferArrayNonUniformIndexing = 5308,
-    SpvCapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
-    SpvCapabilityStorageImageArrayNonUniformIndexing = 5309,
-    SpvCapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
-    SpvCapabilityInputAttachmentArrayNonUniformIndexing = 5310,
-    SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
-    SpvCapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
-    SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
-    SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
-    SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
-    SpvCapabilityRayTracingNV = 5340,
-    SpvCapabilityRayTracingMotionBlurNV = 5341,
-    SpvCapabilityVulkanMemoryModel = 5345,
-    SpvCapabilityVulkanMemoryModelKHR = 5345,
-    SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
-    SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
-    SpvCapabilityPhysicalStorageBufferAddresses = 5347,
-    SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347,
-    SpvCapabilityComputeDerivativeGroupLinearNV = 5350,
-    SpvCapabilityRayTracingProvisionalKHR = 5353,
-    SpvCapabilityCooperativeMatrixNV = 5357,
-    SpvCapabilityFragmentShaderSampleInterlockEXT = 5363,
-    SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
-    SpvCapabilityShaderSMBuiltinsNV = 5373,
-    SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
-    SpvCapabilityDemoteToHelperInvocation = 5379,
-    SpvCapabilityDemoteToHelperInvocationEXT = 5379,
-    SpvCapabilityBindlessTextureNV = 5390,
-    SpvCapabilitySubgroupShuffleINTEL = 5568,
-    SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
-    SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
-    SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
-    SpvCapabilityRoundToInfinityINTEL = 5582,
-    SpvCapabilityFloatingPointModeINTEL = 5583,
-    SpvCapabilityIntegerFunctions2INTEL = 5584,
-    SpvCapabilityFunctionPointersINTEL = 5603,
-    SpvCapabilityIndirectReferencesINTEL = 5604,
-    SpvCapabilityAsmINTEL = 5606,
-    SpvCapabilityAtomicFloat32MinMaxEXT = 5612,
-    SpvCapabilityAtomicFloat64MinMaxEXT = 5613,
-    SpvCapabilityAtomicFloat16MinMaxEXT = 5616,
-    SpvCapabilityVectorComputeINTEL = 5617,
-    SpvCapabilityVectorAnyINTEL = 5619,
-    SpvCapabilityExpectAssumeKHR = 5629,
-    SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
-    SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
-    SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
-    SpvCapabilityVariableLengthArrayINTEL = 5817,
-    SpvCapabilityFunctionFloatControlINTEL = 5821,
-    SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
-    SpvCapabilityFPFastMathModeINTEL = 5837,
-    SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844,
-    SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
-    SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
-    SpvCapabilityFPGALoopControlsINTEL = 5888,
-    SpvCapabilityKernelAttributesINTEL = 5892,
-    SpvCapabilityFPGAKernelAttributesINTEL = 5897,
-    SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
-    SpvCapabilityFPGAClusterAttributesINTEL = 5904,
-    SpvCapabilityLoopFuseINTEL = 5906,
-    SpvCapabilityMemoryAccessAliasingINTEL = 5910,
-    SpvCapabilityFPGABufferLocationINTEL = 5920,
-    SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
-    SpvCapabilityUSMStorageClassesINTEL = 5935,
-    SpvCapabilityIOPipesINTEL = 5943,
-    SpvCapabilityBlockingPipesINTEL = 5945,
-    SpvCapabilityFPGARegINTEL = 5948,
-    SpvCapabilityDotProductInputAll = 6016,
-    SpvCapabilityDotProductInputAllKHR = 6016,
-    SpvCapabilityDotProductInput4x8Bit = 6017,
-    SpvCapabilityDotProductInput4x8BitKHR = 6017,
-    SpvCapabilityDotProductInput4x8BitPacked = 6018,
-    SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
-    SpvCapabilityDotProduct = 6019,
-    SpvCapabilityDotProductKHR = 6019,
-    SpvCapabilityRayCullMaskKHR = 6020,
-    SpvCapabilityBitInstructions = 6025,
-    SpvCapabilityGroupNonUniformRotateKHR = 6026,
-    SpvCapabilityAtomicFloat32AddEXT = 6033,
-    SpvCapabilityAtomicFloat64AddEXT = 6034,
-    SpvCapabilityLongConstantCompositeINTEL = 6089,
-    SpvCapabilityOptNoneINTEL = 6094,
-    SpvCapabilityAtomicFloat16AddEXT = 6095,
-    SpvCapabilityDebugInfoModuleINTEL = 6114,
-    SpvCapabilitySplitBarrierINTEL = 6141,
-    SpvCapabilityGroupUniformArithmeticKHR = 6400,
-    SpvCapabilityMax = 0x7fffffff,
-} SpvCapability;
-
-typedef enum SpvRayFlagsShift_ {
-    SpvRayFlagsOpaqueKHRShift = 0,
-    SpvRayFlagsNoOpaqueKHRShift = 1,
-    SpvRayFlagsTerminateOnFirstHitKHRShift = 2,
-    SpvRayFlagsSkipClosestHitShaderKHRShift = 3,
-    SpvRayFlagsCullBackFacingTrianglesKHRShift = 4,
-    SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5,
-    SpvRayFlagsCullOpaqueKHRShift = 6,
-    SpvRayFlagsCullNoOpaqueKHRShift = 7,
-    SpvRayFlagsSkipTrianglesKHRShift = 8,
-    SpvRayFlagsSkipAABBsKHRShift = 9,
-    SpvRayFlagsMax = 0x7fffffff,
-} SpvRayFlagsShift;
-
-typedef enum SpvRayFlagsMask_ {
-    SpvRayFlagsMaskNone = 0,
-    SpvRayFlagsOpaqueKHRMask = 0x00000001,
-    SpvRayFlagsNoOpaqueKHRMask = 0x00000002,
-    SpvRayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
-    SpvRayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
-    SpvRayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
-    SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
-    SpvRayFlagsCullOpaqueKHRMask = 0x00000040,
-    SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080,
-    SpvRayFlagsSkipTrianglesKHRMask = 0x00000100,
-    SpvRayFlagsSkipAABBsKHRMask = 0x00000200,
-} SpvRayFlagsMask;
-
-typedef enum SpvRayQueryIntersection_ {
-    SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
-    SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
-    SpvRayQueryIntersectionMax = 0x7fffffff,
-} SpvRayQueryIntersection;
-
-typedef enum SpvRayQueryCommittedIntersectionType_ {
-    SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
-    SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,
-    SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,
-    SpvRayQueryCommittedIntersectionTypeMax = 0x7fffffff,
-} SpvRayQueryCommittedIntersectionType;
-
-typedef enum SpvRayQueryCandidateIntersectionType_ {
-    SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,
-    SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
-    SpvRayQueryCandidateIntersectionTypeMax = 0x7fffffff,
-} SpvRayQueryCandidateIntersectionType;
-
-typedef enum SpvFragmentShadingRateShift_ {
-    SpvFragmentShadingRateVertical2PixelsShift = 0,
-    SpvFragmentShadingRateVertical4PixelsShift = 1,
-    SpvFragmentShadingRateHorizontal2PixelsShift = 2,
-    SpvFragmentShadingRateHorizontal4PixelsShift = 3,
-    SpvFragmentShadingRateMax = 0x7fffffff,
-} SpvFragmentShadingRateShift;
-
-typedef enum SpvFragmentShadingRateMask_ {
-    SpvFragmentShadingRateMaskNone = 0,
-    SpvFragmentShadingRateVertical2PixelsMask = 0x00000001,
-    SpvFragmentShadingRateVertical4PixelsMask = 0x00000002,
-    SpvFragmentShadingRateHorizontal2PixelsMask = 0x00000004,
-    SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
-} SpvFragmentShadingRateMask;
-
-typedef enum SpvFPDenormMode_ {
-    SpvFPDenormModePreserve = 0,
-    SpvFPDenormModeFlushToZero = 1,
-    SpvFPDenormModeMax = 0x7fffffff,
-} SpvFPDenormMode;
-
-typedef enum SpvFPOperationMode_ {
-    SpvFPOperationModeIEEE = 0,
-    SpvFPOperationModeALT = 1,
-    SpvFPOperationModeMax = 0x7fffffff,
-} SpvFPOperationMode;
-
-typedef enum SpvQuantizationModes_ {
-    SpvQuantizationModesTRN = 0,
-    SpvQuantizationModesTRN_ZERO = 1,
-    SpvQuantizationModesRND = 2,
-    SpvQuantizationModesRND_ZERO = 3,
-    SpvQuantizationModesRND_INF = 4,
-    SpvQuantizationModesRND_MIN_INF = 5,
-    SpvQuantizationModesRND_CONV = 6,
-    SpvQuantizationModesRND_CONV_ODD = 7,
-    SpvQuantizationModesMax = 0x7fffffff,
-} SpvQuantizationModes;
-
-typedef enum SpvOverflowModes_ {
-    SpvOverflowModesWRAP = 0,
-    SpvOverflowModesSAT = 1,
-    SpvOverflowModesSAT_ZERO = 2,
-    SpvOverflowModesSAT_SYM = 3,
-    SpvOverflowModesMax = 0x7fffffff,
-} SpvOverflowModes;
-
-typedef enum SpvPackedVectorFormat_ {
-    SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0,
-    SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
-    SpvPackedVectorFormatMax = 0x7fffffff,
-} SpvPackedVectorFormat;
-
-typedef enum SpvOp_ {
-    SpvOpNop = 0,
-    SpvOpUndef = 1,
-    SpvOpSourceContinued = 2,
-    SpvOpSource = 3,
-    SpvOpSourceExtension = 4,
-    SpvOpName = 5,
-    SpvOpMemberName = 6,
-    SpvOpString = 7,
-    SpvOpLine = 8,
-    SpvOpExtension = 10,
-    SpvOpExtInstImport = 11,
-    SpvOpExtInst = 12,
-    SpvOpMemoryModel = 14,
-    SpvOpEntryPoint = 15,
-    SpvOpExecutionMode = 16,
-    SpvOpCapability = 17,
-    SpvOpTypeVoid = 19,
-    SpvOpTypeBool = 20,
-    SpvOpTypeInt = 21,
-    SpvOpTypeFloat = 22,
-    SpvOpTypeVector = 23,
-    SpvOpTypeMatrix = 24,
-    SpvOpTypeImage = 25,
-    SpvOpTypeSampler = 26,
-    SpvOpTypeSampledImage = 27,
-    SpvOpTypeArray = 28,
-    SpvOpTypeRuntimeArray = 29,
-    SpvOpTypeStruct = 30,
-    SpvOpTypeOpaque = 31,
-    SpvOpTypePointer = 32,
-    SpvOpTypeFunction = 33,
-    SpvOpTypeEvent = 34,
-    SpvOpTypeDeviceEvent = 35,
-    SpvOpTypeReserveId = 36,
-    SpvOpTypeQueue = 37,
-    SpvOpTypePipe = 38,
-    SpvOpTypeForwardPointer = 39,
-    SpvOpConstantTrue = 41,
-    SpvOpConstantFalse = 42,
-    SpvOpConstant = 43,
-    SpvOpConstantComposite = 44,
-    SpvOpConstantSampler = 45,
-    SpvOpConstantNull = 46,
-    SpvOpSpecConstantTrue = 48,
-    SpvOpSpecConstantFalse = 49,
-    SpvOpSpecConstant = 50,
-    SpvOpSpecConstantComposite = 51,
-    SpvOpSpecConstantOp = 52,
-    SpvOpFunction = 54,
-    SpvOpFunctionParameter = 55,
-    SpvOpFunctionEnd = 56,
-    SpvOpFunctionCall = 57,
-    SpvOpVariable = 59,
-    SpvOpImageTexelPointer = 60,
-    SpvOpLoad = 61,
-    SpvOpStore = 62,
-    SpvOpCopyMemory = 63,
-    SpvOpCopyMemorySized = 64,
-    SpvOpAccessChain = 65,
-    SpvOpInBoundsAccessChain = 66,
-    SpvOpPtrAccessChain = 67,
-    SpvOpArrayLength = 68,
-    SpvOpGenericPtrMemSemantics = 69,
-    SpvOpInBoundsPtrAccessChain = 70,
-    SpvOpDecorate = 71,
-    SpvOpMemberDecorate = 72,
-    SpvOpDecorationGroup = 73,
-    SpvOpGroupDecorate = 74,
-    SpvOpGroupMemberDecorate = 75,
-    SpvOpVectorExtractDynamic = 77,
-    SpvOpVectorInsertDynamic = 78,
-    SpvOpVectorShuffle = 79,
-    SpvOpCompositeConstruct = 80,
-    SpvOpCompositeExtract = 81,
-    SpvOpCompositeInsert = 82,
-    SpvOpCopyObject = 83,
-    SpvOpTranspose = 84,
-    SpvOpSampledImage = 86,
-    SpvOpImageSampleImplicitLod = 87,
-    SpvOpImageSampleExplicitLod = 88,
-    SpvOpImageSampleDrefImplicitLod = 89,
-    SpvOpImageSampleDrefExplicitLod = 90,
-    SpvOpImageSampleProjImplicitLod = 91,
-    SpvOpImageSampleProjExplicitLod = 92,
-    SpvOpImageSampleProjDrefImplicitLod = 93,
-    SpvOpImageSampleProjDrefExplicitLod = 94,
-    SpvOpImageFetch = 95,
-    SpvOpImageGather = 96,
-    SpvOpImageDrefGather = 97,
-    SpvOpImageRead = 98,
-    SpvOpImageWrite = 99,
-    SpvOpImage = 100,
-    SpvOpImageQueryFormat = 101,
-    SpvOpImageQueryOrder = 102,
-    SpvOpImageQuerySizeLod = 103,
-    SpvOpImageQuerySize = 104,
-    SpvOpImageQueryLod = 105,
-    SpvOpImageQueryLevels = 106,
-    SpvOpImageQuerySamples = 107,
-    SpvOpConvertFToU = 109,
-    SpvOpConvertFToS = 110,
-    SpvOpConvertSToF = 111,
-    SpvOpConvertUToF = 112,
-    SpvOpUConvert = 113,
-    SpvOpSConvert = 114,
-    SpvOpFConvert = 115,
-    SpvOpQuantizeToF16 = 116,
-    SpvOpConvertPtrToU = 117,
-    SpvOpSatConvertSToU = 118,
-    SpvOpSatConvertUToS = 119,
-    SpvOpConvertUToPtr = 120,
-    SpvOpPtrCastToGeneric = 121,
-    SpvOpGenericCastToPtr = 122,
-    SpvOpGenericCastToPtrExplicit = 123,
-    SpvOpBitcast = 124,
-    SpvOpSNegate = 126,
-    SpvOpFNegate = 127,
-    SpvOpIAdd = 128,
-    SpvOpFAdd = 129,
-    SpvOpISub = 130,
-    SpvOpFSub = 131,
-    SpvOpIMul = 132,
-    SpvOpFMul = 133,
-    SpvOpUDiv = 134,
-    SpvOpSDiv = 135,
-    SpvOpFDiv = 136,
-    SpvOpUMod = 137,
-    SpvOpSRem = 138,
-    SpvOpSMod = 139,
-    SpvOpFRem = 140,
-    SpvOpFMod = 141,
-    SpvOpVectorTimesScalar = 142,
-    SpvOpMatrixTimesScalar = 143,
-    SpvOpVectorTimesMatrix = 144,
-    SpvOpMatrixTimesVector = 145,
-    SpvOpMatrixTimesMatrix = 146,
-    SpvOpOuterProduct = 147,
-    SpvOpDot = 148,
-    SpvOpIAddCarry = 149,
-    SpvOpISubBorrow = 150,
-    SpvOpUMulExtended = 151,
-    SpvOpSMulExtended = 152,
-    SpvOpAny = 154,
-    SpvOpAll = 155,
-    SpvOpIsNan = 156,
-    SpvOpIsInf = 157,
-    SpvOpIsFinite = 158,
-    SpvOpIsNormal = 159,
-    SpvOpSignBitSet = 160,
-    SpvOpLessOrGreater = 161,
-    SpvOpOrdered = 162,
-    SpvOpUnordered = 163,
-    SpvOpLogicalEqual = 164,
-    SpvOpLogicalNotEqual = 165,
-    SpvOpLogicalOr = 166,
-    SpvOpLogicalAnd = 167,
-    SpvOpLogicalNot = 168,
-    SpvOpSelect = 169,
-    SpvOpIEqual = 170,
-    SpvOpINotEqual = 171,
-    SpvOpUGreaterThan = 172,
-    SpvOpSGreaterThan = 173,
-    SpvOpUGreaterThanEqual = 174,
-    SpvOpSGreaterThanEqual = 175,
-    SpvOpULessThan = 176,
-    SpvOpSLessThan = 177,
-    SpvOpULessThanEqual = 178,
-    SpvOpSLessThanEqual = 179,
-    SpvOpFOrdEqual = 180,
-    SpvOpFUnordEqual = 181,
-    SpvOpFOrdNotEqual = 182,
-    SpvOpFUnordNotEqual = 183,
-    SpvOpFOrdLessThan = 184,
-    SpvOpFUnordLessThan = 185,
-    SpvOpFOrdGreaterThan = 186,
-    SpvOpFUnordGreaterThan = 187,
-    SpvOpFOrdLessThanEqual = 188,
-    SpvOpFUnordLessThanEqual = 189,
-    SpvOpFOrdGreaterThanEqual = 190,
-    SpvOpFUnordGreaterThanEqual = 191,
-    SpvOpShiftRightLogical = 194,
-    SpvOpShiftRightArithmetic = 195,
-    SpvOpShiftLeftLogical = 196,
-    SpvOpBitwiseOr = 197,
-    SpvOpBitwiseXor = 198,
-    SpvOpBitwiseAnd = 199,
-    SpvOpNot = 200,
-    SpvOpBitFieldInsert = 201,
-    SpvOpBitFieldSExtract = 202,
-    SpvOpBitFieldUExtract = 203,
-    SpvOpBitReverse = 204,
-    SpvOpBitCount = 205,
-    SpvOpDPdx = 207,
-    SpvOpDPdy = 208,
-    SpvOpFwidth = 209,
-    SpvOpDPdxFine = 210,
-    SpvOpDPdyFine = 211,
-    SpvOpFwidthFine = 212,
-    SpvOpDPdxCoarse = 213,
-    SpvOpDPdyCoarse = 214,
-    SpvOpFwidthCoarse = 215,
-    SpvOpEmitVertex = 218,
-    SpvOpEndPrimitive = 219,
-    SpvOpEmitStreamVertex = 220,
-    SpvOpEndStreamPrimitive = 221,
-    SpvOpControlBarrier = 224,
-    SpvOpMemoryBarrier = 225,
-    SpvOpAtomicLoad = 227,
-    SpvOpAtomicStore = 228,
-    SpvOpAtomicExchange = 229,
-    SpvOpAtomicCompareExchange = 230,
-    SpvOpAtomicCompareExchangeWeak = 231,
-    SpvOpAtomicIIncrement = 232,
-    SpvOpAtomicIDecrement = 233,
-    SpvOpAtomicIAdd = 234,
-    SpvOpAtomicISub = 235,
-    SpvOpAtomicSMin = 236,
-    SpvOpAtomicUMin = 237,
-    SpvOpAtomicSMax = 238,
-    SpvOpAtomicUMax = 239,
-    SpvOpAtomicAnd = 240,
-    SpvOpAtomicOr = 241,
-    SpvOpAtomicXor = 242,
-    SpvOpPhi = 245,
-    SpvOpLoopMerge = 246,
-    SpvOpSelectionMerge = 247,
-    SpvOpLabel = 248,
-    SpvOpBranch = 249,
-    SpvOpBranchConditional = 250,
-    SpvOpSwitch = 251,
-    SpvOpKill = 252,
-    SpvOpReturn = 253,
-    SpvOpReturnValue = 254,
-    SpvOpUnreachable = 255,
-    SpvOpLifetimeStart = 256,
-    SpvOpLifetimeStop = 257,
-    SpvOpGroupAsyncCopy = 259,
-    SpvOpGroupWaitEvents = 260,
-    SpvOpGroupAll = 261,
-    SpvOpGroupAny = 262,
-    SpvOpGroupBroadcast = 263,
-    SpvOpGroupIAdd = 264,
-    SpvOpGroupFAdd = 265,
-    SpvOpGroupFMin = 266,
-    SpvOpGroupUMin = 267,
-    SpvOpGroupSMin = 268,
-    SpvOpGroupFMax = 269,
-    SpvOpGroupUMax = 270,
-    SpvOpGroupSMax = 271,
-    SpvOpReadPipe = 274,
-    SpvOpWritePipe = 275,
-    SpvOpReservedReadPipe = 276,
-    SpvOpReservedWritePipe = 277,
-    SpvOpReserveReadPipePackets = 278,
-    SpvOpReserveWritePipePackets = 279,
-    SpvOpCommitReadPipe = 280,
-    SpvOpCommitWritePipe = 281,
-    SpvOpIsValidReserveId = 282,
-    SpvOpGetNumPipePackets = 283,
-    SpvOpGetMaxPipePackets = 284,
-    SpvOpGroupReserveReadPipePackets = 285,
-    SpvOpGroupReserveWritePipePackets = 286,
-    SpvOpGroupCommitReadPipe = 287,
-    SpvOpGroupCommitWritePipe = 288,
-    SpvOpEnqueueMarker = 291,
-    SpvOpEnqueueKernel = 292,
-    SpvOpGetKernelNDrangeSubGroupCount = 293,
-    SpvOpGetKernelNDrangeMaxSubGroupSize = 294,
-    SpvOpGetKernelWorkGroupSize = 295,
-    SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296,
-    SpvOpRetainEvent = 297,
-    SpvOpReleaseEvent = 298,
-    SpvOpCreateUserEvent = 299,
-    SpvOpIsValidEvent = 300,
-    SpvOpSetUserEventStatus = 301,
-    SpvOpCaptureEventProfilingInfo = 302,
-    SpvOpGetDefaultQueue = 303,
-    SpvOpBuildNDRange = 304,
-    SpvOpImageSparseSampleImplicitLod = 305,
-    SpvOpImageSparseSampleExplicitLod = 306,
-    SpvOpImageSparseSampleDrefImplicitLod = 307,
-    SpvOpImageSparseSampleDrefExplicitLod = 308,
-    SpvOpImageSparseSampleProjImplicitLod = 309,
-    SpvOpImageSparseSampleProjExplicitLod = 310,
-    SpvOpImageSparseSampleProjDrefImplicitLod = 311,
-    SpvOpImageSparseSampleProjDrefExplicitLod = 312,
-    SpvOpImageSparseFetch = 313,
-    SpvOpImageSparseGather = 314,
-    SpvOpImageSparseDrefGather = 315,
-    SpvOpImageSparseTexelsResident = 316,
-    SpvOpNoLine = 317,
-    SpvOpAtomicFlagTestAndSet = 318,
-    SpvOpAtomicFlagClear = 319,
-    SpvOpImageSparseRead = 320,
-    SpvOpSizeOf = 321,
-    SpvOpTypePipeStorage = 322,
-    SpvOpConstantPipeStorage = 323,
-    SpvOpCreatePipeFromPipeStorage = 324,
-    SpvOpGetKernelLocalSizeForSubgroupCount = 325,
-    SpvOpGetKernelMaxNumSubgroups = 326,
-    SpvOpTypeNamedBarrier = 327,
-    SpvOpNamedBarrierInitialize = 328,
-    SpvOpMemoryNamedBarrier = 329,
-    SpvOpModuleProcessed = 330,
-    SpvOpExecutionModeId = 331,
-    SpvOpDecorateId = 332,
-    SpvOpGroupNonUniformElect = 333,
-    SpvOpGroupNonUniformAll = 334,
-    SpvOpGroupNonUniformAny = 335,
-    SpvOpGroupNonUniformAllEqual = 336,
-    SpvOpGroupNonUniformBroadcast = 337,
-    SpvOpGroupNonUniformBroadcastFirst = 338,
-    SpvOpGroupNonUniformBallot = 339,
-    SpvOpGroupNonUniformInverseBallot = 340,
-    SpvOpGroupNonUniformBallotBitExtract = 341,
-    SpvOpGroupNonUniformBallotBitCount = 342,
-    SpvOpGroupNonUniformBallotFindLSB = 343,
-    SpvOpGroupNonUniformBallotFindMSB = 344,
-    SpvOpGroupNonUniformShuffle = 345,
-    SpvOpGroupNonUniformShuffleXor = 346,
-    SpvOpGroupNonUniformShuffleUp = 347,
-    SpvOpGroupNonUniformShuffleDown = 348,
-    SpvOpGroupNonUniformIAdd = 349,
-    SpvOpGroupNonUniformFAdd = 350,
-    SpvOpGroupNonUniformIMul = 351,
-    SpvOpGroupNonUniformFMul = 352,
-    SpvOpGroupNonUniformSMin = 353,
-    SpvOpGroupNonUniformUMin = 354,
-    SpvOpGroupNonUniformFMin = 355,
-    SpvOpGroupNonUniformSMax = 356,
-    SpvOpGroupNonUniformUMax = 357,
-    SpvOpGroupNonUniformFMax = 358,
-    SpvOpGroupNonUniformBitwiseAnd = 359,
-    SpvOpGroupNonUniformBitwiseOr = 360,
-    SpvOpGroupNonUniformBitwiseXor = 361,
-    SpvOpGroupNonUniformLogicalAnd = 362,
-    SpvOpGroupNonUniformLogicalOr = 363,
-    SpvOpGroupNonUniformLogicalXor = 364,
-    SpvOpGroupNonUniformQuadBroadcast = 365,
-    SpvOpGroupNonUniformQuadSwap = 366,
-    SpvOpCopyLogical = 400,
-    SpvOpPtrEqual = 401,
-    SpvOpPtrNotEqual = 402,
-    SpvOpPtrDiff = 403,
-    SpvOpTerminateInvocation = 4416,
-    SpvOpSubgroupBallotKHR = 4421,
-    SpvOpSubgroupFirstInvocationKHR = 4422,
-    SpvOpSubgroupAllKHR = 4428,
-    SpvOpSubgroupAnyKHR = 4429,
-    SpvOpSubgroupAllEqualKHR = 4430,
-    SpvOpGroupNonUniformRotateKHR = 4431,
-    SpvOpSubgroupReadInvocationKHR = 4432,
-    SpvOpTraceRayKHR = 4445,
-    SpvOpExecuteCallableKHR = 4446,
-    SpvOpConvertUToAccelerationStructureKHR = 4447,
-    SpvOpIgnoreIntersectionKHR = 4448,
-    SpvOpTerminateRayKHR = 4449,
-    SpvOpSDot = 4450,
-    SpvOpSDotKHR = 4450,
-    SpvOpUDot = 4451,
-    SpvOpUDotKHR = 4451,
-    SpvOpSUDot = 4452,
-    SpvOpSUDotKHR = 4452,
-    SpvOpSDotAccSat = 4453,
-    SpvOpSDotAccSatKHR = 4453,
-    SpvOpUDotAccSat = 4454,
-    SpvOpUDotAccSatKHR = 4454,
-    SpvOpSUDotAccSat = 4455,
-    SpvOpSUDotAccSatKHR = 4455,
-    SpvOpTypeRayQueryKHR = 4472,
-    SpvOpRayQueryInitializeKHR = 4473,
-    SpvOpRayQueryTerminateKHR = 4474,
-    SpvOpRayQueryGenerateIntersectionKHR = 4475,
-    SpvOpRayQueryConfirmIntersectionKHR = 4476,
-    SpvOpRayQueryProceedKHR = 4477,
-    SpvOpRayQueryGetIntersectionTypeKHR = 4479,
-    SpvOpGroupIAddNonUniformAMD = 5000,
-    SpvOpGroupFAddNonUniformAMD = 5001,
-    SpvOpGroupFMinNonUniformAMD = 5002,
-    SpvOpGroupUMinNonUniformAMD = 5003,
-    SpvOpGroupSMinNonUniformAMD = 5004,
-    SpvOpGroupFMaxNonUniformAMD = 5005,
-    SpvOpGroupUMaxNonUniformAMD = 5006,
-    SpvOpGroupSMaxNonUniformAMD = 5007,
-    SpvOpFragmentMaskFetchAMD = 5011,
-    SpvOpFragmentFetchAMD = 5012,
-    SpvOpReadClockKHR = 5056,
-    SpvOpImageSampleFootprintNV = 5283,
-    SpvOpEmitMeshTasksEXT = 5294,
-    SpvOpSetMeshOutputsEXT = 5295,
-    SpvOpGroupNonUniformPartitionNV = 5296,
-    SpvOpWritePackedPrimitiveIndices4x8NV = 5299,
-    SpvOpReportIntersectionKHR = 5334,
-    SpvOpReportIntersectionNV = 5334,
-    SpvOpIgnoreIntersectionNV = 5335,
-    SpvOpTerminateRayNV = 5336,
-    SpvOpTraceNV = 5337,
-    SpvOpTraceMotionNV = 5338,
-    SpvOpTraceRayMotionNV = 5339,
-    SpvOpTypeAccelerationStructureKHR = 5341,
-    SpvOpTypeAccelerationStructureNV = 5341,
-    SpvOpExecuteCallableNV = 5344,
-    SpvOpTypeCooperativeMatrixNV = 5358,
-    SpvOpCooperativeMatrixLoadNV = 5359,
-    SpvOpCooperativeMatrixStoreNV = 5360,
-    SpvOpCooperativeMatrixMulAddNV = 5361,
-    SpvOpCooperativeMatrixLengthNV = 5362,
-    SpvOpBeginInvocationInterlockEXT = 5364,
-    SpvOpEndInvocationInterlockEXT = 5365,
-    SpvOpDemoteToHelperInvocation = 5380,
-    SpvOpDemoteToHelperInvocationEXT = 5380,
-    SpvOpIsHelperInvocationEXT = 5381,
-    SpvOpConvertUToImageNV = 5391,
-    SpvOpConvertUToSamplerNV = 5392,
-    SpvOpConvertImageToUNV = 5393,
-    SpvOpConvertSamplerToUNV = 5394,
-    SpvOpConvertUToSampledImageNV = 5395,
-    SpvOpConvertSampledImageToUNV = 5396,
-    SpvOpSamplerImageAddressingModeNV = 5397,
-    SpvOpSubgroupShuffleINTEL = 5571,
-    SpvOpSubgroupShuffleDownINTEL = 5572,
-    SpvOpSubgroupShuffleUpINTEL = 5573,
-    SpvOpSubgroupShuffleXorINTEL = 5574,
-    SpvOpSubgroupBlockReadINTEL = 5575,
-    SpvOpSubgroupBlockWriteINTEL = 5576,
-    SpvOpSubgroupImageBlockReadINTEL = 5577,
-    SpvOpSubgroupImageBlockWriteINTEL = 5578,
-    SpvOpSubgroupImageMediaBlockReadINTEL = 5580,
-    SpvOpSubgroupImageMediaBlockWriteINTEL = 5581,
-    SpvOpUCountLeadingZerosINTEL = 5585,
-    SpvOpUCountTrailingZerosINTEL = 5586,
-    SpvOpAbsISubINTEL = 5587,
-    SpvOpAbsUSubINTEL = 5588,
-    SpvOpIAddSatINTEL = 5589,
-    SpvOpUAddSatINTEL = 5590,
-    SpvOpIAverageINTEL = 5591,
-    SpvOpUAverageINTEL = 5592,
-    SpvOpIAverageRoundedINTEL = 5593,
-    SpvOpUAverageRoundedINTEL = 5594,
-    SpvOpISubSatINTEL = 5595,
-    SpvOpUSubSatINTEL = 5596,
-    SpvOpIMul32x16INTEL = 5597,
-    SpvOpUMul32x16INTEL = 5598,
-    SpvOpConstantFunctionPointerINTEL = 5600,
-    SpvOpFunctionPointerCallINTEL = 5601,
-    SpvOpAsmTargetINTEL = 5609,
-    SpvOpAsmINTEL = 5610,
-    SpvOpAsmCallINTEL = 5611,
-    SpvOpAtomicFMinEXT = 5614,
-    SpvOpAtomicFMaxEXT = 5615,
-    SpvOpAssumeTrueKHR = 5630,
-    SpvOpExpectKHR = 5631,
-    SpvOpDecorateString = 5632,
-    SpvOpDecorateStringGOOGLE = 5632,
-    SpvOpMemberDecorateString = 5633,
-    SpvOpMemberDecorateStringGOOGLE = 5633,
-    SpvOpVmeImageINTEL = 5699,
-    SpvOpTypeVmeImageINTEL = 5700,
-    SpvOpTypeAvcImePayloadINTEL = 5701,
-    SpvOpTypeAvcRefPayloadINTEL = 5702,
-    SpvOpTypeAvcSicPayloadINTEL = 5703,
-    SpvOpTypeAvcMcePayloadINTEL = 5704,
-    SpvOpTypeAvcMceResultINTEL = 5705,
-    SpvOpTypeAvcImeResultINTEL = 5706,
-    SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
-    SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
-    SpvOpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
-    SpvOpTypeAvcImeDualReferenceStreaminINTEL = 5710,
-    SpvOpTypeAvcRefResultINTEL = 5711,
-    SpvOpTypeAvcSicResultINTEL = 5712,
-    SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
-    SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
-    SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
-    SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
-    SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
-    SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
-    SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
-    SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
-    SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
-    SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
-    SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
-    SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
-    SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
-    SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
-    SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
-    SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
-    SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
-    SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
-    SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
-    SpvOpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
-    SpvOpSubgroupAvcMceConvertToImeResultINTEL = 5733,
-    SpvOpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
-    SpvOpSubgroupAvcMceConvertToRefResultINTEL = 5735,
-    SpvOpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
-    SpvOpSubgroupAvcMceConvertToSicResultINTEL = 5737,
-    SpvOpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
-    SpvOpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
-    SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
-    SpvOpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
-    SpvOpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
-    SpvOpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
-    SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
-    SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
-    SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
-    SpvOpSubgroupAvcImeInitializeINTEL = 5747,
-    SpvOpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
-    SpvOpSubgroupAvcImeSetDualReferenceINTEL = 5749,
-    SpvOpSubgroupAvcImeRefWindowSizeINTEL = 5750,
-    SpvOpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
-    SpvOpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
-    SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
-    SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
-    SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
-    SpvOpSubgroupAvcImeSetWeightedSadINTEL = 5756,
-    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
-    SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
-    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
-    SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
-    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
-    SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
-    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
-    SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
-    SpvOpSubgroupAvcImeConvertToMceResultINTEL = 5765,
-    SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
-    SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
-    SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
-    SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
-    SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
-    SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
-    SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
-    SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
-    SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
-    SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
-    SpvOpSubgroupAvcImeGetBorderReachedINTEL = 5776,
-    SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
-    SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
-    SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
-    SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
-    SpvOpSubgroupAvcFmeInitializeINTEL = 5781,
-    SpvOpSubgroupAvcBmeInitializeINTEL = 5782,
-    SpvOpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
-    SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
-    SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
-    SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
-    SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
-    SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
-    SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
-    SpvOpSubgroupAvcRefConvertToMceResultINTEL = 5790,
-    SpvOpSubgroupAvcSicInitializeINTEL = 5791,
-    SpvOpSubgroupAvcSicConfigureSkcINTEL = 5792,
-    SpvOpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
-    SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
-    SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
-    SpvOpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
-    SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
-    SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
-    SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
-    SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
-    SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
-    SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
-    SpvOpSubgroupAvcSicEvaluateIpeINTEL = 5803,
-    SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
-    SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
-    SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
-    SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
-    SpvOpSubgroupAvcSicConvertToMceResultINTEL = 5808,
-    SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
-    SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
-    SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
-    SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
-    SpvOpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
-    SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
-    SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
-    SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
-    SpvOpVariableLengthArrayINTEL = 5818,
-    SpvOpSaveMemoryINTEL = 5819,
-    SpvOpRestoreMemoryINTEL = 5820,
-    SpvOpArbitraryFloatSinCosPiINTEL = 5840,
-    SpvOpArbitraryFloatCastINTEL = 5841,
-    SpvOpArbitraryFloatCastFromIntINTEL = 5842,
-    SpvOpArbitraryFloatCastToIntINTEL = 5843,
-    SpvOpArbitraryFloatAddINTEL = 5846,
-    SpvOpArbitraryFloatSubINTEL = 5847,
-    SpvOpArbitraryFloatMulINTEL = 5848,
-    SpvOpArbitraryFloatDivINTEL = 5849,
-    SpvOpArbitraryFloatGTINTEL = 5850,
-    SpvOpArbitraryFloatGEINTEL = 5851,
-    SpvOpArbitraryFloatLTINTEL = 5852,
-    SpvOpArbitraryFloatLEINTEL = 5853,
-    SpvOpArbitraryFloatEQINTEL = 5854,
-    SpvOpArbitraryFloatRecipINTEL = 5855,
-    SpvOpArbitraryFloatRSqrtINTEL = 5856,
-    SpvOpArbitraryFloatCbrtINTEL = 5857,
-    SpvOpArbitraryFloatHypotINTEL = 5858,
-    SpvOpArbitraryFloatSqrtINTEL = 5859,
-    SpvOpArbitraryFloatLogINTEL = 5860,
-    SpvOpArbitraryFloatLog2INTEL = 5861,
-    SpvOpArbitraryFloatLog10INTEL = 5862,
-    SpvOpArbitraryFloatLog1pINTEL = 5863,
-    SpvOpArbitraryFloatExpINTEL = 5864,
-    SpvOpArbitraryFloatExp2INTEL = 5865,
-    SpvOpArbitraryFloatExp10INTEL = 5866,
-    SpvOpArbitraryFloatExpm1INTEL = 5867,
-    SpvOpArbitraryFloatSinINTEL = 5868,
-    SpvOpArbitraryFloatCosINTEL = 5869,
-    SpvOpArbitraryFloatSinCosINTEL = 5870,
-    SpvOpArbitraryFloatSinPiINTEL = 5871,
-    SpvOpArbitraryFloatCosPiINTEL = 5872,
-    SpvOpArbitraryFloatASinINTEL = 5873,
-    SpvOpArbitraryFloatASinPiINTEL = 5874,
-    SpvOpArbitraryFloatACosINTEL = 5875,
-    SpvOpArbitraryFloatACosPiINTEL = 5876,
-    SpvOpArbitraryFloatATanINTEL = 5877,
-    SpvOpArbitraryFloatATanPiINTEL = 5878,
-    SpvOpArbitraryFloatATan2INTEL = 5879,
-    SpvOpArbitraryFloatPowINTEL = 5880,
-    SpvOpArbitraryFloatPowRINTEL = 5881,
-    SpvOpArbitraryFloatPowNINTEL = 5882,
-    SpvOpLoopControlINTEL = 5887,
-    SpvOpAliasDomainDeclINTEL = 5911,
-    SpvOpAliasScopeDeclINTEL = 5912,
-    SpvOpAliasScopeListDeclINTEL = 5913,
-    SpvOpFixedSqrtINTEL = 5923,
-    SpvOpFixedRecipINTEL = 5924,
-    SpvOpFixedRsqrtINTEL = 5925,
-    SpvOpFixedSinINTEL = 5926,
-    SpvOpFixedCosINTEL = 5927,
-    SpvOpFixedSinCosINTEL = 5928,
-    SpvOpFixedSinPiINTEL = 5929,
-    SpvOpFixedCosPiINTEL = 5930,
-    SpvOpFixedSinCosPiINTEL = 5931,
-    SpvOpFixedLogINTEL = 5932,
-    SpvOpFixedExpINTEL = 5933,
-    SpvOpPtrCastToCrossWorkgroupINTEL = 5934,
-    SpvOpCrossWorkgroupCastToPtrINTEL = 5938,
-    SpvOpReadPipeBlockingINTEL = 5946,
-    SpvOpWritePipeBlockingINTEL = 5947,
-    SpvOpFPGARegINTEL = 5949,
-    SpvOpRayQueryGetRayTMinKHR = 6016,
-    SpvOpRayQueryGetRayFlagsKHR = 6017,
-    SpvOpRayQueryGetIntersectionTKHR = 6018,
-    SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
-    SpvOpRayQueryGetIntersectionInstanceIdKHR = 6020,
-    SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
-    SpvOpRayQueryGetIntersectionGeometryIndexKHR = 6022,
-    SpvOpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
-    SpvOpRayQueryGetIntersectionBarycentricsKHR = 6024,
-    SpvOpRayQueryGetIntersectionFrontFaceKHR = 6025,
-    SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
-    SpvOpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
-    SpvOpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
-    SpvOpRayQueryGetWorldRayDirectionKHR = 6029,
-    SpvOpRayQueryGetWorldRayOriginKHR = 6030,
-    SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
-    SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
-    SpvOpAtomicFAddEXT = 6035,
-    SpvOpTypeBufferSurfaceINTEL = 6086,
-    SpvOpTypeStructContinuedINTEL = 6090,
-    SpvOpConstantCompositeContinuedINTEL = 6091,
-    SpvOpSpecConstantCompositeContinuedINTEL = 6092,
-    SpvOpControlBarrierArriveINTEL = 6142,
-    SpvOpControlBarrierWaitINTEL = 6143,
-    SpvOpGroupIMulKHR = 6401,
-    SpvOpGroupFMulKHR = 6402,
-    SpvOpGroupBitwiseAndKHR = 6403,
-    SpvOpGroupBitwiseOrKHR = 6404,
-    SpvOpGroupBitwiseXorKHR = 6405,
-    SpvOpGroupLogicalAndKHR = 6406,
-    SpvOpGroupLogicalOrKHR = 6407,
-    SpvOpGroupLogicalXorKHR = 6408,
-    SpvOpMax = 0x7fffffff,
-} SpvOp;
-
-#ifdef SPV_ENABLE_UTILITY_CODE
-#ifndef __cplusplus
-#include <stdbool.h>
-#endif
-inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultType) {
-    *hasResult = *hasResultType = false;
-    switch (opcode) {
-    default: /* unknown opcode */ break;
-    case SpvOpNop: *hasResult = false; *hasResultType = false; break;
-    case SpvOpUndef: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSourceContinued: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSource: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSourceExtension: *hasResult = false; *hasResultType = false; break;
-    case SpvOpName: *hasResult = false; *hasResultType = false; break;
-    case SpvOpMemberName: *hasResult = false; *hasResultType = false; break;
-    case SpvOpString: *hasResult = true; *hasResultType = false; break;
-    case SpvOpLine: *hasResult = false; *hasResultType = false; break;
-    case SpvOpExtension: *hasResult = false; *hasResultType = false; break;
-    case SpvOpExtInstImport: *hasResult = true; *hasResultType = false; break;
-    case SpvOpExtInst: *hasResult = true; *hasResultType = true; break;
-    case SpvOpMemoryModel: *hasResult = false; *hasResultType = false; break;
-    case SpvOpEntryPoint: *hasResult = false; *hasResultType = false; break;
-    case SpvOpExecutionMode: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCapability: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTypeVoid: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeBool: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeInt: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeFloat: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeVector: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeMatrix: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeImage: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeSampler: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeArray: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeStruct: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeOpaque: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypePointer: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeFunction: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeEvent: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeReserveId: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeQueue: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypePipe: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
-    case SpvOpConstantTrue: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConstantFalse: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConstant: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConstantComposite: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConstantSampler: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConstantNull: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSpecConstant: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFunction: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFunctionParameter: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFunctionEnd: *hasResult = false; *hasResultType = false; break;
-    case SpvOpFunctionCall: *hasResult = true; *hasResultType = true; break;
-    case SpvOpVariable: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLoad: *hasResult = true; *hasResultType = true; break;
-    case SpvOpStore: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCopyMemory: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
-    case SpvOpAccessChain: *hasResult = true; *hasResultType = true; break;
-    case SpvOpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArrayLength: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
-    case SpvOpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDecorate: *hasResult = false; *hasResultType = false; break;
-    case SpvOpMemberDecorate: *hasResult = false; *hasResultType = false; break;
-    case SpvOpDecorationGroup: *hasResult = true; *hasResultType = false; break;
-    case SpvOpGroupDecorate: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
-    case SpvOpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
-    case SpvOpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
-    case SpvOpVectorShuffle: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCompositeExtract: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCompositeInsert: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCopyObject: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTranspose: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSampledImage: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageFetch: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageGather: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageDrefGather: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageRead: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageWrite: *hasResult = false; *hasResultType = false; break;
-    case SpvOpImage: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQuerySize: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQueryLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertFToU: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertFToS: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertSToF: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertUToF: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUConvert: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSConvert: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFConvert: *hasResult = true; *hasResultType = true; break;
-    case SpvOpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitcast: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSNegate: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFNegate: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpISub: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFSub: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIMul: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFMul: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUDiv: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSDiv: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFDiv: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUMod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSRem: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSMod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFRem: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFMod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
-    case SpvOpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
-    case SpvOpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
-    case SpvOpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
-    case SpvOpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
-    case SpvOpOuterProduct: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIAddCarry: *hasResult = true; *hasResultType = true; break;
-    case SpvOpISubBorrow: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUMulExtended: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSMulExtended: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAny: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAll: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIsNan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIsInf: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIsFinite: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIsNormal: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSignBitSet: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLessOrGreater: *hasResult = true; *hasResultType = true; break;
-    case SpvOpOrdered: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUnordered: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLogicalEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLogicalOr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLogicalAnd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLogicalNot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSelect: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpINotEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpULessThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSLessThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpULessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFOrdEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFUnordEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
-    case SpvOpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
-    case SpvOpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitwiseOr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitwiseXor: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpNot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitReverse: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBitCount: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDPdx: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDPdy: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFwidth: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDPdxFine: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDPdyFine: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFwidthFine: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
-    case SpvOpEmitVertex: *hasResult = false; *hasResultType = false; break;
-    case SpvOpEndPrimitive: *hasResult = false; *hasResultType = false; break;
-    case SpvOpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
-    case SpvOpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
-    case SpvOpControlBarrier: *hasResult = false; *hasResultType = false; break;
-    case SpvOpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
-    case SpvOpAtomicLoad: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicStore: *hasResult = false; *hasResultType = false; break;
-    case SpvOpAtomicExchange: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicISub: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicSMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicUMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicSMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicUMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicAnd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicOr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicXor: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPhi: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLoopMerge: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSelectionMerge: *hasResult = false; *hasResultType = false; break;
-    case SpvOpLabel: *hasResult = true; *hasResultType = false; break;
-    case SpvOpBranch: *hasResult = false; *hasResultType = false; break;
-    case SpvOpBranchConditional: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSwitch: *hasResult = false; *hasResultType = false; break;
-    case SpvOpKill: *hasResult = false; *hasResultType = false; break;
-    case SpvOpReturn: *hasResult = false; *hasResultType = false; break;
-    case SpvOpReturnValue: *hasResult = false; *hasResultType = false; break;
-    case SpvOpUnreachable: *hasResult = false; *hasResultType = false; break;
-    case SpvOpLifetimeStart: *hasResult = false; *hasResultType = false; break;
-    case SpvOpLifetimeStop: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupAll: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupAny: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupIAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupUMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupSMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupUMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupSMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReadPipe: *hasResult = true; *hasResultType = true; break;
-    case SpvOpWritePipe: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
-    case SpvOpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
-    case SpvOpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
-    case SpvOpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRetainEvent: *hasResult = false; *hasResultType = false; break;
-    case SpvOpReleaseEvent: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIsValidEvent: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBuildNDRange: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseGather: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
-    case SpvOpNoLine: *hasResult = false; *hasResultType = false; break;
-    case SpvOpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
-    case SpvOpImageSparseRead: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSizeOf: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
-    case SpvOpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
-    case SpvOpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
-    case SpvOpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
-    case SpvOpModuleProcessed: *hasResult = false; *hasResultType = false; break;
-    case SpvOpExecutionModeId: *hasResult = false; *hasResultType = false; break;
-    case SpvOpDecorateId: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCopyLogical: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSDot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUDot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSUDot: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
-    case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReadClockKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
-    case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
-    case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
-    case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
-    case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
-    case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
-    case SpvOpExpectKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break;
-    case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
-    case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
-    case SpvOpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
-    case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
-    case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
-    case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
-    }
-}
-#endif /* SPV_ENABLE_UTILITY_CODE */
-
-#endif
-

+ 0 - 2875
src/libraries/spirv_cross/spirv_cross_c.cpp

@@ -1,2875 +0,0 @@
-/*
- * Copyright 2019-2021 Hans-Kristian Arntzen
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * At your option, you may choose to accept this material under either:
- *  1. The Apache License, Version 2.0, found at <http://www.apache.org/licenses/LICENSE-2.0>, or
- *  2. The MIT License, found at <http://opensource.org/licenses/MIT>.
- */
-
-#include "spirv_cross_c.h"
-
-#if SPIRV_CROSS_C_API_CPP
-#include "spirv_cpp.hpp"
-#endif
-#if SPIRV_CROSS_C_API_GLSL
-#include "spirv_glsl.hpp"
-#else
-#include "spirv_cross.hpp"
-#endif
-#if SPIRV_CROSS_C_API_HLSL
-#include "spirv_hlsl.hpp"
-#endif
-#if SPIRV_CROSS_C_API_MSL
-#include "spirv_msl.hpp"
-#endif
-#if SPIRV_CROSS_C_API_REFLECT
-#include "spirv_reflect.hpp"
-#endif
-
-#ifdef HAVE_SPIRV_CROSS_GIT_VERSION
-#include "gitversion.h"
-#endif
-
-#include "spirv_parser.hpp"
-#include <memory>
-#include <new>
-#include <string.h>
-
-// clang-format off
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4996)
-#endif
-
-#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
-#define SPVC_BEGIN_SAFE_SCOPE try
-#else
-#define SPVC_BEGIN_SAFE_SCOPE
-#endif
-
-#ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS
-#define SPVC_END_SAFE_SCOPE(context, error) \
-	catch (const std::exception &e)         \
-	{                                       \
-		(context)->report_error(e.what());  \
-		return (error);                     \
-	}
-#else
-#define SPVC_END_SAFE_SCOPE(context, error)
-#endif
-
-using namespace std;
-using namespace SPIRV_CROSS_NAMESPACE;
-
-struct ScratchMemoryAllocation
-{
-	virtual ~ScratchMemoryAllocation() = default;
-};
-
-struct StringAllocation : ScratchMemoryAllocation
-{
-	explicit StringAllocation(const char *name)
-	    : str(name)
-	{
-	}
-
-	explicit StringAllocation(std::string name)
-	    : str(std::move(name))
-	{
-	}
-
-	std::string str;
-};
-
-template <typename T>
-struct TemporaryBuffer : ScratchMemoryAllocation
-{
-	SmallVector<T> buffer;
-};
-
-template <typename T, typename... Ts>
-static inline std::unique_ptr<T> spvc_allocate(Ts &&... ts)
-{
-	return std::unique_ptr<T>(new T(std::forward<Ts>(ts)...));
-}
-
-struct spvc_context_s
-{
-	string last_error;
-	SmallVector<unique_ptr<ScratchMemoryAllocation>> allocations;
-	const char *allocate_name(const std::string &name);
-
-	spvc_error_callback callback = nullptr;
-	void *callback_userdata = nullptr;
-	void report_error(std::string msg);
-};
-
-void spvc_context_s::report_error(std::string msg)
-{
-	last_error = std::move(msg);
-	if (callback)
-		callback(callback_userdata, last_error.c_str());
-}
-
-const char *spvc_context_s::allocate_name(const std::string &name)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto alloc = spvc_allocate<StringAllocation>(name);
-		auto *ret = alloc->str.c_str();
-		allocations.emplace_back(std::move(alloc));
-		return ret;
-	}
-	SPVC_END_SAFE_SCOPE(this, nullptr)
-}
-
-struct spvc_parsed_ir_s : ScratchMemoryAllocation
-{
-	spvc_context context = nullptr;
-	ParsedIR parsed;
-};
-
-struct spvc_compiler_s : ScratchMemoryAllocation
-{
-	spvc_context context = nullptr;
-	unique_ptr<Compiler> compiler;
-	spvc_backend backend = SPVC_BACKEND_NONE;
-};
-
-struct spvc_compiler_options_s : ScratchMemoryAllocation
-{
-	spvc_context context = nullptr;
-	uint32_t backend_flags = 0;
-#if SPIRV_CROSS_C_API_GLSL
-	CompilerGLSL::Options glsl;
-#endif
-#if SPIRV_CROSS_C_API_MSL
-	CompilerMSL::Options msl;
-#endif
-#if SPIRV_CROSS_C_API_HLSL
-	CompilerHLSL::Options hlsl;
-#endif
-};
-
-struct spvc_set_s : ScratchMemoryAllocation
-{
-	std::unordered_set<VariableID> set;
-};
-
-// Dummy-inherit to we can keep our opaque type handle type safe in C-land as well,
-// and avoid just throwing void * around.
-struct spvc_type_s : SPIRType
-{
-};
-
-struct spvc_constant_s : SPIRConstant
-{
-};
-
-struct spvc_resources_s : ScratchMemoryAllocation
-{
-	spvc_context context = nullptr;
-	SmallVector<spvc_reflected_resource> uniform_buffers;
-	SmallVector<spvc_reflected_resource> storage_buffers;
-	SmallVector<spvc_reflected_resource> stage_inputs;
-	SmallVector<spvc_reflected_resource> stage_outputs;
-	SmallVector<spvc_reflected_resource> subpass_inputs;
-	SmallVector<spvc_reflected_resource> storage_images;
-	SmallVector<spvc_reflected_resource> sampled_images;
-	SmallVector<spvc_reflected_resource> atomic_counters;
-	SmallVector<spvc_reflected_resource> push_constant_buffers;
-	SmallVector<spvc_reflected_resource> shader_record_buffers;
-	SmallVector<spvc_reflected_resource> separate_images;
-	SmallVector<spvc_reflected_resource> separate_samplers;
-	SmallVector<spvc_reflected_resource> acceleration_structures;
-	SmallVector<spvc_reflected_builtin_resource> builtin_inputs;
-	SmallVector<spvc_reflected_builtin_resource> builtin_outputs;
-
-	bool copy_resources(SmallVector<spvc_reflected_resource> &outputs, const SmallVector<Resource> &inputs);
-	bool copy_resources(SmallVector<spvc_reflected_builtin_resource> &outputs, const SmallVector<BuiltInResource> &inputs);
-	bool copy_resources(const ShaderResources &resources);
-};
-
-spvc_result spvc_context_create(spvc_context *context)
-{
-	auto *ctx = new (std::nothrow) spvc_context_s;
-	if (!ctx)
-		return SPVC_ERROR_OUT_OF_MEMORY;
-
-	*context = ctx;
-	return SPVC_SUCCESS;
-}
-
-void spvc_context_destroy(spvc_context context)
-{
-	delete context;
-}
-
-void spvc_context_release_allocations(spvc_context context)
-{
-	context->allocations.clear();
-}
-
-const char *spvc_context_get_last_error_string(spvc_context context)
-{
-	return context->last_error.c_str();
-}
-
-SPVC_PUBLIC_API void spvc_context_set_error_callback(spvc_context context, spvc_error_callback cb, void *userdata)
-{
-	context->callback = cb;
-	context->callback_userdata = userdata;
-}
-
-spvc_result spvc_context_parse_spirv(spvc_context context, const SpvId *spirv, size_t word_count,
-                                     spvc_parsed_ir *parsed_ir)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		std::unique_ptr<spvc_parsed_ir_s> pir(new (std::nothrow) spvc_parsed_ir_s);
-		if (!pir)
-		{
-			context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-
-		pir->context = context;
-		Parser parser(spirv, word_count);
-		parser.parse();
-		pir->parsed = std::move(parser.get_parsed_ir());
-		*parsed_ir = pir.get();
-		context->allocations.push_back(std::move(pir));
-	}
-	SPVC_END_SAFE_SCOPE(context, SPVC_ERROR_INVALID_SPIRV)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_context_create_compiler(spvc_context context, spvc_backend backend, spvc_parsed_ir parsed_ir,
-                                         spvc_capture_mode mode, spvc_compiler *compiler)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		std::unique_ptr<spvc_compiler_s> comp(new (std::nothrow) spvc_compiler_s);
-		if (!comp)
-		{
-			context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-		comp->backend = backend;
-		comp->context = context;
-
-		if (mode != SPVC_CAPTURE_MODE_COPY && mode != SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-		{
-			context->report_error("Invalid argument for capture mode.");
-			return SPVC_ERROR_INVALID_ARGUMENT;
-		}
-
-		switch (backend)
-		{
-		case SPVC_BACKEND_NONE:
-			if (mode == SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-				comp->compiler.reset(new Compiler(std::move(parsed_ir->parsed)));
-			else if (mode == SPVC_CAPTURE_MODE_COPY)
-				comp->compiler.reset(new Compiler(parsed_ir->parsed));
-			break;
-
-#if SPIRV_CROSS_C_API_GLSL
-		case SPVC_BACKEND_GLSL:
-			if (mode == SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-				comp->compiler.reset(new CompilerGLSL(std::move(parsed_ir->parsed)));
-			else if (mode == SPVC_CAPTURE_MODE_COPY)
-				comp->compiler.reset(new CompilerGLSL(parsed_ir->parsed));
-			break;
-#endif
-
-#if SPIRV_CROSS_C_API_HLSL
-		case SPVC_BACKEND_HLSL:
-			if (mode == SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-				comp->compiler.reset(new CompilerHLSL(std::move(parsed_ir->parsed)));
-			else if (mode == SPVC_CAPTURE_MODE_COPY)
-				comp->compiler.reset(new CompilerHLSL(parsed_ir->parsed));
-			break;
-#endif
-
-#if SPIRV_CROSS_C_API_MSL
-		case SPVC_BACKEND_MSL:
-			if (mode == SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-				comp->compiler.reset(new CompilerMSL(std::move(parsed_ir->parsed)));
-			else if (mode == SPVC_CAPTURE_MODE_COPY)
-				comp->compiler.reset(new CompilerMSL(parsed_ir->parsed));
-			break;
-#endif
-
-#if SPIRV_CROSS_C_API_CPP
-		case SPVC_BACKEND_CPP:
-			if (mode == SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-				comp->compiler.reset(new CompilerCPP(std::move(parsed_ir->parsed)));
-			else if (mode == SPVC_CAPTURE_MODE_COPY)
-				comp->compiler.reset(new CompilerCPP(parsed_ir->parsed));
-			break;
-#endif
-
-#if SPIRV_CROSS_C_API_REFLECT
-		case SPVC_BACKEND_JSON:
-			if (mode == SPVC_CAPTURE_MODE_TAKE_OWNERSHIP)
-				comp->compiler.reset(new CompilerReflection(std::move(parsed_ir->parsed)));
-			else if (mode == SPVC_CAPTURE_MODE_COPY)
-				comp->compiler.reset(new CompilerReflection(parsed_ir->parsed));
-			break;
-#endif
-
-		default:
-			context->report_error("Invalid backend.");
-			return SPVC_ERROR_INVALID_ARGUMENT;
-		}
-
-		*compiler = comp.get();
-		context->allocations.push_back(std::move(comp));
-	}
-	SPVC_END_SAFE_SCOPE(context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_create_compiler_options(spvc_compiler compiler, spvc_compiler_options *options)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		std::unique_ptr<spvc_compiler_options_s> opt(new (std::nothrow) spvc_compiler_options_s);
-		if (!opt)
-		{
-			compiler->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-
-		opt->context = compiler->context;
-		opt->backend_flags = 0;
-		switch (compiler->backend)
-		{
-#if SPIRV_CROSS_C_API_MSL
-		case SPVC_BACKEND_MSL:
-			opt->backend_flags |= SPVC_COMPILER_OPTION_MSL_BIT | SPVC_COMPILER_OPTION_COMMON_BIT;
-			opt->glsl = static_cast<CompilerMSL *>(compiler->compiler.get())->get_common_options();
-			opt->msl = static_cast<CompilerMSL *>(compiler->compiler.get())->get_msl_options();
-			break;
-#endif
-
-#if SPIRV_CROSS_C_API_HLSL
-		case SPVC_BACKEND_HLSL:
-			opt->backend_flags |= SPVC_COMPILER_OPTION_HLSL_BIT | SPVC_COMPILER_OPTION_COMMON_BIT;
-			opt->glsl = static_cast<CompilerHLSL *>(compiler->compiler.get())->get_common_options();
-			opt->hlsl = static_cast<CompilerHLSL *>(compiler->compiler.get())->get_hlsl_options();
-			break;
-#endif
-
-#if SPIRV_CROSS_C_API_GLSL
-		case SPVC_BACKEND_GLSL:
-			opt->backend_flags |= SPVC_COMPILER_OPTION_GLSL_BIT | SPVC_COMPILER_OPTION_COMMON_BIT;
-			opt->glsl = static_cast<CompilerGLSL *>(compiler->compiler.get())->get_common_options();
-			break;
-#endif
-
-		default:
-			break;
-		}
-
-		*options = opt.get();
-		compiler->context->allocations.push_back(std::move(opt));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_options_set_bool(spvc_compiler_options options, spvc_compiler_option option,
-                                           spvc_bool value)
-{
-	return spvc_compiler_options_set_uint(options, option, value ? 1 : 0);
-}
-
-spvc_result spvc_compiler_options_set_uint(spvc_compiler_options options, spvc_compiler_option option, unsigned value)
-{
-	(void)value;
-	(void)option;
-	uint32_t supported_mask = options->backend_flags;
-	uint32_t required_mask = option & SPVC_COMPILER_OPTION_LANG_BITS;
-	if ((required_mask | supported_mask) != supported_mask)
-	{
-		options->context->report_error("Option is not supported by current backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	switch (option)
-	{
-#if SPIRV_CROSS_C_API_GLSL
-	case SPVC_COMPILER_OPTION_FORCE_TEMPORARY:
-		options->glsl.force_temporary = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_FLATTEN_MULTIDIMENSIONAL_ARRAYS:
-		options->glsl.flatten_multidimensional_arrays = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_FIXUP_DEPTH_CONVENTION:
-		options->glsl.vertex.fixup_clipspace = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_FLIP_VERTEX_Y:
-		options->glsl.vertex.flip_vert_y = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_EMIT_LINE_DIRECTIVES:
-		options->glsl.emit_line_directives = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_ENABLE_STORAGE_IMAGE_QUALIFIER_DEDUCTION:
-		options->glsl.enable_storage_image_qualifier_deduction = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_FORCE_ZERO_INITIALIZED_VARIABLES:
-		options->glsl.force_zero_initialized_variables = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_GLSL_SUPPORT_NONZERO_BASE_INSTANCE:
-		options->glsl.vertex.support_nonzero_base_instance = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_SEPARATE_SHADER_OBJECTS:
-		options->glsl.separate_shader_objects = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_ENABLE_420PACK_EXTENSION:
-		options->glsl.enable_420pack_extension = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_VERSION:
-		options->glsl.version = value;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_ES:
-		options->glsl.es = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_VULKAN_SEMANTICS:
-		options->glsl.vulkan_semantics = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_ES_DEFAULT_FLOAT_PRECISION_HIGHP:
-		options->glsl.fragment.default_float_precision =
-		    value != 0 ? CompilerGLSL::Options::Precision::Highp : CompilerGLSL::Options::Precision::Mediump;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_ES_DEFAULT_INT_PRECISION_HIGHP:
-		options->glsl.fragment.default_int_precision =
-		    value != 0 ? CompilerGLSL::Options::Precision::Highp : CompilerGLSL::Options::Precision::Mediump;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_EMIT_PUSH_CONSTANT_AS_UNIFORM_BUFFER:
-		options->glsl.emit_push_constant_as_uniform_buffer = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_EMIT_UNIFORM_BUFFER_AS_PLAIN_UNIFORMS:
-		options->glsl.emit_uniform_buffer_as_plain_uniforms = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_FORCE_FLATTENED_IO_BLOCKS:
-		options->glsl.force_flattened_io_blocks = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_OVR_MULTIVIEW_VIEW_COUNT:
-		options->glsl.ovr_multiview_view_count = value;
-		break;
-	case SPVC_COMPILER_OPTION_RELAX_NAN_CHECKS:
-		options->glsl.relax_nan_checks = value != 0;
-		break;
-	case SPVC_COMPILER_OPTION_GLSL_ENABLE_ROW_MAJOR_LOAD_WORKAROUND:
-		options->glsl.enable_row_major_load_workaround = value != 0;
-		break;
-#endif
-
-#if SPIRV_CROSS_C_API_HLSL
-	case SPVC_COMPILER_OPTION_HLSL_SHADER_MODEL:
-		options->hlsl.shader_model = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_POINT_SIZE_COMPAT:
-		options->hlsl.point_size_compat = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_POINT_COORD_COMPAT:
-		options->hlsl.point_coord_compat = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_SUPPORT_NONZERO_BASE_VERTEX_BASE_INSTANCE:
-		options->hlsl.support_nonzero_base_vertex_base_instance = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_FORCE_STORAGE_BUFFER_AS_UAV:
-		options->hlsl.force_storage_buffer_as_uav = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_NONWRITABLE_UAV_TEXTURE_AS_SRV:
-		options->hlsl.nonwritable_uav_texture_as_srv = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_ENABLE_16BIT_TYPES:
-		options->hlsl.enable_16bit_types = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_HLSL_FLATTEN_MATRIX_VERTEX_INPUT_SEMANTICS:
-		options->hlsl.flatten_matrix_vertex_input_semantics = value != 0;
-		break;
-#endif
-
-#if SPIRV_CROSS_C_API_MSL
-	case SPVC_COMPILER_OPTION_MSL_VERSION:
-		options->msl.msl_version = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_TEXEL_BUFFER_TEXTURE_WIDTH:
-		options->msl.texel_buffer_texture_width = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SWIZZLE_BUFFER_INDEX:
-		options->msl.swizzle_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_INDIRECT_PARAMS_BUFFER_INDEX:
-		options->msl.indirect_params_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_OUTPUT_BUFFER_INDEX:
-		options->msl.shader_output_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_PATCH_OUTPUT_BUFFER_INDEX:
-		options->msl.shader_patch_output_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_TESS_FACTOR_OUTPUT_BUFFER_INDEX:
-		options->msl.shader_tess_factor_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_INPUT_WORKGROUP_INDEX:
-		options->msl.shader_input_wg_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_POINT_SIZE_BUILTIN:
-		options->msl.enable_point_size_builtin = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_DISABLE_RASTERIZATION:
-		options->msl.disable_rasterization = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_CAPTURE_OUTPUT_TO_BUFFER:
-		options->msl.capture_output_to_buffer = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SWIZZLE_TEXTURE_SAMPLES:
-		options->msl.swizzle_texture_samples = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_PAD_FRAGMENT_OUTPUT_COMPONENTS:
-		options->msl.pad_fragment_output_components = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_TESS_DOMAIN_ORIGIN_LOWER_LEFT:
-		options->msl.tess_domain_origin_lower_left = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_PLATFORM:
-		options->msl.platform = static_cast<CompilerMSL::Options::Platform>(value);
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ARGUMENT_BUFFERS:
-		options->msl.argument_buffers = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_TEXTURE_BUFFER_NATIVE:
-		options->msl.texture_buffer_native = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_BUFFER_SIZE_BUFFER_INDEX:
-		options->msl.buffer_size_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_MULTIVIEW:
-		options->msl.multiview = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_VIEW_MASK_BUFFER_INDEX:
-		options->msl.view_mask_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_DEVICE_INDEX:
-		options->msl.device_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_VIEW_INDEX_FROM_DEVICE_INDEX:
-		options->msl.view_index_from_device_index = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_DISPATCH_BASE:
-		options->msl.dispatch_base = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_DYNAMIC_OFFSETS_BUFFER_INDEX:
-		options->msl.dynamic_offsets_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_TEXTURE_1D_AS_2D:
-		options->msl.texture_1D_as_2D = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_BASE_INDEX_ZERO:
-		options->msl.enable_base_index_zero = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_FRAMEBUFFER_FETCH_SUBPASS:
-		options->msl.use_framebuffer_fetch_subpasses = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_INVARIANT_FP_MATH:
-		options->msl.invariant_float_math = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_EMULATE_CUBEMAP_ARRAY:
-		options->msl.emulate_cube_array = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_DECORATION_BINDING:
-		options->msl.enable_decoration_binding = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_FORCE_ACTIVE_ARGUMENT_BUFFER_RESOURCES:
-		options->msl.force_active_argument_buffer_resources = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_FORCE_NATIVE_ARRAYS:
-		options->msl.force_native_arrays = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_OUTPUT_MASK:
-		options->msl.enable_frag_output_mask = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_DEPTH_BUILTIN:
-		options->msl.enable_frag_depth_builtin = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_STENCIL_REF_BUILTIN:
-		options->msl.enable_frag_stencil_ref_builtin = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ENABLE_CLIP_DISTANCE_USER_VARYING:
-		options->msl.enable_clip_distance_user_varying = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_MULTI_PATCH_WORKGROUP:
-		options->msl.multi_patch_workgroup = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_INPUT_BUFFER_INDEX:
-		options->msl.shader_input_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_INDEX_BUFFER_INDEX:
-		options->msl.shader_index_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_VERTEX_FOR_TESSELLATION:
-		options->msl.vertex_for_tessellation = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_VERTEX_INDEX_TYPE:
-		options->msl.vertex_index_type = static_cast<CompilerMSL::Options::IndexType>(value);
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_MULTIVIEW_LAYERED_RENDERING:
-		options->msl.multiview_layered_rendering = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ARRAYED_SUBPASS_INPUT:
-		options->msl.arrayed_subpass_input = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_R32UI_LINEAR_TEXTURE_ALIGNMENT:
-		options->msl.r32ui_linear_texture_alignment = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_R32UI_ALIGNMENT_CONSTANT_ID:
-		options->msl.r32ui_alignment_constant_id = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_IOS_USE_SIMDGROUP_FUNCTIONS:
-		options->msl.ios_use_simdgroup_functions = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_EMULATE_SUBGROUPS:
-		options->msl.emulate_subgroups = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_FIXED_SUBGROUP_SIZE:
-		options->msl.fixed_subgroup_size = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_FORCE_SAMPLE_RATE_SHADING:
-		options->msl.force_sample_rate_shading = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_IOS_SUPPORT_BASE_VERTEX_INSTANCE:
-		options->msl.ios_support_base_vertex_instance = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_RAW_BUFFER_TESE_INPUT:
-		options->msl.raw_buffer_tese_input = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SHADER_PATCH_INPUT_BUFFER_INDEX:
-		options->msl.shader_patch_input_buffer_index = value;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_MANUAL_HELPER_INVOCATION_UPDATES:
-		options->msl.manual_helper_invocation_updates = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_CHECK_DISCARDED_FRAG_STORES:
-		options->msl.check_discarded_frag_stores = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_ARGUMENT_BUFFERS_TIER:
-		options->msl.argument_buffers_tier = static_cast<CompilerMSL::Options::ArgumentBuffersTier>(value);
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_SAMPLE_DREF_LOD_ARRAY_AS_GRAD:
-		options->msl.sample_dref_lod_array_as_grad = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_READWRITE_TEXTURE_FENCES:
-		options->msl.readwrite_texture_fences = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_REPLACE_RECURSIVE_INPUTS:
-		options->msl.replace_recursive_inputs = value != 0;
-		break;
-
-	case SPVC_COMPILER_OPTION_MSL_AGX_MANUAL_CUBE_GRAD_FIXUP:
-		options->msl.agx_manual_cube_grad_fixup = value != 0;
-		break;
-#endif
-
-	default:
-		options->context->report_error("Unknown option.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_install_compiler_options(spvc_compiler compiler, spvc_compiler_options options)
-{
-	(void)options;
-	switch (compiler->backend)
-	{
-#if SPIRV_CROSS_C_API_GLSL
-	case SPVC_BACKEND_GLSL:
-		static_cast<CompilerGLSL &>(*compiler->compiler).set_common_options(options->glsl);
-		break;
-#endif
-
-#if SPIRV_CROSS_C_API_HLSL
-	case SPVC_BACKEND_HLSL:
-		static_cast<CompilerHLSL &>(*compiler->compiler).set_common_options(options->glsl);
-		static_cast<CompilerHLSL &>(*compiler->compiler).set_hlsl_options(options->hlsl);
-		break;
-#endif
-
-#if SPIRV_CROSS_C_API_MSL
-	case SPVC_BACKEND_MSL:
-		static_cast<CompilerMSL &>(*compiler->compiler).set_common_options(options->glsl);
-		static_cast<CompilerMSL &>(*compiler->compiler).set_msl_options(options->msl);
-		break;
-#endif
-
-	default:
-		break;
-	}
-
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_add_header_line(spvc_compiler compiler, const char *line)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend == SPVC_BACKEND_NONE)
-	{
-		compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	static_cast<CompilerGLSL *>(compiler->compiler.get())->add_header_line(line);
-	return SPVC_SUCCESS;
-#else
-	(void)line;
-	compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_require_extension(spvc_compiler compiler, const char *line)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend == SPVC_BACKEND_NONE)
-	{
-		compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	static_cast<CompilerGLSL *>(compiler->compiler.get())->require_extension(line);
-	return SPVC_SUCCESS;
-#else
-	(void)line;
-	compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-size_t spvc_compiler_get_num_required_extensions(spvc_compiler compiler) 
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend != SPVC_BACKEND_GLSL)
-	{
-		compiler->context->report_error("Enabled extensions can only be queried on GLSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	return static_cast<CompilerGLSL *>(compiler->compiler.get())->get_required_extensions().size();
-#else
-	compiler->context->report_error("Enabled extensions can only be queried on GLSL backend.");
-	return 0;
-#endif
-}
-
-const char *spvc_compiler_get_required_extension(spvc_compiler compiler, size_t index)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend != SPVC_BACKEND_GLSL)
-	{
-		compiler->context->report_error("Enabled extensions can only be queried on GLSL backend.");
-		return nullptr;
-	}
-
-	auto &exts = static_cast<CompilerGLSL *>(compiler->compiler.get())->get_required_extensions();
-	if (index < exts.size())
-		return exts[index].c_str();
-	else
-		return nullptr;
-#else
-	(void)index;
-	compiler->context->report_error("Enabled extensions can only be queried on GLSL backend.");
-	return nullptr;
-#endif
-}
-
-spvc_result spvc_compiler_flatten_buffer_block(spvc_compiler compiler, spvc_variable_id id)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend == SPVC_BACKEND_NONE)
-	{
-		compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	static_cast<CompilerGLSL *>(compiler->compiler.get())->flatten_buffer_block(id);
-	return SPVC_SUCCESS;
-#else
-	(void)id;
-	compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_bool spvc_compiler_variable_is_depth_or_compare(spvc_compiler compiler, spvc_variable_id id)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend == SPVC_BACKEND_NONE)
-	{
-		compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	return static_cast<CompilerGLSL *>(compiler->compiler.get())->variable_is_depth_or_compare(id) ? SPVC_TRUE : SPVC_FALSE;
-#else
-	(void)id;
-	compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_result spvc_compiler_mask_stage_output_by_location(spvc_compiler compiler,
-                                                        unsigned location, unsigned component)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend == SPVC_BACKEND_NONE)
-	{
-		compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	static_cast<CompilerGLSL *>(compiler->compiler.get())->mask_stage_output_by_location(location, component);
-	return SPVC_SUCCESS;
-#else
-	(void)location;
-	(void)component;
-	compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_mask_stage_output_by_builtin(spvc_compiler compiler, SpvBuiltIn builtin)
-{
-#if SPIRV_CROSS_C_API_GLSL
-	if (compiler->backend == SPVC_BACKEND_NONE)
-	{
-		compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	static_cast<CompilerGLSL *>(compiler->compiler.get())->mask_stage_output_by_builtin(spv::BuiltIn(builtin));
-	return SPVC_SUCCESS;
-#else
-	(void)builtin;
-	compiler->context->report_error("Cross-compilation related option used on NONE backend which only supports reflection.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_hlsl_set_root_constants_layout(spvc_compiler compiler,
-                                                         const spvc_hlsl_root_constants *constant_info,
-                                                         size_t count)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	if (compiler->backend != SPVC_BACKEND_HLSL)
-	{
-		compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &hlsl = *static_cast<CompilerHLSL *>(compiler->compiler.get());
-	vector<RootConstants> roots;
-	roots.reserve(count);
-	for (size_t i = 0; i < count; i++)
-	{
-		RootConstants root;
-		root.binding = constant_info[i].binding;
-		root.space = constant_info[i].space;
-		root.start = constant_info[i].start;
-		root.end = constant_info[i].end;
-		roots.push_back(root);
-	}
-
-	hlsl.set_root_constant_layouts(std::move(roots));
-	return SPVC_SUCCESS;
-#else
-	(void)constant_info;
-	(void)count;
-	compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_hlsl_add_vertex_attribute_remap(spvc_compiler compiler,
-                                                          const spvc_hlsl_vertex_attribute_remap *remap,
-                                                          size_t count)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	if (compiler->backend != SPVC_BACKEND_HLSL)
-	{
-		compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	HLSLVertexAttributeRemap re;
-	auto &hlsl = *static_cast<CompilerHLSL *>(compiler->compiler.get());
-	for (size_t i = 0; i < count; i++)
-	{
-		re.location = remap[i].location;
-		re.semantic = remap[i].semantic;
-		hlsl.add_vertex_attribute_remap(re);
-	}
-
-	return SPVC_SUCCESS;
-#else
-	(void)remap;
-	(void)count;
-	compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_variable_id spvc_compiler_hlsl_remap_num_workgroups_builtin(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	if (compiler->backend != SPVC_BACKEND_HLSL)
-	{
-		compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-		return 0;
-	}
-
-	auto &hlsl = *static_cast<CompilerHLSL *>(compiler->compiler.get());
-	return hlsl.remap_num_workgroups_builtin();
-#else
-	compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-	return 0;
-#endif
-}
-
-spvc_result spvc_compiler_hlsl_set_resource_binding_flags(spvc_compiler compiler,
-                                                          spvc_hlsl_binding_flags flags)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	if (compiler->backend != SPVC_BACKEND_HLSL)
-	{
-		compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &hlsl = *static_cast<CompilerHLSL *>(compiler->compiler.get());
-	hlsl.set_resource_binding_flags(flags);
-	return SPVC_SUCCESS;
-#else
-	(void)flags;
-	compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_hlsl_add_resource_binding(spvc_compiler compiler,
-                                                    const spvc_hlsl_resource_binding *binding)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	if (compiler->backend != SPVC_BACKEND_HLSL)
-	{
-		compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &hlsl = *static_cast<CompilerHLSL *>(compiler->compiler.get());
-	HLSLResourceBinding bind;
-	bind.binding = binding->binding;
-	bind.desc_set = binding->desc_set;
-	bind.stage = static_cast<spv::ExecutionModel>(binding->stage);
-	bind.cbv.register_binding = binding->cbv.register_binding;
-	bind.cbv.register_space = binding->cbv.register_space;
-	bind.uav.register_binding = binding->uav.register_binding;
-	bind.uav.register_space = binding->uav.register_space;
-	bind.srv.register_binding = binding->srv.register_binding;
-	bind.srv.register_space = binding->srv.register_space;
-	bind.sampler.register_binding = binding->sampler.register_binding;
-	bind.sampler.register_space = binding->sampler.register_space;
-	hlsl.add_hlsl_resource_binding(bind);
-	return SPVC_SUCCESS;
-#else
-	(void)binding;
-	compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_bool spvc_compiler_hlsl_is_resource_used(spvc_compiler compiler, SpvExecutionModel model, unsigned set,
-                                              unsigned binding)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	if (compiler->backend != SPVC_BACKEND_HLSL)
-	{
-		compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &hlsl = *static_cast<CompilerHLSL *>(compiler->compiler.get());
-	return hlsl.is_hlsl_resource_binding_used(static_cast<spv::ExecutionModel>(model), set, binding) ? SPVC_TRUE :
-	       SPVC_FALSE;
-#else
-	(void)model;
-	(void)set;
-	(void)binding;
-	compiler->context->report_error("HLSL function used on a non-HLSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_is_rasterization_disabled(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.get_is_rasterization_disabled() ? SPVC_TRUE : SPVC_FALSE;
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_needs_swizzle_buffer(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.needs_swizzle_buffer() ? SPVC_TRUE : SPVC_FALSE;
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_needs_buffer_size_buffer(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.needs_buffer_size_buffer() ? SPVC_TRUE : SPVC_FALSE;
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_needs_aux_buffer(spvc_compiler compiler)
-{
-	return spvc_compiler_msl_needs_swizzle_buffer(compiler);
-}
-
-spvc_bool spvc_compiler_msl_needs_output_buffer(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.needs_output_buffer() ? SPVC_TRUE : SPVC_FALSE;
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_needs_patch_output_buffer(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.needs_patch_output_buffer() ? SPVC_TRUE : SPVC_FALSE;
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_needs_input_threadgroup_mem(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.needs_input_threadgroup_mem() ? SPVC_TRUE : SPVC_FALSE;
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_vertex_attribute(spvc_compiler compiler, const spvc_msl_vertex_attribute *va)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLShaderInterfaceVariable attr;
-	attr.location = va->location;
-	attr.format = static_cast<MSLShaderVariableFormat>(va->format);
-	attr.builtin = static_cast<spv::BuiltIn>(va->builtin);
-	msl.add_msl_shader_input(attr);
-	return SPVC_SUCCESS;
-#else
-	(void)va;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_shader_input(spvc_compiler compiler, const spvc_msl_shader_interface_var *si)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLShaderInterfaceVariable input;
-	input.location = si->location;
-	input.format = static_cast<MSLShaderVariableFormat>(si->format);
-	input.builtin = static_cast<spv::BuiltIn>(si->builtin);
-	input.vecsize = si->vecsize;
-	msl.add_msl_shader_input(input);
-	return SPVC_SUCCESS;
-#else
-	(void)si;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_shader_input_2(spvc_compiler compiler, const spvc_msl_shader_interface_var_2 *si)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLShaderInterfaceVariable input;
-	input.location = si->location;
-	input.format = static_cast<MSLShaderVariableFormat>(si->format);
-	input.builtin = static_cast<spv::BuiltIn>(si->builtin);
-	input.vecsize = si->vecsize;
-	input.rate = static_cast<MSLShaderVariableRate>(si->rate);
-	msl.add_msl_shader_input(input);
-	return SPVC_SUCCESS;
-#else
-	(void)si;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_shader_output(spvc_compiler compiler, const spvc_msl_shader_interface_var *so)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLShaderInterfaceVariable output;
-	output.location = so->location;
-	output.format = static_cast<MSLShaderVariableFormat>(so->format);
-	output.builtin = static_cast<spv::BuiltIn>(so->builtin);
-	output.vecsize = so->vecsize;
-	msl.add_msl_shader_output(output);
-	return SPVC_SUCCESS;
-#else
-	(void)so;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_shader_output_2(spvc_compiler compiler, const spvc_msl_shader_interface_var_2 *so)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLShaderInterfaceVariable output;
-	output.location = so->location;
-	output.format = static_cast<MSLShaderVariableFormat>(so->format);
-	output.builtin = static_cast<spv::BuiltIn>(so->builtin);
-	output.vecsize = so->vecsize;
-	output.rate = static_cast<MSLShaderVariableRate>(so->rate);
-	msl.add_msl_shader_output(output);
-	return SPVC_SUCCESS;
-#else
-	(void)so;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_resource_binding(spvc_compiler compiler,
-                                                   const spvc_msl_resource_binding *binding)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLResourceBinding bind;
-	bind.binding = binding->binding;
-	bind.desc_set = binding->desc_set;
-	bind.stage = static_cast<spv::ExecutionModel>(binding->stage);
-	bind.msl_buffer = binding->msl_buffer;
-	bind.msl_texture = binding->msl_texture;
-	bind.msl_sampler = binding->msl_sampler;
-	msl.add_msl_resource_binding(bind);
-	return SPVC_SUCCESS;
-#else
-	(void)binding;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_dynamic_buffer(spvc_compiler compiler, unsigned desc_set, unsigned binding, unsigned index)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	msl.add_dynamic_buffer(desc_set, binding, index);
-	return SPVC_SUCCESS;
-#else
-	(void)binding;
-	(void)desc_set;
-	(void)index;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_inline_uniform_block(spvc_compiler compiler, unsigned desc_set, unsigned binding)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	msl.add_inline_uniform_block(desc_set, binding);
-	return SPVC_SUCCESS;
-#else
-	(void)binding;
-	(void)desc_set;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_add_discrete_descriptor_set(spvc_compiler compiler, unsigned desc_set)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	msl.add_discrete_descriptor_set(desc_set);
-	return SPVC_SUCCESS;
-#else
-	(void)desc_set;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_set_argument_buffer_device_address_space(spvc_compiler compiler, unsigned desc_set, spvc_bool device_address)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	msl.set_argument_buffer_device_address_space(desc_set, bool(device_address));
-	return SPVC_SUCCESS;
-#else
-	(void)desc_set;
-	(void)device_address;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_is_shader_input_used(spvc_compiler compiler, unsigned location)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.is_msl_shader_input_used(location) ? SPVC_TRUE : SPVC_FALSE;
-#else
-	(void)location;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_is_shader_output_used(spvc_compiler compiler, unsigned location)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.is_msl_shader_output_used(location) ? SPVC_TRUE : SPVC_FALSE;
-#else
-	(void)location;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_bool spvc_compiler_msl_is_vertex_attribute_used(spvc_compiler compiler, unsigned location)
-{
-	return spvc_compiler_msl_is_shader_input_used(compiler, location);
-}
-
-spvc_bool spvc_compiler_msl_is_resource_used(spvc_compiler compiler, SpvExecutionModel model, unsigned set,
-                                             unsigned binding)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_FALSE;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.is_msl_resource_binding_used(static_cast<spv::ExecutionModel>(model), set, binding) ? SPVC_TRUE :
-	                                                                                                 SPVC_FALSE;
-#else
-	(void)model;
-	(void)set;
-	(void)binding;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_FALSE;
-#endif
-}
-
-spvc_result spvc_compiler_msl_set_combined_sampler_suffix(spvc_compiler compiler, const char *suffix)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	msl.set_combined_sampler_suffix(suffix);
-	return SPVC_SUCCESS;
-#else
-	(void)suffix;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-const char *spvc_compiler_msl_get_combined_sampler_suffix(spvc_compiler compiler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return "";
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.get_combined_sampler_suffix();
-#else
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return "";
-#endif
-}
-
-#if SPIRV_CROSS_C_API_MSL
-static void spvc_convert_msl_sampler(MSLConstexprSampler &samp, const spvc_msl_constexpr_sampler *sampler)
-{
-	samp.s_address = static_cast<MSLSamplerAddress>(sampler->s_address);
-	samp.t_address = static_cast<MSLSamplerAddress>(sampler->t_address);
-	samp.r_address = static_cast<MSLSamplerAddress>(sampler->r_address);
-	samp.lod_clamp_min = sampler->lod_clamp_min;
-	samp.lod_clamp_max = sampler->lod_clamp_max;
-	samp.lod_clamp_enable = sampler->lod_clamp_enable != 0;
-	samp.min_filter = static_cast<MSLSamplerFilter>(sampler->min_filter);
-	samp.mag_filter = static_cast<MSLSamplerFilter>(sampler->mag_filter);
-	samp.mip_filter = static_cast<MSLSamplerMipFilter>(sampler->mip_filter);
-	samp.compare_enable = sampler->compare_enable != 0;
-	samp.anisotropy_enable = sampler->anisotropy_enable != 0;
-	samp.max_anisotropy = sampler->max_anisotropy;
-	samp.compare_func = static_cast<MSLSamplerCompareFunc>(sampler->compare_func);
-	samp.coord = static_cast<MSLSamplerCoord>(sampler->coord);
-	samp.border_color = static_cast<MSLSamplerBorderColor>(sampler->border_color);
-}
-
-static void spvc_convert_msl_sampler_ycbcr_conversion(MSLConstexprSampler &samp, const spvc_msl_sampler_ycbcr_conversion *conv)
-{
-	samp.ycbcr_conversion_enable = conv != nullptr;
-	if (conv == nullptr) return;
-	samp.planes = conv->planes;
-	samp.resolution = static_cast<MSLFormatResolution>(conv->resolution);
-	samp.chroma_filter = static_cast<MSLSamplerFilter>(conv->chroma_filter);
-	samp.x_chroma_offset = static_cast<MSLChromaLocation>(conv->x_chroma_offset);
-	samp.y_chroma_offset = static_cast<MSLChromaLocation>(conv->y_chroma_offset);
-	for (int i = 0; i < 4; i++)
-		samp.swizzle[i] = static_cast<MSLComponentSwizzle>(conv->swizzle[i]);
-	samp.ycbcr_model = static_cast<MSLSamplerYCbCrModelConversion>(conv->ycbcr_model);
-	samp.ycbcr_range = static_cast<MSLSamplerYCbCrRange>(conv->ycbcr_range);
-	samp.bpc = conv->bpc;
-}
-#endif
-
-spvc_result spvc_compiler_msl_remap_constexpr_sampler(spvc_compiler compiler, spvc_variable_id id,
-                                                      const spvc_msl_constexpr_sampler *sampler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLConstexprSampler samp;
-	spvc_convert_msl_sampler(samp, sampler);
-	msl.remap_constexpr_sampler(id, samp);
-	return SPVC_SUCCESS;
-#else
-	(void)id;
-	(void)sampler;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_remap_constexpr_sampler_by_binding(spvc_compiler compiler,
-                                                                 unsigned desc_set, unsigned binding,
-                                                                 const spvc_msl_constexpr_sampler *sampler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLConstexprSampler samp;
-	spvc_convert_msl_sampler(samp, sampler);
-	msl.remap_constexpr_sampler_by_binding(desc_set, binding, samp);
-	return SPVC_SUCCESS;
-#else
-	(void)desc_set;
-	(void)binding;
-	(void)sampler;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_remap_constexpr_sampler_ycbcr(spvc_compiler compiler, spvc_variable_id id,
-                                                            const spvc_msl_constexpr_sampler *sampler,
-                                                            const spvc_msl_sampler_ycbcr_conversion *conv)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLConstexprSampler samp;
-	spvc_convert_msl_sampler(samp, sampler);
-	spvc_convert_msl_sampler_ycbcr_conversion(samp, conv);
-	msl.remap_constexpr_sampler(id, samp);
-	return SPVC_SUCCESS;
-#else
-	(void)id;
-	(void)sampler;
-	(void)conv;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_remap_constexpr_sampler_by_binding_ycbcr(spvc_compiler compiler,
-                                                                       unsigned desc_set, unsigned binding,
-                                                                       const spvc_msl_constexpr_sampler *sampler,
-                                                                       const spvc_msl_sampler_ycbcr_conversion *conv)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	MSLConstexprSampler samp;
-	spvc_convert_msl_sampler(samp, sampler);
-	spvc_convert_msl_sampler_ycbcr_conversion(samp, conv);
-	msl.remap_constexpr_sampler_by_binding(desc_set, binding, samp);
-	return SPVC_SUCCESS;
-#else
-	(void)desc_set;
-	(void)binding;
-	(void)sampler;
-	(void)conv;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-spvc_result spvc_compiler_msl_set_fragment_output_components(spvc_compiler compiler, unsigned location,
-                                                             unsigned components)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	msl.set_fragment_output_components(location, components);
-	return SPVC_SUCCESS;
-#else
-	(void)location;
-	(void)components;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return SPVC_ERROR_INVALID_ARGUMENT;
-#endif
-}
-
-unsigned spvc_compiler_msl_get_automatic_resource_binding(spvc_compiler compiler, spvc_variable_id id)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return uint32_t(-1);
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.get_automatic_msl_resource_binding(id);
-#else
-	(void)id;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return uint32_t(-1);
-#endif
-}
-
-unsigned spvc_compiler_msl_get_automatic_resource_binding_secondary(spvc_compiler compiler, spvc_variable_id id)
-{
-#if SPIRV_CROSS_C_API_MSL
-	if (compiler->backend != SPVC_BACKEND_MSL)
-	{
-		compiler->context->report_error("MSL function used on a non-MSL backend.");
-		return uint32_t(-1);
-	}
-
-	auto &msl = *static_cast<CompilerMSL *>(compiler->compiler.get());
-	return msl.get_automatic_msl_resource_binding_secondary(id);
-#else
-	(void)id;
-	compiler->context->report_error("MSL function used on a non-MSL backend.");
-	return uint32_t(-1);
-#endif
-}
-
-spvc_result spvc_compiler_compile(spvc_compiler compiler, const char **source)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto result = compiler->compiler->compile();
-		if (result.empty())
-		{
-			compiler->context->report_error("Unsupported SPIR-V.");
-			return SPVC_ERROR_UNSUPPORTED_SPIRV;
-		}
-
-		*source = compiler->context->allocate_name(result);
-		if (!*source)
-		{
-			compiler->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-		return SPVC_SUCCESS;
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_UNSUPPORTED_SPIRV)
-}
-
-bool spvc_resources_s::copy_resources(SmallVector<spvc_reflected_resource> &outputs,
-                                      const SmallVector<Resource> &inputs)
-{
-	for (auto &i : inputs)
-	{
-		spvc_reflected_resource r;
-		r.base_type_id = i.base_type_id;
-		r.type_id = i.type_id;
-		r.id = i.id;
-		r.name = context->allocate_name(i.name);
-		if (!r.name)
-			return false;
-
-		outputs.push_back(r);
-	}
-
-	return true;
-}
-
-bool spvc_resources_s::copy_resources(SmallVector<spvc_reflected_builtin_resource> &outputs,
-                                      const SmallVector<BuiltInResource> &inputs)
-{
-	for (auto &i : inputs)
-	{
-		spvc_reflected_builtin_resource br;
-
-		br.value_type_id = i.value_type_id;
-		br.builtin = SpvBuiltIn(i.builtin);
-
-		auto &r = br.resource;
-		r.base_type_id = i.resource.base_type_id;
-		r.type_id = i.resource.type_id;
-		r.id = i.resource.id;
-		r.name = context->allocate_name(i.resource.name);
-		if (!r.name)
-			return false;
-
-		outputs.push_back(br);
-	}
-
-	return true;
-}
-
-bool spvc_resources_s::copy_resources(const ShaderResources &resources)
-{
-	if (!copy_resources(uniform_buffers, resources.uniform_buffers))
-		return false;
-	if (!copy_resources(storage_buffers, resources.storage_buffers))
-		return false;
-	if (!copy_resources(stage_inputs, resources.stage_inputs))
-		return false;
-	if (!copy_resources(stage_outputs, resources.stage_outputs))
-		return false;
-	if (!copy_resources(subpass_inputs, resources.subpass_inputs))
-		return false;
-	if (!copy_resources(storage_images, resources.storage_images))
-		return false;
-	if (!copy_resources(sampled_images, resources.sampled_images))
-		return false;
-	if (!copy_resources(atomic_counters, resources.atomic_counters))
-		return false;
-	if (!copy_resources(push_constant_buffers, resources.push_constant_buffers))
-		return false;
-	if (!copy_resources(shader_record_buffers, resources.shader_record_buffers))
-		return false;
-	if (!copy_resources(separate_images, resources.separate_images))
-		return false;
-	if (!copy_resources(separate_samplers, resources.separate_samplers))
-		return false;
-	if (!copy_resources(acceleration_structures, resources.acceleration_structures))
-		return false;
-	if (!copy_resources(builtin_inputs, resources.builtin_inputs))
-		return false;
-	if (!copy_resources(builtin_outputs, resources.builtin_outputs))
-		return false;
-
-	return true;
-}
-
-spvc_result spvc_compiler_get_active_interface_variables(spvc_compiler compiler, spvc_set *set)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		std::unique_ptr<spvc_set_s> ptr(new (std::nothrow) spvc_set_s);
-		if (!ptr)
-		{
-			compiler->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-
-		auto active = compiler->compiler->get_active_interface_variables();
-		ptr->set = std::move(active);
-		*set = ptr.get();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_set_enabled_interface_variables(spvc_compiler compiler, spvc_set set)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		compiler->compiler->set_enabled_interface_variables(set->set);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_create_shader_resources_for_active_variables(spvc_compiler compiler, spvc_resources *resources,
-                                                                       spvc_set set)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		std::unique_ptr<spvc_resources_s> res(new (std::nothrow) spvc_resources_s);
-		if (!res)
-		{
-			compiler->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-
-		res->context = compiler->context;
-		auto accessed_resources = compiler->compiler->get_shader_resources(set->set);
-
-		if (!res->copy_resources(accessed_resources))
-		{
-			res->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-		*resources = res.get();
-		compiler->context->allocations.push_back(std::move(res));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_create_shader_resources(spvc_compiler compiler, spvc_resources *resources)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		std::unique_ptr<spvc_resources_s> res(new (std::nothrow) spvc_resources_s);
-		if (!res)
-		{
-			compiler->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-
-		res->context = compiler->context;
-		auto accessed_resources = compiler->compiler->get_shader_resources();
-
-		if (!res->copy_resources(accessed_resources))
-		{
-			res->context->report_error("Out of memory.");
-			return SPVC_ERROR_OUT_OF_MEMORY;
-		}
-
-		*resources = res.get();
-		compiler->context->allocations.push_back(std::move(res));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_resources_get_resource_list_for_type(spvc_resources resources, spvc_resource_type type,
-                                                      const spvc_reflected_resource **resource_list,
-                                                      size_t *resource_size)
-{
-	const SmallVector<spvc_reflected_resource> *list = nullptr;
-	switch (type)
-	{
-	case SPVC_RESOURCE_TYPE_UNIFORM_BUFFER:
-		list = &resources->uniform_buffers;
-		break;
-
-	case SPVC_RESOURCE_TYPE_STORAGE_BUFFER:
-		list = &resources->storage_buffers;
-		break;
-
-	case SPVC_RESOURCE_TYPE_STAGE_INPUT:
-		list = &resources->stage_inputs;
-		break;
-
-	case SPVC_RESOURCE_TYPE_STAGE_OUTPUT:
-		list = &resources->stage_outputs;
-		break;
-
-	case SPVC_RESOURCE_TYPE_SUBPASS_INPUT:
-		list = &resources->subpass_inputs;
-		break;
-
-	case SPVC_RESOURCE_TYPE_STORAGE_IMAGE:
-		list = &resources->storage_images;
-		break;
-
-	case SPVC_RESOURCE_TYPE_SAMPLED_IMAGE:
-		list = &resources->sampled_images;
-		break;
-
-	case SPVC_RESOURCE_TYPE_ATOMIC_COUNTER:
-		list = &resources->atomic_counters;
-		break;
-
-	case SPVC_RESOURCE_TYPE_PUSH_CONSTANT:
-		list = &resources->push_constant_buffers;
-		break;
-
-	case SPVC_RESOURCE_TYPE_SEPARATE_IMAGE:
-		list = &resources->separate_images;
-		break;
-
-	case SPVC_RESOURCE_TYPE_SEPARATE_SAMPLERS:
-		list = &resources->separate_samplers;
-		break;
-
-	case SPVC_RESOURCE_TYPE_ACCELERATION_STRUCTURE:
-		list = &resources->acceleration_structures;
-		break;
-
-	case SPVC_RESOURCE_TYPE_SHADER_RECORD_BUFFER:
-		list = &resources->shader_record_buffers;
-		break;
-
-	default:
-		break;
-	}
-
-	if (!list)
-	{
-		resources->context->report_error("Invalid argument.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	*resource_size = list->size();
-	*resource_list = list->data();
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_resources_get_builtin_resource_list_for_type(
-		spvc_resources resources, spvc_builtin_resource_type type,
-		const spvc_reflected_builtin_resource **resource_list,
-		size_t *resource_size)
-{
-	const SmallVector<spvc_reflected_builtin_resource> *list = nullptr;
-	switch (type)
-	{
-	case SPVC_BUILTIN_RESOURCE_TYPE_STAGE_INPUT:
-		list = &resources->builtin_inputs;
-		break;
-
-	case SPVC_BUILTIN_RESOURCE_TYPE_STAGE_OUTPUT:
-		list = &resources->builtin_outputs;
-		break;
-
-	default:
-		break;
-	}
-
-	if (!list)
-	{
-		resources->context->report_error("Invalid argument.");
-		return SPVC_ERROR_INVALID_ARGUMENT;
-	}
-
-	*resource_size = list->size();
-	*resource_list = list->data();
-	return SPVC_SUCCESS;
-}
-
-void spvc_compiler_set_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration, unsigned argument)
-{
-	compiler->compiler->set_decoration(id, static_cast<spv::Decoration>(decoration), argument);
-}
-
-void spvc_compiler_set_decoration_string(spvc_compiler compiler, SpvId id, SpvDecoration decoration,
-                                         const char *argument)
-{
-	compiler->compiler->set_decoration_string(id, static_cast<spv::Decoration>(decoration), argument);
-}
-
-void spvc_compiler_set_name(spvc_compiler compiler, SpvId id, const char *argument)
-{
-	compiler->compiler->set_name(id, argument);
-}
-
-void spvc_compiler_set_member_decoration(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                         SpvDecoration decoration, unsigned argument)
-{
-	compiler->compiler->set_member_decoration(id, member_index, static_cast<spv::Decoration>(decoration), argument);
-}
-
-void spvc_compiler_set_member_decoration_string(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                                SpvDecoration decoration, const char *argument)
-{
-	compiler->compiler->set_member_decoration_string(id, member_index, static_cast<spv::Decoration>(decoration),
-	                                                 argument);
-}
-
-void spvc_compiler_set_member_name(spvc_compiler compiler, spvc_type_id id, unsigned member_index, const char *argument)
-{
-	compiler->compiler->set_member_name(id, member_index, argument);
-}
-
-void spvc_compiler_unset_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration)
-{
-	compiler->compiler->unset_decoration(id, static_cast<spv::Decoration>(decoration));
-}
-
-void spvc_compiler_unset_member_decoration(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                           SpvDecoration decoration)
-{
-	compiler->compiler->unset_member_decoration(id, member_index, static_cast<spv::Decoration>(decoration));
-}
-
-spvc_bool spvc_compiler_has_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration)
-{
-	return compiler->compiler->has_decoration(id, static_cast<spv::Decoration>(decoration)) ? SPVC_TRUE : SPVC_FALSE;
-}
-
-spvc_bool spvc_compiler_has_member_decoration(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                              SpvDecoration decoration)
-{
-	return compiler->compiler->has_member_decoration(id, member_index, static_cast<spv::Decoration>(decoration)) ?
-	           SPVC_TRUE :
-	           SPVC_FALSE;
-}
-
-const char *spvc_compiler_get_name(spvc_compiler compiler, SpvId id)
-{
-	return compiler->compiler->get_name(id).c_str();
-}
-
-unsigned spvc_compiler_get_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration)
-{
-	return compiler->compiler->get_decoration(id, static_cast<spv::Decoration>(decoration));
-}
-
-const char *spvc_compiler_get_decoration_string(spvc_compiler compiler, SpvId id, SpvDecoration decoration)
-{
-	return compiler->compiler->get_decoration_string(id, static_cast<spv::Decoration>(decoration)).c_str();
-}
-
-unsigned spvc_compiler_get_member_decoration(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                             SpvDecoration decoration)
-{
-	return compiler->compiler->get_member_decoration(id, member_index, static_cast<spv::Decoration>(decoration));
-}
-
-const char *spvc_compiler_get_member_decoration_string(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                                       SpvDecoration decoration)
-{
-	return compiler->compiler->get_member_decoration_string(id, member_index, static_cast<spv::Decoration>(decoration))
-	    .c_str();
-}
-
-const char *spvc_compiler_get_member_name(spvc_compiler compiler, spvc_type_id id, unsigned member_index)
-{
-	return compiler->compiler->get_member_name(id, member_index).c_str();
-}
-
-spvc_result spvc_compiler_get_entry_points(spvc_compiler compiler, const spvc_entry_point **entry_points,
-                                           size_t *num_entry_points)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto entries = compiler->compiler->get_entry_points_and_stages();
-		SmallVector<spvc_entry_point> translated;
-		translated.reserve(entries.size());
-
-		for (auto &entry : entries)
-		{
-			spvc_entry_point new_entry;
-			new_entry.execution_model = static_cast<SpvExecutionModel>(entry.execution_model);
-			new_entry.name = compiler->context->allocate_name(entry.name);
-			if (!new_entry.name)
-			{
-				compiler->context->report_error("Out of memory.");
-				return SPVC_ERROR_OUT_OF_MEMORY;
-			}
-			translated.push_back(new_entry);
-		}
-
-		auto ptr = spvc_allocate<TemporaryBuffer<spvc_entry_point>>();
-		ptr->buffer = std::move(translated);
-		*entry_points = ptr->buffer.data();
-		*num_entry_points = ptr->buffer.size();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_set_entry_point(spvc_compiler compiler, const char *name, SpvExecutionModel model)
-{
-	compiler->compiler->set_entry_point(name, static_cast<spv::ExecutionModel>(model));
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_rename_entry_point(spvc_compiler compiler, const char *old_name, const char *new_name,
-                                             SpvExecutionModel model)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		compiler->compiler->rename_entry_point(old_name, new_name, static_cast<spv::ExecutionModel>(model));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-const char *spvc_compiler_get_cleansed_entry_point_name(spvc_compiler compiler, const char *name,
-                                                        SpvExecutionModel model)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto cleansed_name =
-		    compiler->compiler->get_cleansed_entry_point_name(name, static_cast<spv::ExecutionModel>(model));
-		return compiler->context->allocate_name(cleansed_name);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, nullptr)
-}
-
-void spvc_compiler_set_execution_mode(spvc_compiler compiler, SpvExecutionMode mode)
-{
-	compiler->compiler->set_execution_mode(static_cast<spv::ExecutionMode>(mode));
-}
-
-void spvc_compiler_set_execution_mode_with_arguments(spvc_compiler compiler, SpvExecutionMode mode, unsigned arg0,
-                                                     unsigned arg1,
-                                                     unsigned arg2)
-{
-	compiler->compiler->set_execution_mode(static_cast<spv::ExecutionMode>(mode), arg0, arg1, arg2);
-}
-
-void spvc_compiler_unset_execution_mode(spvc_compiler compiler, SpvExecutionMode mode)
-{
-	compiler->compiler->unset_execution_mode(static_cast<spv::ExecutionMode>(mode));
-}
-
-spvc_result spvc_compiler_get_execution_modes(spvc_compiler compiler, const SpvExecutionMode **modes, size_t *num_modes)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto ptr = spvc_allocate<TemporaryBuffer<SpvExecutionMode>>();
-
-		compiler->compiler->get_execution_mode_bitset().for_each_bit(
-		    [&](uint32_t bit) { ptr->buffer.push_back(static_cast<SpvExecutionMode>(bit)); });
-
-		*modes = ptr->buffer.data();
-		*num_modes = ptr->buffer.size();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-unsigned spvc_compiler_get_execution_mode_argument(spvc_compiler compiler, SpvExecutionMode mode)
-{
-	return compiler->compiler->get_execution_mode_argument(static_cast<spv::ExecutionMode>(mode));
-}
-
-unsigned spvc_compiler_get_execution_mode_argument_by_index(spvc_compiler compiler, SpvExecutionMode mode,
-                                                            unsigned index)
-{
-	return compiler->compiler->get_execution_mode_argument(static_cast<spv::ExecutionMode>(mode), index);
-}
-
-SpvExecutionModel spvc_compiler_get_execution_model(spvc_compiler compiler)
-{
-	return static_cast<SpvExecutionModel>(compiler->compiler->get_execution_model());
-}
-
-void spvc_compiler_update_active_builtins(spvc_compiler compiler)
-{
-       compiler->compiler->update_active_builtins();
-}
-
-spvc_bool spvc_compiler_has_active_builtin(spvc_compiler compiler, SpvBuiltIn builtin, SpvStorageClass storage)
-{
-	return compiler->compiler->has_active_builtin(static_cast<spv::BuiltIn>(builtin), static_cast<spv::StorageClass>(storage)) ?
-		SPVC_TRUE :
-		SPVC_FALSE;
-}
-
-spvc_type spvc_compiler_get_type_handle(spvc_compiler compiler, spvc_type_id id)
-{
-	// Should only throw if an intentionally garbage ID is passed, but the IDs are not type-safe.
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		return static_cast<spvc_type>(&compiler->compiler->get_type(id));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, nullptr)
-}
-
-spvc_type_id spvc_type_get_base_type_id(spvc_type type)
-{
-	return type->self;
-}
-
-static spvc_basetype convert_basetype(SPIRType::BaseType type)
-{
-	// For now the enums match up.
-	return static_cast<spvc_basetype>(type);
-}
-
-spvc_basetype spvc_type_get_basetype(spvc_type type)
-{
-	return convert_basetype(type->basetype);
-}
-
-unsigned spvc_type_get_bit_width(spvc_type type)
-{
-	return type->width;
-}
-
-unsigned spvc_type_get_vector_size(spvc_type type)
-{
-	return type->vecsize;
-}
-
-unsigned spvc_type_get_columns(spvc_type type)
-{
-	return type->columns;
-}
-
-unsigned spvc_type_get_num_array_dimensions(spvc_type type)
-{
-	return unsigned(type->array.size());
-}
-
-spvc_bool spvc_type_array_dimension_is_literal(spvc_type type, unsigned dimension)
-{
-	return type->array_size_literal[dimension] ? SPVC_TRUE : SPVC_FALSE;
-}
-
-SpvId spvc_type_get_array_dimension(spvc_type type, unsigned dimension)
-{
-	return type->array[dimension];
-}
-
-unsigned spvc_type_get_num_member_types(spvc_type type)
-{
-	return unsigned(type->member_types.size());
-}
-
-spvc_type_id spvc_type_get_member_type(spvc_type type, unsigned index)
-{
-	return type->member_types[index];
-}
-
-SpvStorageClass spvc_type_get_storage_class(spvc_type type)
-{
-	return static_cast<SpvStorageClass>(type->storage);
-}
-
-// Image type query.
-spvc_type_id spvc_type_get_image_sampled_type(spvc_type type)
-{
-	return type->image.type;
-}
-
-SpvDim spvc_type_get_image_dimension(spvc_type type)
-{
-	return static_cast<SpvDim>(type->image.dim);
-}
-
-spvc_bool spvc_type_get_image_is_depth(spvc_type type)
-{
-	return type->image.depth ? SPVC_TRUE : SPVC_FALSE;
-}
-
-spvc_bool spvc_type_get_image_arrayed(spvc_type type)
-{
-	return type->image.arrayed ? SPVC_TRUE : SPVC_FALSE;
-}
-
-spvc_bool spvc_type_get_image_multisampled(spvc_type type)
-{
-	return type->image.ms ? SPVC_TRUE : SPVC_FALSE;
-}
-
-spvc_bool spvc_type_get_image_is_storage(spvc_type type)
-{
-	return type->image.sampled == 2 ? SPVC_TRUE : SPVC_FALSE;
-}
-
-SpvImageFormat spvc_type_get_image_storage_format(spvc_type type)
-{
-	return static_cast<SpvImageFormat>(static_cast<const SPIRType *>(type)->image.format);
-}
-
-SpvAccessQualifier spvc_type_get_image_access_qualifier(spvc_type type)
-{
-	return static_cast<SpvAccessQualifier>(static_cast<const SPIRType *>(type)->image.access);
-}
-
-spvc_result spvc_compiler_get_declared_struct_size(spvc_compiler compiler, spvc_type struct_type, size_t *size)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*size = compiler->compiler->get_declared_struct_size(*static_cast<const SPIRType *>(struct_type));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_get_declared_struct_size_runtime_array(spvc_compiler compiler, spvc_type struct_type,
-                                                                 size_t array_size, size_t *size)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*size = compiler->compiler->get_declared_struct_size_runtime_array(*static_cast<const SPIRType *>(struct_type),
-		                                                                   array_size);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_get_declared_struct_member_size(spvc_compiler compiler, spvc_type struct_type, unsigned index, size_t *size)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*size = compiler->compiler->get_declared_struct_member_size(*static_cast<const SPIRType *>(struct_type), index);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_type_struct_member_offset(spvc_compiler compiler, spvc_type type, unsigned index, unsigned *offset)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*offset = compiler->compiler->type_struct_member_offset(*static_cast<const SPIRType *>(type), index);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_type_struct_member_array_stride(spvc_compiler compiler, spvc_type type, unsigned index, unsigned *stride)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*stride = compiler->compiler->type_struct_member_array_stride(*static_cast<const SPIRType *>(type), index);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_type_struct_member_matrix_stride(spvc_compiler compiler, spvc_type type, unsigned index, unsigned *stride)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*stride = compiler->compiler->type_struct_member_matrix_stride(*static_cast<const SPIRType *>(type), index);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_build_dummy_sampler_for_combined_images(spvc_compiler compiler, spvc_variable_id *id)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		*id = compiler->compiler->build_dummy_sampler_for_combined_images();
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_build_combined_image_samplers(spvc_compiler compiler)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		compiler->compiler->build_combined_image_samplers();
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_UNSUPPORTED_SPIRV)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_get_combined_image_samplers(spvc_compiler compiler,
-                                                      const spvc_combined_image_sampler **samplers,
-                                                      size_t *num_samplers)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto combined = compiler->compiler->get_combined_image_samplers();
-		SmallVector<spvc_combined_image_sampler> translated;
-		translated.reserve(combined.size());
-		for (auto &c : combined)
-		{
-			spvc_combined_image_sampler trans = { c.combined_id, c.image_id, c.sampler_id };
-			translated.push_back(trans);
-		}
-
-		auto ptr = spvc_allocate<TemporaryBuffer<spvc_combined_image_sampler>>();
-		ptr->buffer = std::move(translated);
-		*samplers = ptr->buffer.data();
-		*num_samplers = ptr->buffer.size();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_get_specialization_constants(spvc_compiler compiler,
-                                                       const spvc_specialization_constant **constants,
-                                                       size_t *num_constants)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto spec_constants = compiler->compiler->get_specialization_constants();
-		SmallVector<spvc_specialization_constant> translated;
-		translated.reserve(spec_constants.size());
-		for (auto &c : spec_constants)
-		{
-			spvc_specialization_constant trans = { c.id, c.constant_id };
-			translated.push_back(trans);
-		}
-
-		auto ptr = spvc_allocate<TemporaryBuffer<spvc_specialization_constant>>();
-		ptr->buffer = std::move(translated);
-		*constants = ptr->buffer.data();
-		*num_constants = ptr->buffer.size();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-spvc_constant spvc_compiler_get_constant_handle(spvc_compiler compiler, spvc_variable_id id)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		return static_cast<spvc_constant>(&compiler->compiler->get_constant(id));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, nullptr)
-}
-
-spvc_constant_id spvc_compiler_get_work_group_size_specialization_constants(spvc_compiler compiler,
-                                                                            spvc_specialization_constant *x,
-                                                                            spvc_specialization_constant *y,
-                                                                            spvc_specialization_constant *z)
-{
-	SpecializationConstant tmpx;
-	SpecializationConstant tmpy;
-	SpecializationConstant tmpz;
-	spvc_constant_id ret = compiler->compiler->get_work_group_size_specialization_constants(tmpx, tmpy, tmpz);
-	x->id = tmpx.id;
-	x->constant_id = tmpx.constant_id;
-	y->id = tmpy.id;
-	y->constant_id = tmpy.constant_id;
-	z->id = tmpz.id;
-	z->constant_id = tmpz.constant_id;
-	return ret;
-}
-
-spvc_result spvc_compiler_get_active_buffer_ranges(spvc_compiler compiler,
-                                                   spvc_variable_id id,
-                                                   const spvc_buffer_range **ranges,
-                                                   size_t *num_ranges)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto active_ranges = compiler->compiler->get_active_buffer_ranges(id);
-		SmallVector<spvc_buffer_range> translated;
-		translated.reserve(active_ranges.size());
-		for (auto &r : active_ranges)
-		{
-			spvc_buffer_range trans = { r.index, r.offset, r.range };
-			translated.push_back(trans);
-		}
-
-		auto ptr = spvc_allocate<TemporaryBuffer<spvc_buffer_range>>();
-		ptr->buffer = std::move(translated);
-		*ranges = ptr->buffer.data();
-		*num_ranges = ptr->buffer.size();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-float spvc_constant_get_scalar_fp16(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_f16(column, row);
-}
-
-float spvc_constant_get_scalar_fp32(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_f32(column, row);
-}
-
-double spvc_constant_get_scalar_fp64(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_f64(column, row);
-}
-
-unsigned spvc_constant_get_scalar_u32(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar(column, row);
-}
-
-int spvc_constant_get_scalar_i32(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_i32(column, row);
-}
-
-unsigned spvc_constant_get_scalar_u16(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_u16(column, row);
-}
-
-int spvc_constant_get_scalar_i16(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_i16(column, row);
-}
-
-unsigned spvc_constant_get_scalar_u8(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_u8(column, row);
-}
-
-int spvc_constant_get_scalar_i8(spvc_constant constant, unsigned column, unsigned row)
-{
-	return constant->scalar_i8(column, row);
-}
-
-void spvc_constant_get_subconstants(spvc_constant constant, const spvc_constant_id **constituents, size_t *count)
-{
-	static_assert(sizeof(spvc_constant_id) == sizeof(constant->subconstants.front()), "ID size is not consistent.");
-	*constituents = reinterpret_cast<spvc_constant_id *>(constant->subconstants.data());
-	*count = constant->subconstants.size();
-}
-
-spvc_type_id spvc_constant_get_type(spvc_constant constant)
-{
-	return constant->constant_type;
-}
-
-void spvc_constant_set_scalar_fp16(spvc_constant constant, unsigned column, unsigned row, unsigned short value)
-{
-	constant->m.c[column].r[row].u32 = value;
-}
-
-void spvc_constant_set_scalar_fp32(spvc_constant constant, unsigned column, unsigned row, float value)
-{
-	constant->m.c[column].r[row].f32 = value;
-}
-
-void spvc_constant_set_scalar_fp64(spvc_constant constant, unsigned column, unsigned row, double value)
-{
-	constant->m.c[column].r[row].f64 = value;
-}
-
-void spvc_constant_set_scalar_u32(spvc_constant constant, unsigned column, unsigned row, unsigned value)
-{
-	constant->m.c[column].r[row].u32 = value;
-}
-
-void spvc_constant_set_scalar_i32(spvc_constant constant, unsigned column, unsigned row, int value)
-{
-	constant->m.c[column].r[row].i32 = value;
-}
-
-void spvc_constant_set_scalar_u16(spvc_constant constant, unsigned column, unsigned row, unsigned short value)
-{
-	constant->m.c[column].r[row].u32 = uint32_t(value);
-}
-
-void spvc_constant_set_scalar_i16(spvc_constant constant, unsigned column, unsigned row, signed short value)
-{
-	constant->m.c[column].r[row].u32 = uint32_t(value);
-}
-
-void spvc_constant_set_scalar_u8(spvc_constant constant, unsigned column, unsigned row, unsigned char value)
-{
-	constant->m.c[column].r[row].u32 = uint32_t(value);
-}
-
-void spvc_constant_set_scalar_i8(spvc_constant constant, unsigned column, unsigned row, signed char value)
-{
-	constant->m.c[column].r[row].u32 = uint32_t(value);
-}
-
-spvc_bool spvc_compiler_get_binary_offset_for_decoration(spvc_compiler compiler, spvc_variable_id id,
-                                                         SpvDecoration decoration,
-                                                         unsigned *word_offset)
-{
-	uint32_t off = 0;
-	bool ret = compiler->compiler->get_binary_offset_for_decoration(id, static_cast<spv::Decoration>(decoration), off);
-	if (ret)
-	{
-		*word_offset = off;
-		return SPVC_TRUE;
-	}
-	else
-		return SPVC_FALSE;
-}
-
-spvc_bool spvc_compiler_buffer_is_hlsl_counter_buffer(spvc_compiler compiler, spvc_variable_id id)
-{
-	return compiler->compiler->buffer_is_hlsl_counter_buffer(id) ? SPVC_TRUE : SPVC_FALSE;
-}
-
-spvc_bool spvc_compiler_buffer_get_hlsl_counter_buffer(spvc_compiler compiler, spvc_variable_id id,
-                                                       spvc_variable_id *counter_id)
-{
-	uint32_t buffer;
-	bool ret = compiler->compiler->buffer_get_hlsl_counter_buffer(id, buffer);
-	if (ret)
-	{
-		*counter_id = buffer;
-		return SPVC_TRUE;
-	}
-	else
-		return SPVC_FALSE;
-}
-
-spvc_result spvc_compiler_get_declared_capabilities(spvc_compiler compiler, const SpvCapability **capabilities,
-                                                    size_t *num_capabilities)
-{
-	auto &caps = compiler->compiler->get_declared_capabilities();
-	static_assert(sizeof(SpvCapability) == sizeof(spv::Capability), "Enum size mismatch.");
-	*capabilities = reinterpret_cast<const SpvCapability *>(caps.data());
-	*num_capabilities = caps.size();
-	return SPVC_SUCCESS;
-}
-
-spvc_result spvc_compiler_get_declared_extensions(spvc_compiler compiler, const char ***extensions,
-                                                  size_t *num_extensions)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto &exts = compiler->compiler->get_declared_extensions();
-		SmallVector<const char *> duped;
-		duped.reserve(exts.size());
-		for (auto &ext : exts)
-			duped.push_back(compiler->context->allocate_name(ext));
-
-		auto ptr = spvc_allocate<TemporaryBuffer<const char *>>();
-		ptr->buffer = std::move(duped);
-		*extensions = ptr->buffer.data();
-		*num_extensions = ptr->buffer.size();
-		compiler->context->allocations.push_back(std::move(ptr));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_OUT_OF_MEMORY)
-	return SPVC_SUCCESS;
-}
-
-const char *spvc_compiler_get_remapped_declared_block_name(spvc_compiler compiler, spvc_variable_id id)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto name = compiler->compiler->get_remapped_declared_block_name(id);
-		return compiler->context->allocate_name(name);
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, nullptr)
-}
-
-spvc_result spvc_compiler_get_buffer_block_decorations(spvc_compiler compiler, spvc_variable_id id,
-                                                       const SpvDecoration **decorations, size_t *num_decorations)
-{
-	SPVC_BEGIN_SAFE_SCOPE
-	{
-		auto flags = compiler->compiler->get_buffer_block_flags(id);
-		auto bitset = spvc_allocate<TemporaryBuffer<SpvDecoration>>();
-
-		flags.for_each_bit([&](uint32_t bit) { bitset->buffer.push_back(static_cast<SpvDecoration>(bit)); });
-
-		*decorations = bitset->buffer.data();
-		*num_decorations = bitset->buffer.size();
-		compiler->context->allocations.push_back(std::move(bitset));
-	}
-	SPVC_END_SAFE_SCOPE(compiler->context, SPVC_ERROR_INVALID_ARGUMENT)
-	return SPVC_SUCCESS;
-}
-
-unsigned spvc_msl_get_aux_buffer_struct_version(void)
-{
-	return SPVC_MSL_AUX_BUFFER_STRUCT_VERSION;
-}
-
-void spvc_msl_vertex_attribute_init(spvc_msl_vertex_attribute *attr)
-{
-#if SPIRV_CROSS_C_API_MSL
-	// Crude, but works.
-	MSLShaderInterfaceVariable attr_default;
-	attr->location = attr_default.location;
-	attr->format = static_cast<spvc_msl_vertex_format>(attr_default.format);
-	attr->builtin = static_cast<SpvBuiltIn>(attr_default.builtin);
-#else
-	memset(attr, 0, sizeof(*attr));
-#endif
-}
-
-void spvc_msl_shader_interface_var_init(spvc_msl_shader_interface_var *var)
-{
-#if SPIRV_CROSS_C_API_MSL
-	MSLShaderInterfaceVariable var_default;
-	var->location = var_default.location;
-	var->format = static_cast<spvc_msl_shader_variable_format>(var_default.format);
-	var->builtin = static_cast<SpvBuiltIn>(var_default.builtin);
-	var->vecsize = var_default.vecsize;
-#else
-	memset(var, 0, sizeof(*var));
-#endif
-}
-
-void spvc_msl_shader_input_init(spvc_msl_shader_input *input)
-{
-	spvc_msl_shader_interface_var_init(input);
-}
-
-void spvc_msl_shader_interface_var_init_2(spvc_msl_shader_interface_var_2 *var)
-{
-#if SPIRV_CROSS_C_API_MSL
-	MSLShaderInterfaceVariable var_default;
-	var->location = var_default.location;
-	var->format = static_cast<spvc_msl_shader_variable_format>(var_default.format);
-	var->builtin = static_cast<SpvBuiltIn>(var_default.builtin);
-	var->vecsize = var_default.vecsize;
-	var->rate = static_cast<spvc_msl_shader_variable_rate>(var_default.rate);
-#else
-	memset(var, 0, sizeof(*var));
-#endif
-}
-
-void spvc_msl_resource_binding_init(spvc_msl_resource_binding *binding)
-{
-#if SPIRV_CROSS_C_API_MSL
-	MSLResourceBinding binding_default;
-	binding->desc_set = binding_default.desc_set;
-	binding->binding = binding_default.binding;
-	binding->msl_buffer = binding_default.msl_buffer;
-	binding->msl_texture = binding_default.msl_texture;
-	binding->msl_sampler = binding_default.msl_sampler;
-	binding->stage = static_cast<SpvExecutionModel>(binding_default.stage);
-#else
-	memset(binding, 0, sizeof(*binding));
-#endif
-}
-
-void spvc_hlsl_resource_binding_init(spvc_hlsl_resource_binding *binding)
-{
-#if SPIRV_CROSS_C_API_HLSL
-	HLSLResourceBinding binding_default;
-	binding->desc_set = binding_default.desc_set;
-	binding->binding = binding_default.binding;
-	binding->cbv.register_binding = binding_default.cbv.register_binding;
-	binding->cbv.register_space = binding_default.cbv.register_space;
-	binding->srv.register_binding = binding_default.srv.register_binding;
-	binding->srv.register_space = binding_default.srv.register_space;
-	binding->uav.register_binding = binding_default.uav.register_binding;
-	binding->uav.register_space = binding_default.uav.register_space;
-	binding->sampler.register_binding = binding_default.sampler.register_binding;
-	binding->sampler.register_space = binding_default.sampler.register_space;
-	binding->stage = static_cast<SpvExecutionModel>(binding_default.stage);
-#else
-	memset(binding, 0, sizeof(*binding));
-#endif
-}
-
-void spvc_msl_constexpr_sampler_init(spvc_msl_constexpr_sampler *sampler)
-{
-#if SPIRV_CROSS_C_API_MSL
-	MSLConstexprSampler defaults;
-	sampler->anisotropy_enable = defaults.anisotropy_enable ? SPVC_TRUE : SPVC_FALSE;
-	sampler->border_color = static_cast<spvc_msl_sampler_border_color>(defaults.border_color);
-	sampler->compare_enable = defaults.compare_enable ? SPVC_TRUE : SPVC_FALSE;
-	sampler->coord = static_cast<spvc_msl_sampler_coord>(defaults.coord);
-	sampler->compare_func = static_cast<spvc_msl_sampler_compare_func>(defaults.compare_func);
-	sampler->lod_clamp_enable = defaults.lod_clamp_enable ? SPVC_TRUE : SPVC_FALSE;
-	sampler->lod_clamp_max = defaults.lod_clamp_max;
-	sampler->lod_clamp_min = defaults.lod_clamp_min;
-	sampler->mag_filter = static_cast<spvc_msl_sampler_filter>(defaults.mag_filter);
-	sampler->min_filter = static_cast<spvc_msl_sampler_filter>(defaults.min_filter);
-	sampler->mip_filter = static_cast<spvc_msl_sampler_mip_filter>(defaults.mip_filter);
-	sampler->max_anisotropy = defaults.max_anisotropy;
-	sampler->s_address = static_cast<spvc_msl_sampler_address>(defaults.s_address);
-	sampler->t_address = static_cast<spvc_msl_sampler_address>(defaults.t_address);
-	sampler->r_address = static_cast<spvc_msl_sampler_address>(defaults.r_address);
-#else
-	memset(sampler, 0, sizeof(*sampler));
-#endif
-}
-
-void spvc_msl_sampler_ycbcr_conversion_init(spvc_msl_sampler_ycbcr_conversion *conv)
-{
-#if SPIRV_CROSS_C_API_MSL
-	MSLConstexprSampler defaults;
-	conv->planes = defaults.planes;
-	conv->resolution = static_cast<spvc_msl_format_resolution>(defaults.resolution);
-	conv->chroma_filter = static_cast<spvc_msl_sampler_filter>(defaults.chroma_filter);
-	conv->x_chroma_offset = static_cast<spvc_msl_chroma_location>(defaults.x_chroma_offset);
-	conv->y_chroma_offset = static_cast<spvc_msl_chroma_location>(defaults.y_chroma_offset);
-	for (int i = 0; i < 4; i++)
-		conv->swizzle[i] = static_cast<spvc_msl_component_swizzle>(defaults.swizzle[i]);
-	conv->ycbcr_model = static_cast<spvc_msl_sampler_ycbcr_model_conversion>(defaults.ycbcr_model);
-	conv->ycbcr_range = static_cast<spvc_msl_sampler_ycbcr_range>(defaults.ycbcr_range);
-#else
-	memset(conv, 0, sizeof(*conv));
-#endif
-}
-
-unsigned spvc_compiler_get_current_id_bound(spvc_compiler compiler)
-{
-	return compiler->compiler->get_current_id_bound();
-}
-
-void spvc_get_version(unsigned *major, unsigned *minor, unsigned *patch)
-{
-	*major = SPVC_C_API_VERSION_MAJOR;
-	*minor = SPVC_C_API_VERSION_MINOR;
-	*patch = SPVC_C_API_VERSION_PATCH;
-}
-
-const char *spvc_get_commit_revision_and_timestamp(void)
-{
-#ifdef HAVE_SPIRV_CROSS_GIT_VERSION
-	return SPIRV_CROSS_GIT_REVISION;
-#else
-	return "";
-#endif
-}
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif

+ 0 - 1097
src/libraries/spirv_cross/spirv_cross_c.h

@@ -1,1097 +0,0 @@
-/*
- * Copyright 2019-2021 Hans-Kristian Arntzen
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * At your option, you may choose to accept this material under either:
- *  1. The Apache License, Version 2.0, found at <http://www.apache.org/licenses/LICENSE-2.0>, or
- *  2. The MIT License, found at <http://opensource.org/licenses/MIT>.
- */
-
-#ifndef SPIRV_CROSS_C_API_H
-#define SPIRV_CROSS_C_API_H
-
-#include <stddef.h>
-#include "spirv.h"
-
-/*
- * C89-compatible wrapper for SPIRV-Cross' API.
- * Documentation here is sparse unless the behavior does not map 1:1 with C++ API.
- * It is recommended to look at the canonical C++ API for more detailed information.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Bumped if ABI or API breaks backwards compatibility. */
-#define SPVC_C_API_VERSION_MAJOR 0
-/* Bumped if APIs or enumerations are added in a backwards compatible way. */
-#define SPVC_C_API_VERSION_MINOR 58
-/* Bumped if internal implementation details change. */
-#define SPVC_C_API_VERSION_PATCH 0
-
-#if !defined(SPVC_PUBLIC_API)
-#if defined(SPVC_EXPORT_SYMBOLS)
-/* Exports symbols. Standard C calling convention is used. */
-#if defined(__GNUC__)
-#define SPVC_PUBLIC_API __attribute__((visibility("default")))
-#elif defined(_MSC_VER)
-#define SPVC_PUBLIC_API __declspec(dllexport)
-#else
-#define SPVC_PUBLIC_API
-#endif
-#else
-#define SPVC_PUBLIC_API
-#endif
-#endif
-
-/*
- * Gets the SPVC_C_API_VERSION_* used to build this library.
- * Can be used to check for ABI mismatch if so-versioning did not catch it.
- */
-SPVC_PUBLIC_API void spvc_get_version(unsigned *major, unsigned *minor, unsigned *patch);
-
-/* Gets a human readable version string to identify which commit a particular binary was created from. */
-SPVC_PUBLIC_API const char *spvc_get_commit_revision_and_timestamp(void);
-
-/* These types are opaque to the user. */
-typedef struct spvc_context_s *spvc_context;
-typedef struct spvc_parsed_ir_s *spvc_parsed_ir;
-typedef struct spvc_compiler_s *spvc_compiler;
-typedef struct spvc_compiler_options_s *spvc_compiler_options;
-typedef struct spvc_resources_s *spvc_resources;
-struct spvc_type_s;
-typedef const struct spvc_type_s *spvc_type;
-typedef struct spvc_constant_s *spvc_constant;
-struct spvc_set_s;
-typedef const struct spvc_set_s *spvc_set;
-
-/*
- * Shallow typedefs. All SPIR-V IDs are plain 32-bit numbers, but this helps communicate which data is used.
- * Maps to a SPIRType.
- */
-typedef SpvId spvc_type_id;
-/* Maps to a SPIRVariable. */
-typedef SpvId spvc_variable_id;
-/* Maps to a SPIRConstant. */
-typedef SpvId spvc_constant_id;
-
-/* See C++ API. */
-typedef struct spvc_reflected_resource
-{
-	spvc_variable_id id;
-	spvc_type_id base_type_id;
-	spvc_type_id type_id;
-	const char *name;
-} spvc_reflected_resource;
-
-typedef struct spvc_reflected_builtin_resource
-{
-	SpvBuiltIn builtin;
-	spvc_type_id value_type_id;
-	spvc_reflected_resource resource;
-} spvc_reflected_builtin_resource;
-
-/* See C++ API. */
-typedef struct spvc_entry_point
-{
-	SpvExecutionModel execution_model;
-	const char *name;
-} spvc_entry_point;
-
-/* See C++ API. */
-typedef struct spvc_combined_image_sampler
-{
-	spvc_variable_id combined_id;
-	spvc_variable_id image_id;
-	spvc_variable_id sampler_id;
-} spvc_combined_image_sampler;
-
-/* See C++ API. */
-typedef struct spvc_specialization_constant
-{
-	spvc_constant_id id;
-	unsigned constant_id;
-} spvc_specialization_constant;
-
-/* See C++ API. */
-typedef struct spvc_buffer_range
-{
-	unsigned index;
-	size_t offset;
-	size_t range;
-} spvc_buffer_range;
-
-/* See C++ API. */
-typedef struct spvc_hlsl_root_constants
-{
-	unsigned start;
-	unsigned end;
-	unsigned binding;
-	unsigned space;
-} spvc_hlsl_root_constants;
-
-/* See C++ API. */
-typedef struct spvc_hlsl_vertex_attribute_remap
-{
-	unsigned location;
-	const char *semantic;
-} spvc_hlsl_vertex_attribute_remap;
-
-/*
- * Be compatible with non-C99 compilers, which do not have stdbool.
- * Only recent MSVC compilers supports this for example, and ideally SPIRV-Cross should be linkable
- * from a wide range of compilers in its C wrapper.
- */
-typedef unsigned char spvc_bool;
-#define SPVC_TRUE ((spvc_bool)1)
-#define SPVC_FALSE ((spvc_bool)0)
-
-typedef enum spvc_result
-{
-	/* Success. */
-	SPVC_SUCCESS = 0,
-
-	/* The SPIR-V is invalid. Should have been caught by validation ideally. */
-	SPVC_ERROR_INVALID_SPIRV = -1,
-
-	/* The SPIR-V might be valid or invalid, but SPIRV-Cross currently cannot correctly translate this to your target language. */
-	SPVC_ERROR_UNSUPPORTED_SPIRV = -2,
-
-	/* If for some reason we hit this, new or malloc failed. */
-	SPVC_ERROR_OUT_OF_MEMORY = -3,
-
-	/* Invalid API argument. */
-	SPVC_ERROR_INVALID_ARGUMENT = -4,
-
-	SPVC_ERROR_INT_MAX = 0x7fffffff
-} spvc_result;
-
-typedef enum spvc_capture_mode
-{
-	/* The Parsed IR payload will be copied, and the handle can be reused to create other compiler instances. */
-	SPVC_CAPTURE_MODE_COPY = 0,
-
-	/*
-	 * The payload will now be owned by the compiler.
-	 * parsed_ir should now be considered a dead blob and must not be used further.
-	 * This is optimal for performance and should be the go-to option.
-	 */
-	SPVC_CAPTURE_MODE_TAKE_OWNERSHIP = 1,
-
-	SPVC_CAPTURE_MODE_INT_MAX = 0x7fffffff
-} spvc_capture_mode;
-
-typedef enum spvc_backend
-{
-	/* This backend can only perform reflection, no compiler options are supported. Maps to spirv_cross::Compiler. */
-	SPVC_BACKEND_NONE = 0,
-	SPVC_BACKEND_GLSL = 1, /* spirv_cross::CompilerGLSL */
-	SPVC_BACKEND_HLSL = 2, /* CompilerHLSL */
-	SPVC_BACKEND_MSL = 3, /* CompilerMSL */
-	SPVC_BACKEND_CPP = 4, /* CompilerCPP */
-	SPVC_BACKEND_JSON = 5, /* CompilerReflection w/ JSON backend */
-	SPVC_BACKEND_INT_MAX = 0x7fffffff
-} spvc_backend;
-
-/* Maps to C++ API. */
-typedef enum spvc_resource_type
-{
-	SPVC_RESOURCE_TYPE_UNKNOWN = 0,
-	SPVC_RESOURCE_TYPE_UNIFORM_BUFFER = 1,
-	SPVC_RESOURCE_TYPE_STORAGE_BUFFER = 2,
-	SPVC_RESOURCE_TYPE_STAGE_INPUT = 3,
-	SPVC_RESOURCE_TYPE_STAGE_OUTPUT = 4,
-	SPVC_RESOURCE_TYPE_SUBPASS_INPUT = 5,
-	SPVC_RESOURCE_TYPE_STORAGE_IMAGE = 6,
-	SPVC_RESOURCE_TYPE_SAMPLED_IMAGE = 7,
-	SPVC_RESOURCE_TYPE_ATOMIC_COUNTER = 8,
-	SPVC_RESOURCE_TYPE_PUSH_CONSTANT = 9,
-	SPVC_RESOURCE_TYPE_SEPARATE_IMAGE = 10,
-	SPVC_RESOURCE_TYPE_SEPARATE_SAMPLERS = 11,
-	SPVC_RESOURCE_TYPE_ACCELERATION_STRUCTURE = 12,
-	SPVC_RESOURCE_TYPE_RAY_QUERY = 13,
-	SPVC_RESOURCE_TYPE_SHADER_RECORD_BUFFER = 14,
-	SPVC_RESOURCE_TYPE_INT_MAX = 0x7fffffff
-} spvc_resource_type;
-
-typedef enum spvc_builtin_resource_type
-{
-	SPVC_BUILTIN_RESOURCE_TYPE_UNKNOWN = 0,
-	SPVC_BUILTIN_RESOURCE_TYPE_STAGE_INPUT = 1,
-	SPVC_BUILTIN_RESOURCE_TYPE_STAGE_OUTPUT = 2,
-	SPVC_BUILTIN_RESOURCE_TYPE_INT_MAX = 0x7fffffff
-} spvc_builtin_resource_type;
-
-/* Maps to spirv_cross::SPIRType::BaseType. */
-typedef enum spvc_basetype
-{
-	SPVC_BASETYPE_UNKNOWN = 0,
-	SPVC_BASETYPE_VOID = 1,
-	SPVC_BASETYPE_BOOLEAN = 2,
-	SPVC_BASETYPE_INT8 = 3,
-	SPVC_BASETYPE_UINT8 = 4,
-	SPVC_BASETYPE_INT16 = 5,
-	SPVC_BASETYPE_UINT16 = 6,
-	SPVC_BASETYPE_INT32 = 7,
-	SPVC_BASETYPE_UINT32 = 8,
-	SPVC_BASETYPE_INT64 = 9,
-	SPVC_BASETYPE_UINT64 = 10,
-	SPVC_BASETYPE_ATOMIC_COUNTER = 11,
-	SPVC_BASETYPE_FP16 = 12,
-	SPVC_BASETYPE_FP32 = 13,
-	SPVC_BASETYPE_FP64 = 14,
-	SPVC_BASETYPE_STRUCT = 15,
-	SPVC_BASETYPE_IMAGE = 16,
-	SPVC_BASETYPE_SAMPLED_IMAGE = 17,
-	SPVC_BASETYPE_SAMPLER = 18,
-	SPVC_BASETYPE_ACCELERATION_STRUCTURE = 19,
-
-	SPVC_BASETYPE_INT_MAX = 0x7fffffff
-} spvc_basetype;
-
-#define SPVC_COMPILER_OPTION_COMMON_BIT 0x1000000
-#define SPVC_COMPILER_OPTION_GLSL_BIT 0x2000000
-#define SPVC_COMPILER_OPTION_HLSL_BIT 0x4000000
-#define SPVC_COMPILER_OPTION_MSL_BIT 0x8000000
-#define SPVC_COMPILER_OPTION_LANG_BITS 0x0f000000
-#define SPVC_COMPILER_OPTION_ENUM_BITS 0xffffff
-
-#define SPVC_MAKE_MSL_VERSION(major, minor, patch) ((major) * 10000 + (minor) * 100 + (patch))
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_platform
-{
-	SPVC_MSL_PLATFORM_IOS = 0,
-	SPVC_MSL_PLATFORM_MACOS = 1,
-	SPVC_MSL_PLATFORM_MAX_INT = 0x7fffffff
-} spvc_msl_platform;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_index_type
-{
-	SPVC_MSL_INDEX_TYPE_NONE = 0,
-	SPVC_MSL_INDEX_TYPE_UINT16 = 1,
-	SPVC_MSL_INDEX_TYPE_UINT32 = 2,
-	SPVC_MSL_INDEX_TYPE_MAX_INT = 0x7fffffff
-} spvc_msl_index_type;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_shader_variable_format
-{
-	SPVC_MSL_SHADER_VARIABLE_FORMAT_OTHER = 0,
-	SPVC_MSL_SHADER_VARIABLE_FORMAT_UINT8 = 1,
-	SPVC_MSL_SHADER_VARIABLE_FORMAT_UINT16 = 2,
-	SPVC_MSL_SHADER_VARIABLE_FORMAT_ANY16 = 3,
-	SPVC_MSL_SHADER_VARIABLE_FORMAT_ANY32 = 4,
-
-	/* Deprecated names. */
-	SPVC_MSL_VERTEX_FORMAT_OTHER = SPVC_MSL_SHADER_VARIABLE_FORMAT_OTHER,
-	SPVC_MSL_VERTEX_FORMAT_UINT8 = SPVC_MSL_SHADER_VARIABLE_FORMAT_UINT8,
-	SPVC_MSL_VERTEX_FORMAT_UINT16 = SPVC_MSL_SHADER_VARIABLE_FORMAT_UINT16,
-	SPVC_MSL_SHADER_INPUT_FORMAT_OTHER = SPVC_MSL_SHADER_VARIABLE_FORMAT_OTHER,
-	SPVC_MSL_SHADER_INPUT_FORMAT_UINT8 = SPVC_MSL_SHADER_VARIABLE_FORMAT_UINT8,
-	SPVC_MSL_SHADER_INPUT_FORMAT_UINT16 = SPVC_MSL_SHADER_VARIABLE_FORMAT_UINT16,
-	SPVC_MSL_SHADER_INPUT_FORMAT_ANY16 = SPVC_MSL_SHADER_VARIABLE_FORMAT_ANY16,
-	SPVC_MSL_SHADER_INPUT_FORMAT_ANY32 = SPVC_MSL_SHADER_VARIABLE_FORMAT_ANY32,
-
-
-	SPVC_MSL_SHADER_INPUT_FORMAT_INT_MAX = 0x7fffffff
-} spvc_msl_shader_variable_format, spvc_msl_shader_input_format, spvc_msl_vertex_format;
-
-/* Maps to C++ API. Deprecated; use spvc_msl_shader_interface_var. */
-typedef struct spvc_msl_vertex_attribute
-{
-	unsigned location;
-
-	/* Obsolete, do not use. Only lingers on for ABI compatibility. */
-	unsigned msl_buffer;
-	/* Obsolete, do not use. Only lingers on for ABI compatibility. */
-	unsigned msl_offset;
-	/* Obsolete, do not use. Only lingers on for ABI compatibility. */
-	unsigned msl_stride;
-	/* Obsolete, do not use. Only lingers on for ABI compatibility. */
-	spvc_bool per_instance;
-
-	spvc_msl_vertex_format format;
-	SpvBuiltIn builtin;
-} spvc_msl_vertex_attribute;
-
-/*
- * Initializes the vertex attribute struct.
- */
-SPVC_PUBLIC_API void spvc_msl_vertex_attribute_init(spvc_msl_vertex_attribute *attr);
-
-/* Maps to C++ API. Deprecated; use spvc_msl_shader_interface_var_2. */
-typedef struct spvc_msl_shader_interface_var
-{
-	unsigned location;
-	spvc_msl_vertex_format format;
-	SpvBuiltIn builtin;
-	unsigned vecsize;
-} spvc_msl_shader_interface_var, spvc_msl_shader_input;
-
-/*
- * Initializes the shader input struct.
- * Deprecated. Use spvc_msl_shader_interface_var_init_2().
- */
-SPVC_PUBLIC_API void spvc_msl_shader_interface_var_init(spvc_msl_shader_interface_var *var);
-/*
- * Deprecated. Use spvc_msl_shader_interface_var_init_2().
- */
-SPVC_PUBLIC_API void spvc_msl_shader_input_init(spvc_msl_shader_input *input);
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_shader_variable_rate
-{
-	SPVC_MSL_SHADER_VARIABLE_RATE_PER_VERTEX = 0,
-	SPVC_MSL_SHADER_VARIABLE_RATE_PER_PRIMITIVE = 1,
-	SPVC_MSL_SHADER_VARIABLE_RATE_PER_PATCH = 2,
-
-	SPVC_MSL_SHADER_VARIABLE_RATE_INT_MAX = 0x7fffffff,
-} spvc_msl_shader_variable_rate;
-
-/* Maps to C++ API. */
-typedef struct spvc_msl_shader_interface_var_2
-{
-	unsigned location;
-	spvc_msl_shader_variable_format format;
-	SpvBuiltIn builtin;
-	unsigned vecsize;
-	spvc_msl_shader_variable_rate rate;
-} spvc_msl_shader_interface_var_2;
-
-/*
- * Initializes the shader interface variable struct.
- */
-SPVC_PUBLIC_API void spvc_msl_shader_interface_var_init_2(spvc_msl_shader_interface_var_2 *var);
-
-/* Maps to C++ API. */
-typedef struct spvc_msl_resource_binding
-{
-	SpvExecutionModel stage;
-	unsigned desc_set;
-	unsigned binding;
-	unsigned msl_buffer;
-	unsigned msl_texture;
-	unsigned msl_sampler;
-} spvc_msl_resource_binding;
-
-/*
- * Initializes the resource binding struct.
- * The defaults are non-zero.
- */
-SPVC_PUBLIC_API void spvc_msl_resource_binding_init(spvc_msl_resource_binding *binding);
-
-#define SPVC_MSL_PUSH_CONSTANT_DESC_SET (~(0u))
-#define SPVC_MSL_PUSH_CONSTANT_BINDING (0)
-#define SPVC_MSL_SWIZZLE_BUFFER_BINDING (~(1u))
-#define SPVC_MSL_BUFFER_SIZE_BUFFER_BINDING (~(2u))
-#define SPVC_MSL_ARGUMENT_BUFFER_BINDING (~(3u))
-
-/* Obsolete. Sticks around for backwards compatibility. */
-#define SPVC_MSL_AUX_BUFFER_STRUCT_VERSION 1
-
-/* Runtime check for incompatibility. Obsolete. */
-SPVC_PUBLIC_API unsigned spvc_msl_get_aux_buffer_struct_version(void);
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_coord
-{
-	SPVC_MSL_SAMPLER_COORD_NORMALIZED = 0,
-	SPVC_MSL_SAMPLER_COORD_PIXEL = 1,
-	SPVC_MSL_SAMPLER_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_coord;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_filter
-{
-	SPVC_MSL_SAMPLER_FILTER_NEAREST = 0,
-	SPVC_MSL_SAMPLER_FILTER_LINEAR = 1,
-	SPVC_MSL_SAMPLER_FILTER_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_filter;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_mip_filter
-{
-	SPVC_MSL_SAMPLER_MIP_FILTER_NONE = 0,
-	SPVC_MSL_SAMPLER_MIP_FILTER_NEAREST = 1,
-	SPVC_MSL_SAMPLER_MIP_FILTER_LINEAR = 2,
-	SPVC_MSL_SAMPLER_MIP_FILTER_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_mip_filter;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_address
-{
-	SPVC_MSL_SAMPLER_ADDRESS_CLAMP_TO_ZERO = 0,
-	SPVC_MSL_SAMPLER_ADDRESS_CLAMP_TO_EDGE = 1,
-	SPVC_MSL_SAMPLER_ADDRESS_CLAMP_TO_BORDER = 2,
-	SPVC_MSL_SAMPLER_ADDRESS_REPEAT = 3,
-	SPVC_MSL_SAMPLER_ADDRESS_MIRRORED_REPEAT = 4,
-	SPVC_MSL_SAMPLER_ADDRESS_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_address;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_compare_func
-{
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_NEVER = 0,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_LESS = 1,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_LESS_EQUAL = 2,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_GREATER = 3,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_GREATER_EQUAL = 4,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_EQUAL = 5,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_NOT_EQUAL = 6,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_ALWAYS = 7,
-	SPVC_MSL_SAMPLER_COMPARE_FUNC_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_compare_func;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_border_color
-{
-	SPVC_MSL_SAMPLER_BORDER_COLOR_TRANSPARENT_BLACK = 0,
-	SPVC_MSL_SAMPLER_BORDER_COLOR_OPAQUE_BLACK = 1,
-	SPVC_MSL_SAMPLER_BORDER_COLOR_OPAQUE_WHITE = 2,
-	SPVC_MSL_SAMPLER_BORDER_COLOR_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_border_color;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_format_resolution
-{
-	SPVC_MSL_FORMAT_RESOLUTION_444 = 0,
-	SPVC_MSL_FORMAT_RESOLUTION_422,
-	SPVC_MSL_FORMAT_RESOLUTION_420,
-	SPVC_MSL_FORMAT_RESOLUTION_INT_MAX = 0x7fffffff
-} spvc_msl_format_resolution;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_chroma_location
-{
-	SPVC_MSL_CHROMA_LOCATION_COSITED_EVEN = 0,
-	SPVC_MSL_CHROMA_LOCATION_MIDPOINT,
-	SPVC_MSL_CHROMA_LOCATION_INT_MAX = 0x7fffffff
-} spvc_msl_chroma_location;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_component_swizzle
-{
-	SPVC_MSL_COMPONENT_SWIZZLE_IDENTITY = 0,
-	SPVC_MSL_COMPONENT_SWIZZLE_ZERO,
-	SPVC_MSL_COMPONENT_SWIZZLE_ONE,
-	SPVC_MSL_COMPONENT_SWIZZLE_R,
-	SPVC_MSL_COMPONENT_SWIZZLE_G,
-	SPVC_MSL_COMPONENT_SWIZZLE_B,
-	SPVC_MSL_COMPONENT_SWIZZLE_A,
-	SPVC_MSL_COMPONENT_SWIZZLE_INT_MAX = 0x7fffffff
-} spvc_msl_component_swizzle;
-
-/* Maps to C++ API. */
-typedef enum spvc_msl_sampler_ycbcr_model_conversion
-{
-	SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0,
-	SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY,
-	SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_709,
-	SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_601,
-	SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_BT_2020,
-	SPVC_MSL_SAMPLER_YCBCR_MODEL_CONVERSION_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_ycbcr_model_conversion;
-
-/* Maps to C+ API. */
-typedef enum spvc_msl_sampler_ycbcr_range
-{
-	SPVC_MSL_SAMPLER_YCBCR_RANGE_ITU_FULL = 0,
-	SPVC_MSL_SAMPLER_YCBCR_RANGE_ITU_NARROW,
-	SPVC_MSL_SAMPLER_YCBCR_RANGE_INT_MAX = 0x7fffffff
-} spvc_msl_sampler_ycbcr_range;
-
-/* Maps to C++ API. */
-typedef struct spvc_msl_constexpr_sampler
-{
-	spvc_msl_sampler_coord coord;
-	spvc_msl_sampler_filter min_filter;
-	spvc_msl_sampler_filter mag_filter;
-	spvc_msl_sampler_mip_filter mip_filter;
-	spvc_msl_sampler_address s_address;
-	spvc_msl_sampler_address t_address;
-	spvc_msl_sampler_address r_address;
-	spvc_msl_sampler_compare_func compare_func;
-	spvc_msl_sampler_border_color border_color;
-	float lod_clamp_min;
-	float lod_clamp_max;
-	int max_anisotropy;
-
-	spvc_bool compare_enable;
-	spvc_bool lod_clamp_enable;
-	spvc_bool anisotropy_enable;
-} spvc_msl_constexpr_sampler;
-
-/*
- * Initializes the constexpr sampler struct.
- * The defaults are non-zero.
- */
-SPVC_PUBLIC_API void spvc_msl_constexpr_sampler_init(spvc_msl_constexpr_sampler *sampler);
-
-/* Maps to the sampler Y'CbCr conversion-related portions of MSLConstexprSampler. See C++ API for defaults and details. */
-typedef struct spvc_msl_sampler_ycbcr_conversion
-{
-	unsigned planes;
-	spvc_msl_format_resolution resolution;
-	spvc_msl_sampler_filter chroma_filter;
-	spvc_msl_chroma_location x_chroma_offset;
-	spvc_msl_chroma_location y_chroma_offset;
-	spvc_msl_component_swizzle swizzle[4];
-	spvc_msl_sampler_ycbcr_model_conversion ycbcr_model;
-	spvc_msl_sampler_ycbcr_range ycbcr_range;
-	unsigned bpc;
-} spvc_msl_sampler_ycbcr_conversion;
-
-/*
- * Initializes the constexpr sampler struct.
- * The defaults are non-zero.
- */
-SPVC_PUBLIC_API void spvc_msl_sampler_ycbcr_conversion_init(spvc_msl_sampler_ycbcr_conversion *conv);
-
-/* Maps to C++ API. */
-typedef enum spvc_hlsl_binding_flag_bits
-{
-	SPVC_HLSL_BINDING_AUTO_NONE_BIT = 0,
-	SPVC_HLSL_BINDING_AUTO_PUSH_CONSTANT_BIT = 1 << 0,
-	SPVC_HLSL_BINDING_AUTO_CBV_BIT = 1 << 1,
-	SPVC_HLSL_BINDING_AUTO_SRV_BIT = 1 << 2,
-	SPVC_HLSL_BINDING_AUTO_UAV_BIT = 1 << 3,
-	SPVC_HLSL_BINDING_AUTO_SAMPLER_BIT = 1 << 4,
-	SPVC_HLSL_BINDING_AUTO_ALL = 0x7fffffff
-} spvc_hlsl_binding_flag_bits;
-typedef unsigned spvc_hlsl_binding_flags;
-
-#define SPVC_HLSL_PUSH_CONSTANT_DESC_SET (~(0u))
-#define SPVC_HLSL_PUSH_CONSTANT_BINDING (0)
-
-/* Maps to C++ API. */
-typedef struct spvc_hlsl_resource_binding_mapping
-{
-	unsigned register_space;
-	unsigned register_binding;
-} spvc_hlsl_resource_binding_mapping;
-
-typedef struct spvc_hlsl_resource_binding
-{
-	SpvExecutionModel stage;
-	unsigned desc_set;
-	unsigned binding;
-
-	spvc_hlsl_resource_binding_mapping cbv, uav, srv, sampler;
-} spvc_hlsl_resource_binding;
-
-/*
- * Initializes the resource binding struct.
- * The defaults are non-zero.
- */
-SPVC_PUBLIC_API void spvc_hlsl_resource_binding_init(spvc_hlsl_resource_binding *binding);
-
-/* Maps to the various spirv_cross::Compiler*::Option structures. See C++ API for defaults and details. */
-typedef enum spvc_compiler_option
-{
-	SPVC_COMPILER_OPTION_UNKNOWN = 0,
-
-	SPVC_COMPILER_OPTION_FORCE_TEMPORARY = 1 | SPVC_COMPILER_OPTION_COMMON_BIT,
-	SPVC_COMPILER_OPTION_FLATTEN_MULTIDIMENSIONAL_ARRAYS = 2 | SPVC_COMPILER_OPTION_COMMON_BIT,
-	SPVC_COMPILER_OPTION_FIXUP_DEPTH_CONVENTION = 3 | SPVC_COMPILER_OPTION_COMMON_BIT,
-	SPVC_COMPILER_OPTION_FLIP_VERTEX_Y = 4 | SPVC_COMPILER_OPTION_COMMON_BIT,
-
-	SPVC_COMPILER_OPTION_GLSL_SUPPORT_NONZERO_BASE_INSTANCE = 5 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_SEPARATE_SHADER_OBJECTS = 6 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_ENABLE_420PACK_EXTENSION = 7 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_VERSION = 8 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_ES = 9 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_VULKAN_SEMANTICS = 10 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_ES_DEFAULT_FLOAT_PRECISION_HIGHP = 11 | SPVC_COMPILER_OPTION_GLSL_BIT,
-	SPVC_COMPILER_OPTION_GLSL_ES_DEFAULT_INT_PRECISION_HIGHP = 12 | SPVC_COMPILER_OPTION_GLSL_BIT,
-
-	SPVC_COMPILER_OPTION_HLSL_SHADER_MODEL = 13 | SPVC_COMPILER_OPTION_HLSL_BIT,
-	SPVC_COMPILER_OPTION_HLSL_POINT_SIZE_COMPAT = 14 | SPVC_COMPILER_OPTION_HLSL_BIT,
-	SPVC_COMPILER_OPTION_HLSL_POINT_COORD_COMPAT = 15 | SPVC_COMPILER_OPTION_HLSL_BIT,
-	SPVC_COMPILER_OPTION_HLSL_SUPPORT_NONZERO_BASE_VERTEX_BASE_INSTANCE = 16 | SPVC_COMPILER_OPTION_HLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_VERSION = 17 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_TEXEL_BUFFER_TEXTURE_WIDTH = 18 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	/* Obsolete, use SWIZZLE_BUFFER_INDEX instead. */
-	SPVC_COMPILER_OPTION_MSL_AUX_BUFFER_INDEX = 19 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SWIZZLE_BUFFER_INDEX = 19 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_INDIRECT_PARAMS_BUFFER_INDEX = 20 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_OUTPUT_BUFFER_INDEX = 21 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_PATCH_OUTPUT_BUFFER_INDEX = 22 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_TESS_FACTOR_OUTPUT_BUFFER_INDEX = 23 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_INPUT_WORKGROUP_INDEX = 24 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ENABLE_POINT_SIZE_BUILTIN = 25 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_DISABLE_RASTERIZATION = 26 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_CAPTURE_OUTPUT_TO_BUFFER = 27 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SWIZZLE_TEXTURE_SAMPLES = 28 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_PAD_FRAGMENT_OUTPUT_COMPONENTS = 29 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_TESS_DOMAIN_ORIGIN_LOWER_LEFT = 30 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_PLATFORM = 31 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ARGUMENT_BUFFERS = 32 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_GLSL_EMIT_PUSH_CONSTANT_AS_UNIFORM_BUFFER = 33 | SPVC_COMPILER_OPTION_GLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_TEXTURE_BUFFER_NATIVE = 34 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_GLSL_EMIT_UNIFORM_BUFFER_AS_PLAIN_UNIFORMS = 35 | SPVC_COMPILER_OPTION_GLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_BUFFER_SIZE_BUFFER_INDEX = 36 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_EMIT_LINE_DIRECTIVES = 37 | SPVC_COMPILER_OPTION_COMMON_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_MULTIVIEW = 38 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_VIEW_MASK_BUFFER_INDEX = 39 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_DEVICE_INDEX = 40 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_VIEW_INDEX_FROM_DEVICE_INDEX = 41 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_DISPATCH_BASE = 42 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_DYNAMIC_OFFSETS_BUFFER_INDEX = 43 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_TEXTURE_1D_AS_2D = 44 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ENABLE_BASE_INDEX_ZERO = 45 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	/* Obsolete. Use MSL_FRAMEBUFFER_FETCH_SUBPASS instead. */
-	SPVC_COMPILER_OPTION_MSL_IOS_FRAMEBUFFER_FETCH_SUBPASS = 46 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_FRAMEBUFFER_FETCH_SUBPASS = 46 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_INVARIANT_FP_MATH = 47 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_EMULATE_CUBEMAP_ARRAY = 48 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ENABLE_DECORATION_BINDING = 49 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_FORCE_ACTIVE_ARGUMENT_BUFFER_RESOURCES = 50 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_FORCE_NATIVE_ARRAYS = 51 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_ENABLE_STORAGE_IMAGE_QUALIFIER_DEDUCTION = 52 | SPVC_COMPILER_OPTION_COMMON_BIT,
-
-	SPVC_COMPILER_OPTION_HLSL_FORCE_STORAGE_BUFFER_AS_UAV = 53 | SPVC_COMPILER_OPTION_HLSL_BIT,
-
-	SPVC_COMPILER_OPTION_FORCE_ZERO_INITIALIZED_VARIABLES = 54 | SPVC_COMPILER_OPTION_COMMON_BIT,
-
-	SPVC_COMPILER_OPTION_HLSL_NONWRITABLE_UAV_TEXTURE_AS_SRV = 55 | SPVC_COMPILER_OPTION_HLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_OUTPUT_MASK = 56 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_DEPTH_BUILTIN = 57 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ENABLE_FRAG_STENCIL_REF_BUILTIN = 58 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ENABLE_CLIP_DISTANCE_USER_VARYING = 59 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_HLSL_ENABLE_16BIT_TYPES = 60 | SPVC_COMPILER_OPTION_HLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_MULTI_PATCH_WORKGROUP = 61 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_INPUT_BUFFER_INDEX = 62 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_INDEX_BUFFER_INDEX = 63 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_VERTEX_FOR_TESSELLATION = 64 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_VERTEX_INDEX_TYPE = 65 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_GLSL_FORCE_FLATTENED_IO_BLOCKS = 66 | SPVC_COMPILER_OPTION_GLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_MULTIVIEW_LAYERED_RENDERING = 67 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_ARRAYED_SUBPASS_INPUT = 68 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_R32UI_LINEAR_TEXTURE_ALIGNMENT = 69 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_R32UI_ALIGNMENT_CONSTANT_ID = 70 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_HLSL_FLATTEN_MATRIX_VERTEX_INPUT_SEMANTICS = 71 | SPVC_COMPILER_OPTION_HLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_IOS_USE_SIMDGROUP_FUNCTIONS = 72 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_EMULATE_SUBGROUPS = 73 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_FIXED_SUBGROUP_SIZE = 74 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_FORCE_SAMPLE_RATE_SHADING = 75 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_IOS_SUPPORT_BASE_VERTEX_INSTANCE = 76 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_GLSL_OVR_MULTIVIEW_VIEW_COUNT = 77 | SPVC_COMPILER_OPTION_GLSL_BIT,
-
-	SPVC_COMPILER_OPTION_RELAX_NAN_CHECKS = 78 | SPVC_COMPILER_OPTION_COMMON_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_RAW_BUFFER_TESE_INPUT = 79 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SHADER_PATCH_INPUT_BUFFER_INDEX = 80 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_MANUAL_HELPER_INVOCATION_UPDATES = 81 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_CHECK_DISCARDED_FRAG_STORES = 82 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_GLSL_ENABLE_ROW_MAJOR_LOAD_WORKAROUND = 83 | SPVC_COMPILER_OPTION_GLSL_BIT,
-
-	SPVC_COMPILER_OPTION_MSL_ARGUMENT_BUFFERS_TIER = 84 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_SAMPLE_DREF_LOD_ARRAY_AS_GRAD = 85 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_READWRITE_TEXTURE_FENCES = 86 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_REPLACE_RECURSIVE_INPUTS = 87 | SPVC_COMPILER_OPTION_MSL_BIT,
-	SPVC_COMPILER_OPTION_MSL_AGX_MANUAL_CUBE_GRAD_FIXUP = 88 | SPVC_COMPILER_OPTION_MSL_BIT,
-
-	SPVC_COMPILER_OPTION_INT_MAX = 0x7fffffff
-} spvc_compiler_option;
-
-/*
- * Context is the highest-level API construct.
- * The context owns all memory allocations made by its child object hierarchy, including various non-opaque structs and strings.
- * This means that the API user only has to care about one "destroy" call ever when using the C API.
- * All pointers handed out by the APIs are only valid as long as the context
- * is alive and spvc_context_release_allocations has not been called.
- */
-SPVC_PUBLIC_API spvc_result spvc_context_create(spvc_context *context);
-
-/* Frees all memory allocations and objects associated with the context and its child objects. */
-SPVC_PUBLIC_API void spvc_context_destroy(spvc_context context);
-
-/* Frees all memory allocations and objects associated with the context and its child objects, but keeps the context alive. */
-SPVC_PUBLIC_API void spvc_context_release_allocations(spvc_context context);
-
-/* Get the string for the last error which was logged. */
-SPVC_PUBLIC_API const char *spvc_context_get_last_error_string(spvc_context context);
-
-/* Get notified in a callback when an error triggers. Useful for debugging. */
-typedef void (*spvc_error_callback)(void *userdata, const char *error);
-SPVC_PUBLIC_API void spvc_context_set_error_callback(spvc_context context, spvc_error_callback cb, void *userdata);
-
-/* SPIR-V parsing interface. Maps to Parser which then creates a ParsedIR, and that IR is extracted into the handle. */
-SPVC_PUBLIC_API spvc_result spvc_context_parse_spirv(spvc_context context, const SpvId *spirv, size_t word_count,
-                                                     spvc_parsed_ir *parsed_ir);
-
-/*
- * Create a compiler backend. Capture mode controls if we construct by copy or move semantics.
- * It is always recommended to use SPVC_CAPTURE_MODE_TAKE_OWNERSHIP if you only intend to cross-compile the IR once.
- */
-SPVC_PUBLIC_API spvc_result spvc_context_create_compiler(spvc_context context, spvc_backend backend,
-                                                         spvc_parsed_ir parsed_ir, spvc_capture_mode mode,
-                                                         spvc_compiler *compiler);
-
-/* Maps directly to C++ API. */
-SPVC_PUBLIC_API unsigned spvc_compiler_get_current_id_bound(spvc_compiler compiler);
-
-/* Create compiler options, which will initialize defaults. */
-SPVC_PUBLIC_API spvc_result spvc_compiler_create_compiler_options(spvc_compiler compiler,
-                                                                  spvc_compiler_options *options);
-/* Override options. Will return error if e.g. MSL options are used for the HLSL backend, etc. */
-SPVC_PUBLIC_API spvc_result spvc_compiler_options_set_bool(spvc_compiler_options options,
-                                                           spvc_compiler_option option, spvc_bool value);
-SPVC_PUBLIC_API spvc_result spvc_compiler_options_set_uint(spvc_compiler_options options,
-                                                           spvc_compiler_option option, unsigned value);
-/* Set compiler options. */
-SPVC_PUBLIC_API spvc_result spvc_compiler_install_compiler_options(spvc_compiler compiler,
-                                                                   spvc_compiler_options options);
-
-/* Compile IR into a string. *source is owned by the context, and caller must not free it themselves. */
-SPVC_PUBLIC_API spvc_result spvc_compiler_compile(spvc_compiler compiler, const char **source);
-
-/* Maps to C++ API. */
-SPVC_PUBLIC_API spvc_result spvc_compiler_add_header_line(spvc_compiler compiler, const char *line);
-SPVC_PUBLIC_API spvc_result spvc_compiler_require_extension(spvc_compiler compiler, const char *ext);
-SPVC_PUBLIC_API size_t spvc_compiler_get_num_required_extensions(spvc_compiler compiler);
-SPVC_PUBLIC_API const char *spvc_compiler_get_required_extension(spvc_compiler compiler, size_t index);
-SPVC_PUBLIC_API spvc_result spvc_compiler_flatten_buffer_block(spvc_compiler compiler, spvc_variable_id id);
-
-SPVC_PUBLIC_API spvc_bool spvc_compiler_variable_is_depth_or_compare(spvc_compiler compiler, spvc_variable_id id);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_mask_stage_output_by_location(spvc_compiler compiler,
-                                                                        unsigned location, unsigned component);
-SPVC_PUBLIC_API spvc_result spvc_compiler_mask_stage_output_by_builtin(spvc_compiler compiler, SpvBuiltIn builtin);
-
-/*
- * HLSL specifics.
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_set_root_constants_layout(spvc_compiler compiler,
-                                                                         const spvc_hlsl_root_constants *constant_info,
-                                                                         size_t count);
-SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_add_vertex_attribute_remap(spvc_compiler compiler,
-                                                                          const spvc_hlsl_vertex_attribute_remap *remap,
-                                                                          size_t remaps);
-SPVC_PUBLIC_API spvc_variable_id spvc_compiler_hlsl_remap_num_workgroups_builtin(spvc_compiler compiler);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_set_resource_binding_flags(spvc_compiler compiler,
-                                                                          spvc_hlsl_binding_flags flags);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_hlsl_add_resource_binding(spvc_compiler compiler,
-                                                                    const spvc_hlsl_resource_binding *binding);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_hlsl_is_resource_used(spvc_compiler compiler,
-                                                              SpvExecutionModel model,
-                                                              unsigned set,
-                                                              unsigned binding);
-
-/*
- * MSL specifics.
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_rasterization_disabled(spvc_compiler compiler);
-
-/* Obsolete. Renamed to needs_swizzle_buffer. */
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_aux_buffer(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_swizzle_buffer(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_buffer_size_buffer(spvc_compiler compiler);
-
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_output_buffer(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_patch_output_buffer(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_needs_input_threadgroup_mem(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_vertex_attribute(spvc_compiler compiler,
-                                                                   const spvc_msl_vertex_attribute *attrs);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_resource_binding(spvc_compiler compiler,
-                                                                   const spvc_msl_resource_binding *binding);
-/* Deprecated; use spvc_compiler_msl_add_shader_input_2(). */
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_shader_input(spvc_compiler compiler,
-                                                               const spvc_msl_shader_interface_var *input);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_shader_input_2(spvc_compiler compiler,
-                                                                 const spvc_msl_shader_interface_var_2 *input);
-/* Deprecated; use spvc_compiler_msl_add_shader_output_2(). */
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_shader_output(spvc_compiler compiler,
-                                                                const spvc_msl_shader_interface_var *output);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_shader_output_2(spvc_compiler compiler,
-                                                                  const spvc_msl_shader_interface_var_2 *output);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_discrete_descriptor_set(spvc_compiler compiler, unsigned desc_set);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_set_argument_buffer_device_address_space(spvc_compiler compiler, unsigned desc_set, spvc_bool device_address);
-
-/* Obsolete, use is_shader_input_used. */
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_vertex_attribute_used(spvc_compiler compiler, unsigned location);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_shader_input_used(spvc_compiler compiler, unsigned location);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_shader_output_used(spvc_compiler compiler, unsigned location);
-
-SPVC_PUBLIC_API spvc_bool spvc_compiler_msl_is_resource_used(spvc_compiler compiler,
-                                                             SpvExecutionModel model,
-                                                             unsigned set,
-                                                             unsigned binding);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler(spvc_compiler compiler, spvc_variable_id id, const spvc_msl_constexpr_sampler *sampler);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler_by_binding(spvc_compiler compiler, unsigned desc_set, unsigned binding, const spvc_msl_constexpr_sampler *sampler);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler_ycbcr(spvc_compiler compiler, spvc_variable_id id, const spvc_msl_constexpr_sampler *sampler, const spvc_msl_sampler_ycbcr_conversion *conv);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_remap_constexpr_sampler_by_binding_ycbcr(spvc_compiler compiler, unsigned desc_set, unsigned binding, const spvc_msl_constexpr_sampler *sampler, const spvc_msl_sampler_ycbcr_conversion *conv);
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_set_fragment_output_components(spvc_compiler compiler, unsigned location, unsigned components);
-
-SPVC_PUBLIC_API unsigned spvc_compiler_msl_get_automatic_resource_binding(spvc_compiler compiler, spvc_variable_id id);
-SPVC_PUBLIC_API unsigned spvc_compiler_msl_get_automatic_resource_binding_secondary(spvc_compiler compiler, spvc_variable_id id);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_dynamic_buffer(spvc_compiler compiler, unsigned desc_set, unsigned binding, unsigned index);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_add_inline_uniform_block(spvc_compiler compiler, unsigned desc_set, unsigned binding);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_msl_set_combined_sampler_suffix(spvc_compiler compiler, const char *suffix);
-SPVC_PUBLIC_API const char *spvc_compiler_msl_get_combined_sampler_suffix(spvc_compiler compiler);
-
-/*
- * Reflect resources.
- * Maps almost 1:1 to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_active_interface_variables(spvc_compiler compiler, spvc_set *set);
-SPVC_PUBLIC_API spvc_result spvc_compiler_set_enabled_interface_variables(spvc_compiler compiler, spvc_set set);
-SPVC_PUBLIC_API spvc_result spvc_compiler_create_shader_resources(spvc_compiler compiler, spvc_resources *resources);
-SPVC_PUBLIC_API spvc_result spvc_compiler_create_shader_resources_for_active_variables(spvc_compiler compiler,
-                                                                                       spvc_resources *resources,
-                                                                                       spvc_set active);
-SPVC_PUBLIC_API spvc_result spvc_resources_get_resource_list_for_type(spvc_resources resources, spvc_resource_type type,
-                                                                      const spvc_reflected_resource **resource_list,
-                                                                      size_t *resource_size);
-
-SPVC_PUBLIC_API spvc_result spvc_resources_get_builtin_resource_list_for_type(
-		spvc_resources resources, spvc_builtin_resource_type type,
-		const spvc_reflected_builtin_resource **resource_list,
-		size_t *resource_size);
-
-/*
- * Decorations.
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API void spvc_compiler_set_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration,
-                                                  unsigned argument);
-SPVC_PUBLIC_API void spvc_compiler_set_decoration_string(spvc_compiler compiler, SpvId id, SpvDecoration decoration,
-                                                         const char *argument);
-SPVC_PUBLIC_API void spvc_compiler_set_name(spvc_compiler compiler, SpvId id, const char *argument);
-SPVC_PUBLIC_API void spvc_compiler_set_member_decoration(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                                         SpvDecoration decoration, unsigned argument);
-SPVC_PUBLIC_API void spvc_compiler_set_member_decoration_string(spvc_compiler compiler, spvc_type_id id,
-                                                                unsigned member_index, SpvDecoration decoration,
-                                                                const char *argument);
-SPVC_PUBLIC_API void spvc_compiler_set_member_name(spvc_compiler compiler, spvc_type_id id, unsigned member_index,
-                                                   const char *argument);
-SPVC_PUBLIC_API void spvc_compiler_unset_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration);
-SPVC_PUBLIC_API void spvc_compiler_unset_member_decoration(spvc_compiler compiler, spvc_type_id id,
-                                                           unsigned member_index, SpvDecoration decoration);
-
-SPVC_PUBLIC_API spvc_bool spvc_compiler_has_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_has_member_decoration(spvc_compiler compiler, spvc_type_id id,
-                                                              unsigned member_index, SpvDecoration decoration);
-SPVC_PUBLIC_API const char *spvc_compiler_get_name(spvc_compiler compiler, SpvId id);
-SPVC_PUBLIC_API unsigned spvc_compiler_get_decoration(spvc_compiler compiler, SpvId id, SpvDecoration decoration);
-SPVC_PUBLIC_API const char *spvc_compiler_get_decoration_string(spvc_compiler compiler, SpvId id,
-                                                                SpvDecoration decoration);
-SPVC_PUBLIC_API unsigned spvc_compiler_get_member_decoration(spvc_compiler compiler, spvc_type_id id,
-                                                             unsigned member_index, SpvDecoration decoration);
-SPVC_PUBLIC_API const char *spvc_compiler_get_member_decoration_string(spvc_compiler compiler, spvc_type_id id,
-                                                                       unsigned member_index, SpvDecoration decoration);
-SPVC_PUBLIC_API const char *spvc_compiler_get_member_name(spvc_compiler compiler, spvc_type_id id, unsigned member_index);
-
-/*
- * Entry points.
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_entry_points(spvc_compiler compiler,
-                                                           const spvc_entry_point **entry_points,
-                                                           size_t *num_entry_points);
-SPVC_PUBLIC_API spvc_result spvc_compiler_set_entry_point(spvc_compiler compiler, const char *name,
-                                                          SpvExecutionModel model);
-SPVC_PUBLIC_API spvc_result spvc_compiler_rename_entry_point(spvc_compiler compiler, const char *old_name,
-                                                             const char *new_name, SpvExecutionModel model);
-SPVC_PUBLIC_API const char *spvc_compiler_get_cleansed_entry_point_name(spvc_compiler compiler, const char *name,
-                                                                        SpvExecutionModel model);
-SPVC_PUBLIC_API void spvc_compiler_set_execution_mode(spvc_compiler compiler, SpvExecutionMode mode);
-SPVC_PUBLIC_API void spvc_compiler_unset_execution_mode(spvc_compiler compiler, SpvExecutionMode mode);
-SPVC_PUBLIC_API void spvc_compiler_set_execution_mode_with_arguments(spvc_compiler compiler, SpvExecutionMode mode,
-                                                                     unsigned arg0, unsigned arg1, unsigned arg2);
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_execution_modes(spvc_compiler compiler, const SpvExecutionMode **modes,
-                                                              size_t *num_modes);
-SPVC_PUBLIC_API unsigned spvc_compiler_get_execution_mode_argument(spvc_compiler compiler, SpvExecutionMode mode);
-SPVC_PUBLIC_API unsigned spvc_compiler_get_execution_mode_argument_by_index(spvc_compiler compiler,
-                                                                            SpvExecutionMode mode, unsigned index);
-SPVC_PUBLIC_API SpvExecutionModel spvc_compiler_get_execution_model(spvc_compiler compiler);
-SPVC_PUBLIC_API void spvc_compiler_update_active_builtins(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_has_active_builtin(spvc_compiler compiler, SpvBuiltIn builtin, SpvStorageClass storage);
-
-/*
- * Type query interface.
- * Maps to C++ API, except it's read-only.
- */
-SPVC_PUBLIC_API spvc_type spvc_compiler_get_type_handle(spvc_compiler compiler, spvc_type_id id);
-
-/* Pulls out SPIRType::self. This effectively gives the type ID without array or pointer qualifiers.
- * This is necessary when reflecting decoration/name information on members of a struct,
- * which are placed in the base type, not the qualified type.
- * This is similar to spvc_reflected_resource::base_type_id. */
-SPVC_PUBLIC_API spvc_type_id spvc_type_get_base_type_id(spvc_type type);
-
-SPVC_PUBLIC_API spvc_basetype spvc_type_get_basetype(spvc_type type);
-SPVC_PUBLIC_API unsigned spvc_type_get_bit_width(spvc_type type);
-SPVC_PUBLIC_API unsigned spvc_type_get_vector_size(spvc_type type);
-SPVC_PUBLIC_API unsigned spvc_type_get_columns(spvc_type type);
-SPVC_PUBLIC_API unsigned spvc_type_get_num_array_dimensions(spvc_type type);
-SPVC_PUBLIC_API spvc_bool spvc_type_array_dimension_is_literal(spvc_type type, unsigned dimension);
-SPVC_PUBLIC_API SpvId spvc_type_get_array_dimension(spvc_type type, unsigned dimension);
-SPVC_PUBLIC_API unsigned spvc_type_get_num_member_types(spvc_type type);
-SPVC_PUBLIC_API spvc_type_id spvc_type_get_member_type(spvc_type type, unsigned index);
-SPVC_PUBLIC_API SpvStorageClass spvc_type_get_storage_class(spvc_type type);
-
-/* Image type query. */
-SPVC_PUBLIC_API spvc_type_id spvc_type_get_image_sampled_type(spvc_type type);
-SPVC_PUBLIC_API SpvDim spvc_type_get_image_dimension(spvc_type type);
-SPVC_PUBLIC_API spvc_bool spvc_type_get_image_is_depth(spvc_type type);
-SPVC_PUBLIC_API spvc_bool spvc_type_get_image_arrayed(spvc_type type);
-SPVC_PUBLIC_API spvc_bool spvc_type_get_image_multisampled(spvc_type type);
-SPVC_PUBLIC_API spvc_bool spvc_type_get_image_is_storage(spvc_type type);
-SPVC_PUBLIC_API SpvImageFormat spvc_type_get_image_storage_format(spvc_type type);
-SPVC_PUBLIC_API SpvAccessQualifier spvc_type_get_image_access_qualifier(spvc_type type);
-
-/*
- * Buffer layout query.
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_struct_size(spvc_compiler compiler, spvc_type struct_type, size_t *size);
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_struct_size_runtime_array(spvc_compiler compiler,
-                                                                                 spvc_type struct_type, size_t array_size, size_t *size);
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_struct_member_size(spvc_compiler compiler, spvc_type type, unsigned index, size_t *size);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_type_struct_member_offset(spvc_compiler compiler,
-                                                                    spvc_type type, unsigned index, unsigned *offset);
-SPVC_PUBLIC_API spvc_result spvc_compiler_type_struct_member_array_stride(spvc_compiler compiler,
-                                                                          spvc_type type, unsigned index, unsigned *stride);
-SPVC_PUBLIC_API spvc_result spvc_compiler_type_struct_member_matrix_stride(spvc_compiler compiler,
-                                                                           spvc_type type, unsigned index, unsigned *stride);
-
-/*
- * Workaround helper functions.
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_build_dummy_sampler_for_combined_images(spvc_compiler compiler, spvc_variable_id *id);
-SPVC_PUBLIC_API spvc_result spvc_compiler_build_combined_image_samplers(spvc_compiler compiler);
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_combined_image_samplers(spvc_compiler compiler,
-                                                                      const spvc_combined_image_sampler **samplers,
-                                                                      size_t *num_samplers);
-
-/*
- * Constants
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_specialization_constants(spvc_compiler compiler,
-                                                                       const spvc_specialization_constant **constants,
-                                                                       size_t *num_constants);
-SPVC_PUBLIC_API spvc_constant spvc_compiler_get_constant_handle(spvc_compiler compiler,
-                                                                spvc_constant_id id);
-
-SPVC_PUBLIC_API spvc_constant_id spvc_compiler_get_work_group_size_specialization_constants(spvc_compiler compiler,
-                                                                                            spvc_specialization_constant *x,
-                                                                                            spvc_specialization_constant *y,
-                                                                                            spvc_specialization_constant *z);
-
-/*
- * Buffer ranges
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_active_buffer_ranges(spvc_compiler compiler,
-                                                                   spvc_variable_id id,
-                                                                   const spvc_buffer_range **ranges,
-                                                                   size_t *num_ranges);
-
-/*
- * No stdint.h until C99, sigh :(
- * For smaller types, the result is sign or zero-extended as appropriate.
- * Maps to C++ API.
- * TODO: The SPIRConstant query interface and modification interface is not quite complete.
- */
-SPVC_PUBLIC_API float spvc_constant_get_scalar_fp16(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API float spvc_constant_get_scalar_fp32(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API double spvc_constant_get_scalar_fp64(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API unsigned spvc_constant_get_scalar_u32(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API int spvc_constant_get_scalar_i32(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API unsigned spvc_constant_get_scalar_u16(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API int spvc_constant_get_scalar_i16(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API unsigned spvc_constant_get_scalar_u8(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API int spvc_constant_get_scalar_i8(spvc_constant constant, unsigned column, unsigned row);
-SPVC_PUBLIC_API void spvc_constant_get_subconstants(spvc_constant constant, const spvc_constant_id **constituents, size_t *count);
-SPVC_PUBLIC_API spvc_type_id spvc_constant_get_type(spvc_constant constant);
-
-/*
- * C implementation of the C++ api.
- */
-SPVC_PUBLIC_API void spvc_constant_set_scalar_fp16(spvc_constant constant, unsigned column, unsigned row, unsigned short value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_fp32(spvc_constant constant, unsigned column, unsigned row, float value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_fp64(spvc_constant constant, unsigned column, unsigned row, double value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_u32(spvc_constant constant, unsigned column, unsigned row, unsigned value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_i32(spvc_constant constant, unsigned column, unsigned row, int value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_u16(spvc_constant constant, unsigned column, unsigned row, unsigned short value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_i16(spvc_constant constant, unsigned column, unsigned row, signed short value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_u8(spvc_constant constant, unsigned column, unsigned row, unsigned char value);
-SPVC_PUBLIC_API void spvc_constant_set_scalar_i8(spvc_constant constant, unsigned column, unsigned row, signed char value);
-
-/*
- * Misc reflection
- * Maps to C++ API.
- */
-SPVC_PUBLIC_API spvc_bool spvc_compiler_get_binary_offset_for_decoration(spvc_compiler compiler,
-                                                                         spvc_variable_id id,
-                                                                         SpvDecoration decoration,
-                                                                         unsigned *word_offset);
-
-SPVC_PUBLIC_API spvc_bool spvc_compiler_buffer_is_hlsl_counter_buffer(spvc_compiler compiler, spvc_variable_id id);
-SPVC_PUBLIC_API spvc_bool spvc_compiler_buffer_get_hlsl_counter_buffer(spvc_compiler compiler, spvc_variable_id id,
-                                                                       spvc_variable_id *counter_id);
-
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_capabilities(spvc_compiler compiler,
-                                                                    const SpvCapability **capabilities,
-                                                                    size_t *num_capabilities);
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_declared_extensions(spvc_compiler compiler, const char ***extensions,
-                                                                  size_t *num_extensions);
-
-SPVC_PUBLIC_API const char *spvc_compiler_get_remapped_declared_block_name(spvc_compiler compiler, spvc_variable_id id);
-SPVC_PUBLIC_API spvc_result spvc_compiler_get_buffer_block_decorations(spvc_compiler compiler, spvc_variable_id id,
-                                                                       const SpvDecoration **decorations,
-                                                                       size_t *num_decorations);
-
-#ifdef __cplusplus
-}
-#endif
-#endif