Non-Functional: Remove unused parts of the disassembler.
authorJohn Kessenich <cepheus@frii.com>
Fri, 30 Mar 2018 06:11:39 +0000 (00:11 -0600)
committerJohn Kessenich <cepheus@frii.com>
Fri, 30 Mar 2018 06:11:39 +0000 (00:11 -0600)
README.md
SPIRV/doc.cpp
SPIRV/doc.h

index a6bddf8..a8b7504 100644 (file)
--- a/README.md
+++ b/README.md
@@ -240,8 +240,11 @@ bool InitializeProcess();
 void FinalizeProcess();
 
 class TShader
+    setStrings(...);
+    setEnvInput(EShSourceHlsl or EShSourceGlsl, stage,  EShClientVulkan or EShClientOpenGL, 100);
+    setEnvClient(EShClientVulkan or EShClientOpenGL, EShTargetVulkan_1_0 or EShTargetVulkan_1_1 or EShTargetOpenGL_450);
+    setEnvTarget(EShTargetSpv, EShTargetSpv_1_0 or EShTargetSpv_1_3);
     bool parse(...);
-    void setStrings(...);
     const char* getInfoLog();
 
 class TProgram
index 061c13e..9317d50 100755 (executable)
@@ -66,7 +66,7 @@ namespace spv {
 // the specification (or their sanitized versions for auto-generating the
 // spirv headers.
 //
-// Also, the ceilings are declared next to these, to help keep them in sync.
+// Also, for masks the ceilings are declared next to these, to help keep them in sync.
 // Ceilings should be
 //  - one more than the maximum value an enumerant takes on, for non-mask enumerants
 //    (for non-sparse enums, this is the number of enumerants)
@@ -74,8 +74,6 @@ namespace spv {
 //    (for non-sparse mask enums, this is the number of enumerants)
 //
 
-const int SourceLanguageCeiling = 6; // HLSL todo: need official enumerant
-
 const char* SourceString(int source)
 {
     switch (source) {
@@ -86,13 +84,10 @@ const char* SourceString(int source)
     case 4:  return "OpenCL_CPP";
     case 5:  return "HLSL";
 
-    case SourceLanguageCeiling:
     default: return "Bad";
     }
 }
 
-const int ExecutionModelCeiling = 7;
-
 const char* ExecutionModelString(int model)
 {
     switch (model) {
@@ -104,13 +99,10 @@ const char* ExecutionModelString(int model)
     case 5:  return "GLCompute";
     case 6:  return "Kernel";
 
-    case ExecutionModelCeiling:
     default: return "Bad";
     }
 }
 
-const int AddressingModelCeiling = 3;
-
 const char* AddressingString(int addr)
 {
     switch (addr) {
@@ -118,13 +110,10 @@ const char* AddressingString(int addr)
     case 1:  return "Physical32";
     case 2:  return "Physical64";
 
-    case AddressingModelCeiling:
     default: return "Bad";
     }
 }
 
-const int MemoryModelCeiling = 3;
-
 const char* MemoryString(int mem)
 {
     switch (mem) {
@@ -132,7 +121,6 @@ const char* MemoryString(int mem)
     case 1:  return "GLSL450";
     case 2:  return "OpenCL";
 
-    case MemoryModelCeiling:
     default: return "Bad";
     }
 }
@@ -182,8 +170,6 @@ const char* ExecutionModeString(int mode)
     }
 }
 
-const int StorageClassCeiling = 13;
-
 const char* StorageClassString(int StorageClass)
 {
     switch (StorageClass) {
@@ -201,7 +187,6 @@ const char* StorageClassString(int StorageClass)
     case 11: return "Image";
     case 12: return "StorageBuffer";
 
-    case StorageClassCeiling:
     default: return "Bad";
     }
 }
@@ -261,13 +246,13 @@ const char* DecorationString(int decoration)
     default:  return "Bad";
 
 #ifdef AMD_EXTENSIONS
-    case 4999: return "ExplicitInterpAMD";
+    case DecorationExplicitInterpAMD: return "ExplicitInterpAMD";
 #endif
 #ifdef NV_EXTENSIONS
-    case 5248: return "OverrideCoverageNV";
-    case 5250: return "PassthroughNV";
-    case 5252: return "ViewportRelativeNV";
-    case 5256: return "SecondaryViewportRelativeNV";
+    case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
+    case DecorationPassthroughNV:               return "PassthroughNV";
+    case DecorationViewportRelativeNV:          return "ViewportRelativeNV";
+    case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
 #endif
 
     case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
@@ -275,8 +260,6 @@ const char* DecorationString(int decoration)
     }
 }
 
-const int BuiltInCeiling = 44;
-
 const char* BuiltInString(int builtIn)
 {
     switch (builtIn) {
@@ -357,13 +340,10 @@ const char* BuiltInString(int builtIn)
 
     case 5264: return "FullyCoveredEXT";
 
-    case BuiltInCeiling:
     default: return "Bad";
     }
 }
 
-const int DimensionCeiling = 7;
-
 const char* DimensionString(int dim)
 {
     switch (dim) {
@@ -375,13 +355,10 @@ const char* DimensionString(int dim)
     case 5:  return "Buffer";
     case 6:  return "SubpassData";
 
-    case DimensionCeiling:
     default: return "Bad";
     }
 }
 
-const int SamplerAddressingModeCeiling = 5;
-
 const char* SamplerAddressingModeString(int mode)
 {
     switch (mode) {
@@ -391,26 +368,20 @@ const char* SamplerAddressingModeString(int mode)
     case 3:  return "Repeat";
     case 4:  return "RepeatMirrored";
 
-    case SamplerAddressingModeCeiling:
     default: return "Bad";
     }
 }
 
-const int SamplerFilterModeCeiling = 2;
-
 const char* SamplerFilterModeString(int mode)
 {
     switch (mode) {
     case 0: return "Nearest";
     case 1: return "Linear";
 
-    case SamplerFilterModeCeiling:
     default: return "Bad";
     }
 }
 
-const int ImageFormatCeiling = 40;
-
 const char* ImageFormatString(int format)
 {
     switch (format) {
@@ -467,14 +438,11 @@ const char* ImageFormatString(int format)
     case 38: return "R16ui";
     case 39: return "R8ui";
 
-    case ImageFormatCeiling:
     default:
         return "Bad";
     }
 }
 
-const int ImageChannelOrderCeiling = 19;
-
 const char* ImageChannelOrderString(int format)
 {
     switch (format) {
@@ -498,14 +466,11 @@ const char* ImageChannelOrderString(int format)
     case 17: return "sRGBA";
     case 18: return "sBGRA";
 
-    case ImageChannelOrderCeiling:
     default: 
         return "Bad";
     }
 }
 
-const int ImageChannelDataTypeCeiling = 17;
-
 const char* ImageChannelDataTypeString(int type)
 {
     switch (type)
@@ -528,7 +493,6 @@ const char* ImageChannelDataTypeString(int type)
     case 15: return "UnormInt24";
     case 16: return "UnormInt101010_2";
 
-    case ImageChannelDataTypeCeiling:
     default:
         return "Bad";
     }
@@ -554,8 +518,6 @@ const char* ImageOperandsString(int format)
     }
 }
 
-const int FPFastMathCeiling = 5;
-
 const char* FPFastMathString(int mode)
 {
     switch (mode) {
@@ -565,13 +527,10 @@ const char* FPFastMathString(int mode)
     case 3: return "AllowRecip";
     case 4: return "Fast";
 
-    case FPFastMathCeiling:
     default:     return "Bad";
     }
 }
 
-const int FPRoundingModeCeiling = 4;
-
 const char* FPRoundingModeString(int mode)
 {
     switch (mode) {
@@ -580,26 +539,20 @@ const char* FPRoundingModeString(int mode)
     case 2:  return "RTP";
     case 3:  return "RTN";
 
-    case FPRoundingModeCeiling:
     default: return "Bad";
     }
 }
 
-const int LinkageTypeCeiling = 2;
-
 const char* LinkageTypeString(int type)
 {
     switch (type) {
     case 0:  return "Export";
     case 1:  return "Import";
 
-    case LinkageTypeCeiling:
     default: return "Bad";
     }
 }
 
-const int FuncParamAttrCeiling = 8;
-
 const char* FuncParamAttrString(int attr)
 {
     switch (attr) {
@@ -612,13 +565,10 @@ const char* FuncParamAttrString(int attr)
     case 6:  return "NoWrite";
     case 7:  return "NoReadWrite";
 
-    case FuncParamAttrCeiling:
     default: return "Bad";
     }
 }
 
-const int AccessQualifierCeiling = 3;
-
 const char* AccessQualifierString(int attr)
 {
     switch (attr) {
@@ -626,7 +576,6 @@ const char* AccessQualifierString(int attr)
     case 1:  return "WriteOnly";
     case 2:  return "ReadWrite";
 
-    case AccessQualifierCeiling:
     default: return "Bad";
     }
 }
@@ -674,8 +623,6 @@ const char* FunctionControlString(int cont)
     }
 }
 
-const int MemorySemanticsCeiling = 12;
-
 const char* MemorySemanticsString(int mem)
 {
     // Note: No bits set (None) means "Relaxed"
@@ -693,13 +640,10 @@ const char* MemorySemanticsString(int mem)
     case 10: return "AtomicCounterMemory";
     case 11: return "ImageMemory";
 
-    case MemorySemanticsCeiling:
     default:     return "Bad";
     }
 }
 
-const int MemoryAccessCeiling = 3;
-
 const char* MemoryAccessString(int mem)
 {
     switch (mem) {
@@ -707,13 +651,10 @@ const char* MemoryAccessString(int mem)
     case 1:  return "Aligned";
     case 2:  return "Nontemporal";
 
-    case MemoryAccessCeiling:
     default: return "Bad";
     }
 }
 
-const int ScopeCeiling = 5;
-
 const char* ScopeString(int mem)
 {
     switch (mem) {
@@ -723,13 +664,10 @@ const char* ScopeString(int mem)
     case 3:  return "Subgroup";
     case 4:  return "Invocation";
 
-    case ScopeCeiling:
     default: return "Bad";
     }
 }
 
-const int GroupOperationCeiling = 9;
-
 const char* GroupOperationString(int gop)
 {
 
@@ -745,13 +683,10 @@ const char* GroupOperationString(int gop)
     case GroupOperationPartitionedExclusiveScanNV:  return "PartitionedExclusiveScanNV";
 #endif
 
-    case GroupOperationCeiling:
     default: return "Bad";
     }
 }
 
-const int KernelEnqueueFlagsCeiling = 3;
-
 const char* KernelEnqueueFlagsString(int flag)
 {
     switch (flag)
@@ -760,26 +695,20 @@ const char* KernelEnqueueFlagsString(int flag)
     case 1:  return "WaitKernel";
     case 2:  return "WaitWorkGroup";
 
-    case KernelEnqueueFlagsCeiling:
     default: return "Bad";
     }
 }
 
-const int KernelProfilingInfoCeiling = 1;
-
 const char* KernelProfilingInfoString(int info)
 {
     switch (info)
     {
     case 0:  return "CmdExecTime";
 
-    case KernelProfilingInfoCeiling:
     default: return "Bad";
     }
 }
 
-const int CapabilityCeiling = 58;
-
 const char* CapabilityString(int info)
 {
     switch (info)
@@ -851,42 +780,41 @@ const char* CapabilityString(int info)
     case 67: return "GroupNonUniformClustered";
     case 68: return "GroupNonUniformQuad";
 
-    case 4423: return "SubgroupBallotKHR";
-    case 4427: return "DrawParameters";
-    case 4431: return "SubgroupVoteKHR";
+    case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
+    case CapabilityDrawParameters:    return "DrawParameters";
+    case CapabilitySubgroupVoteKHR:   return "SubgroupVoteKHR";
 
-    case 4433: return "StorageUniformBufferBlock16";
-    case 4434: return "StorageUniform16";
-    case 4435: return "StoragePushConstant16";
-    case 4436: return "StorageInputOutput16";
+    case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
+    case CapabilityStorageUniform16:            return "StorageUniform16";
+    case CapabilityStoragePushConstant16:       return "StoragePushConstant16";
+    case CapabilityStorageInputOutput16:        return "StorageInputOutput16";
 
-    case 4437: return "DeviceGroup";
-    case 4439: return "MultiView";
+    case CapabilityDeviceGroup: return "DeviceGroup";
+    case CapabilityMultiView:   return "MultiView";
 
-    case 5013: return "StencilExportEXT";
+    case CapabilityStencilExportEXT: return "StencilExportEXT";
 
 #ifdef AMD_EXTENSIONS
-    case 5008: return "Float16ImageAMD";
-    case 5009: return "ImageGatherBiasLodAMD";
-    case 5010: return "FragmentMaskAMD";
-    case 5015: return "ImageReadWriteLodAMD";
+    case CapabilityFloat16ImageAMD:       return "Float16ImageAMD";
+    case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
+    case CapabilityFragmentMaskAMD:       return "FragmentMaskAMD";
+    case CapabilityImageReadWriteLodAMD:  return "ImageReadWriteLodAMD";
 #endif
 
-    case 4445: return "AtomicStorageOps";
+    case CapabilityAtomicStorageOps:             return "AtomicStorageOps";
 
-    case 4447: return "SampleMaskPostDepthCoverage";
+    case CapabilitySampleMaskPostDepthCoverage:  return "SampleMaskPostDepthCoverage";
 #ifdef NV_EXTENSIONS
-    case 5251: return "GeometryShaderPassthroughNV";
-    case 5254: return "ShaderViewportIndexLayerNV";
-    case 5255: return "ShaderViewportMaskNV";
-    case 5259: return "ShaderStereoViewNV";
-    case 5260: return "PerViewAttributesNV";
-    case 5297: return "GroupNonUniformPartitionedNV";
+    case CapabilityGeometryShaderPassthroughNV:  return "GeometryShaderPassthroughNV";
+    case CapabilityShaderViewportIndexLayerNV:   return "ShaderViewportIndexLayerNV";
+    case CapabilityShaderViewportMaskNV:         return "ShaderViewportMaskNV";
+    case CapabilityShaderStereoViewNV:           return "ShaderStereoViewNV";
+    case CapabilityPerViewAttributesNV:          return "PerViewAttributesNV";
+    case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
 #endif
 
-    case 5265: return "FragmentFullyCoveredEXT";
+    case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
 
-    case CapabilityCeiling:
     default: return "Bad";
     }
 }
@@ -1279,9 +1207,8 @@ const char* OpcodeString(int op)
     case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
 
 #ifdef NV_EXTENSIONS
-    case 5296: return "OpGroupNonUniformPartitionNV";
+    case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
 #endif
-    case OpcodeCeiling:
     default:
         return "Bad";
     }
@@ -1294,35 +1221,12 @@ OperandParameters ExecutionModeOperands[ExecutionModeCeiling];
 OperandParameters DecorationOperands[DecorationCeiling];
 
 EnumDefinition OperandClassParams[OperandCount];
-EnumParameters ExecutionModelParams[ExecutionModelCeiling];
-EnumParameters AddressingParams[AddressingModelCeiling];
-EnumParameters MemoryParams[MemoryModelCeiling];
 EnumParameters ExecutionModeParams[ExecutionModeCeiling];
-EnumParameters StorageParams[StorageClassCeiling];
-EnumParameters SamplerAddressingModeParams[SamplerAddressingModeCeiling];
-EnumParameters SamplerFilterModeParams[SamplerFilterModeCeiling];
-EnumParameters ImageFormatParams[ImageFormatCeiling];
-EnumParameters ImageChannelOrderParams[ImageChannelOrderCeiling];
-EnumParameters ImageChannelDataTypeParams[ImageChannelDataTypeCeiling];
 EnumParameters ImageOperandsParams[ImageOperandsCeiling];
-EnumParameters FPFastMathParams[FPFastMathCeiling];
-EnumParameters FPRoundingModeParams[FPRoundingModeCeiling];
-EnumParameters LinkageTypeParams[LinkageTypeCeiling];
 EnumParameters DecorationParams[DecorationCeiling];
-EnumParameters BuiltInParams[BuiltInCeiling];
-EnumParameters DimensionalityParams[DimensionCeiling];
-EnumParameters FuncParamAttrParams[FuncParamAttrCeiling];
-EnumParameters AccessQualifierParams[AccessQualifierCeiling];
-EnumParameters GroupOperationParams[GroupOperationCeiling];
 EnumParameters LoopControlParams[FunctionControlCeiling];
 EnumParameters SelectionControlParams[SelectControlCeiling];
 EnumParameters FunctionControlParams[FunctionControlCeiling];
-EnumParameters MemorySemanticsParams[MemorySemanticsCeiling];
-EnumParameters MemoryAccessParams[MemoryAccessCeiling];
-EnumParameters ScopeParams[ScopeCeiling];
-EnumParameters KernelEnqueueFlagsParams[KernelEnqueueFlagsCeiling];
-EnumParameters KernelProfilingInfoParams[KernelProfilingInfoCeiling];
-EnumParameters CapabilityParams[CapabilityCeiling];
 
 // Set up all the parameterizing descriptions of the opcodes, operands, etc.
 void Parameterize()
@@ -1452,354 +1356,39 @@ void Parameterize()
     DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
     DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
 
-    OperandClassParams[OperandSource].set(SourceLanguageCeiling, SourceString, 0);
-    OperandClassParams[OperandExecutionModel].set(ExecutionModelCeiling, ExecutionModelString, ExecutionModelParams);
-    OperandClassParams[OperandAddressing].set(AddressingModelCeiling, AddressingString, AddressingParams);
-    OperandClassParams[OperandMemory].set(MemoryModelCeiling, MemoryString, MemoryParams);
+    OperandClassParams[OperandSource].set(0, SourceString, 0);
+    OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
+    OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
+    OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
     OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
     OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
-    OperandClassParams[OperandStorage].set(StorageClassCeiling, StorageClassString, StorageParams);
-    OperandClassParams[OperandDimensionality].set(DimensionCeiling, DimensionString, DimensionalityParams);
-    OperandClassParams[OperandSamplerAddressingMode].set(SamplerAddressingModeCeiling, SamplerAddressingModeString, SamplerAddressingModeParams);
-    OperandClassParams[OperandSamplerFilterMode].set(SamplerFilterModeCeiling, SamplerFilterModeString, SamplerFilterModeParams);
-    OperandClassParams[OperandSamplerImageFormat].set(ImageFormatCeiling, ImageFormatString, ImageFormatParams);
-    OperandClassParams[OperandImageChannelOrder].set(ImageChannelOrderCeiling, ImageChannelOrderString, ImageChannelOrderParams);
-    OperandClassParams[OperandImageChannelDataType].set(ImageChannelDataTypeCeiling, ImageChannelDataTypeString, ImageChannelDataTypeParams);
+    OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
+    OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
+    OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
+    OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
+    OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
+    OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
+    OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
     OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
-    OperandClassParams[OperandFPFastMath].set(FPFastMathCeiling, FPFastMathString, FPFastMathParams, true);
-    OperandClassParams[OperandFPRoundingMode].set(FPRoundingModeCeiling, FPRoundingModeString, FPRoundingModeParams);
-    OperandClassParams[OperandLinkageType].set(LinkageTypeCeiling, LinkageTypeString, LinkageTypeParams);
-    OperandClassParams[OperandFuncParamAttr].set(FuncParamAttrCeiling, FuncParamAttrString, FuncParamAttrParams);
-    OperandClassParams[OperandAccessQualifier].set(AccessQualifierCeiling, AccessQualifierString, AccessQualifierParams);
+    OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
+    OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
+    OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
+    OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
+    OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
     OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
     OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
-    OperandClassParams[OperandBuiltIn].set(BuiltInCeiling, BuiltInString, BuiltInParams);
+    OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
     OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
     OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
     OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
-    OperandClassParams[OperandMemorySemantics].set(MemorySemanticsCeiling, MemorySemanticsString, MemorySemanticsParams, true);
-    OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
-    OperandClassParams[OperandScope].set(ScopeCeiling, ScopeString, ScopeParams);
-    OperandClassParams[OperandGroupOperation].set(GroupOperationCeiling, GroupOperationString, GroupOperationParams);
-    OperandClassParams[OperandKernelEnqueueFlags].set(KernelEnqueueFlagsCeiling, KernelEnqueueFlagsString, KernelEnqueueFlagsParams);
-    OperandClassParams[OperandKernelProfilingInfo].set(KernelProfilingInfoCeiling, KernelProfilingInfoString, KernelProfilingInfoParams, true);
-    OperandClassParams[OperandCapability].set(CapabilityCeiling, CapabilityString, CapabilityParams);
-    OperandClassParams[OperandOpcode].set(OpcodeCeiling, OpcodeString, 0);
-
-    CapabilityParams[CapabilityShader].caps.push_back(CapabilityMatrix);
-    CapabilityParams[CapabilityGeometry].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityTessellation].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityVector16].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityFloat16Buffer].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityInt64Atomics].caps.push_back(CapabilityInt64);
-    CapabilityParams[CapabilityImageBasic].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityImageReadWrite].caps.push_back(CapabilityImageBasic);
-    CapabilityParams[CapabilityImageMipmap].caps.push_back(CapabilityImageBasic);
-    CapabilityParams[CapabilityPipes].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityDeviceEnqueue].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityLiteralSampler].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityAtomicStorage].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampleRateShading].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityTessellationPointSize].caps.push_back(CapabilityTessellation);
-    CapabilityParams[CapabilityGeometryPointSize].caps.push_back(CapabilityGeometry);
-    CapabilityParams[CapabilityImageGatherExtended].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageExtendedFormats].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageMultisample].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityUniformBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageBufferArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageArrayDynamicIndexing].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityClipDistance].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityCullDistance].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityGenericPointer].caps.push_back(CapabilityAddresses);
-    CapabilityParams[CapabilityInt8].caps.push_back(CapabilityKernel);
-    CapabilityParams[CapabilityInputAttachment].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityMinLod].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySparseResidency].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampled1D].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledRect].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledBuffer].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilitySampledCubeArray].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityImageMSArray].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityImage1D].caps.push_back(CapabilitySampled1D);
-    CapabilityParams[CapabilityImageRect].caps.push_back(CapabilitySampledRect);
-    CapabilityParams[CapabilityImageBuffer].caps.push_back(CapabilitySampledBuffer);
-    CapabilityParams[CapabilityImageCubeArray].caps.push_back(CapabilitySampledCubeArray);
-    CapabilityParams[CapabilityImageQuery].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityDerivativeControl].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityInterpolationFunction].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityTransformFeedback].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityGeometryStreams].caps.push_back(CapabilityGeometry);
-    CapabilityParams[CapabilityStorageImageReadWithoutFormat].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityStorageImageWriteWithoutFormat].caps.push_back(CapabilityShader);
-    CapabilityParams[CapabilityMultiViewport].caps.push_back(CapabilityGeometry);
-
-    AddressingParams[AddressingModelPhysical32].caps.push_back(CapabilityAddresses);
-    AddressingParams[AddressingModelPhysical64].caps.push_back(CapabilityAddresses);
-
-    MemoryParams[MemoryModelSimple].caps.push_back(CapabilityShader);
-    MemoryParams[MemoryModelGLSL450].caps.push_back(CapabilityShader);
-    MemoryParams[MemoryModelOpenCL].caps.push_back(CapabilityKernel);
-
-    MemorySemanticsParams[MemorySemanticsUniformMemoryShift].caps.push_back(CapabilityShader);
-    MemorySemanticsParams[MemorySemanticsAtomicCounterMemoryShift].caps.push_back(CapabilityAtomicStorage);
-
-    ExecutionModelParams[ExecutionModelVertex].caps.push_back(CapabilityShader);
-    ExecutionModelParams[ExecutionModelTessellationControl].caps.push_back(CapabilityTessellation);
-    ExecutionModelParams[ExecutionModelTessellationEvaluation].caps.push_back(CapabilityTessellation);
-    ExecutionModelParams[ExecutionModelGeometry].caps.push_back(CapabilityGeometry);
-    ExecutionModelParams[ExecutionModelFragment].caps.push_back(CapabilityShader);
-    ExecutionModelParams[ExecutionModelGLCompute].caps.push_back(CapabilityShader);
-    ExecutionModelParams[ExecutionModelKernel].caps.push_back(CapabilityKernel);
-
-    // Storage capabilites
-    StorageParams[StorageClassInput].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassUniform].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassOutput].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassPrivate].caps.push_back(CapabilityShader);
-    StorageParams[StorageClassGeneric].caps.push_back(CapabilityKernel);
-    StorageParams[StorageClassAtomicCounter].caps.push_back(CapabilityAtomicStorage);
-    StorageParams[StorageClassPushConstant].caps.push_back(CapabilityShader);
-
-    // Sampler Filter & Addressing mode capabilities
-    SamplerAddressingModeParams[SamplerAddressingModeNone].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeClampToEdge].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeClamp].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeRepeat].caps.push_back(CapabilityKernel);
-    SamplerAddressingModeParams[SamplerAddressingModeRepeatMirrored].caps.push_back(CapabilityKernel);
-
-    SamplerFilterModeParams[SamplerFilterModeNearest].caps.push_back(CapabilityKernel);
-    SamplerFilterModeParams[SamplerFilterModeLinear].caps.push_back(CapabilityKernel);
-
-    // image format capabilities
-
-    // ES/Desktop float
-    ImageFormatParams[ImageFormatRgba32f].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba16f].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatR32f].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8Snorm].caps.push_back(CapabilityShader);
-
-    // Desktop float
-    ImageFormatParams[ImageFormatRg32f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR11fG11fB10f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16f].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRgba16].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRgb10A2].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRgba16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8Snorm].caps.push_back(CapabilityStorageImageExtendedFormats);
-
-    // ES/Desktop int
-    ImageFormatParams[ImageFormatRgba32i].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba16i].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8i].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatR32i].caps.push_back(CapabilityShader);
-
-    // Desktop int
-    ImageFormatParams[ImageFormatRg32i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16i].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8i].caps.push_back(CapabilityStorageImageExtendedFormats);
-
-    // ES/Desktop uint
-    ImageFormatParams[ImageFormatRgba32ui].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba16ui].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatRgba8ui].caps.push_back(CapabilityShader);
-    ImageFormatParams[ImageFormatR32ui].caps.push_back(CapabilityShader);
-
-    // Desktop uint
-    ImageFormatParams[ImageFormatRgb10a2ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg32ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatRg8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR16ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-    ImageFormatParams[ImageFormatR8ui].caps.push_back(CapabilityStorageImageExtendedFormats);
-
-    // image channel order capabilities
-    for (int i = 0; i < ImageChannelOrderCeiling; ++i) {
-        ImageChannelOrderParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // image channel type capabilities
-    for (int i = 0; i < ImageChannelDataTypeCeiling; ++i) {
-        ImageChannelDataTypeParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // image lookup operands
-    ImageOperandsParams[ImageOperandsBiasShift].caps.push_back(CapabilityShader);
-    ImageOperandsParams[ImageOperandsOffsetShift].caps.push_back(CapabilityImageGatherExtended);
-    ImageOperandsParams[ImageOperandsMinLodShift].caps.push_back(CapabilityMinLod);
-
-    // fast math flags capabilities
-    for (int i = 0; i < FPFastMathCeiling; ++i) {
-        FPFastMathParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // fp rounding mode capabilities
-    for (int i = 0; i < FPRoundingModeCeiling; ++i) {
-        FPRoundingModeParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // linkage types
-    for (int i = 0; i < LinkageTypeCeiling; ++i) {
-        LinkageTypeParams[i].caps.push_back(CapabilityLinkage);
-    }
-
-    // function argument types
-    for (int i = 0; i < FuncParamAttrCeiling; ++i) {
-        FuncParamAttrParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // function argument types
-    for (int i = 0; i < AccessQualifierCeiling; ++i) {
-        AccessQualifierParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    ExecutionModeParams[ExecutionModeInvocations].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeSpacingEqual].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeSpacingFractionalEven].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeSpacingFractionalOdd].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeVertexOrderCw].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeVertexOrderCcw].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModePixelCenterInteger].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeOriginUpperLeft].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeOriginLowerLeft].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeEarlyFragmentTests].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModePointMode].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeXfb].caps.push_back(CapabilityTransformFeedback);
-    ExecutionModeParams[ExecutionModeDepthReplacing].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthGreater].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthLess].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeDepthUnchanged].caps.push_back(CapabilityShader);
-    ExecutionModeParams[ExecutionModeLocalSizeHint].caps.push_back(CapabilityKernel);
-    ExecutionModeParams[ExecutionModeInputPoints].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputLines].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeInputLinesAdjacency].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeTriangles].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeInputTrianglesAdjacency].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeQuads].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeIsolines].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeOutputVertices].caps.push_back(CapabilityTessellation);
-    ExecutionModeParams[ExecutionModeOutputPoints].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeOutputLineStrip].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeOutputTriangleStrip].caps.push_back(CapabilityGeometry);
-    ExecutionModeParams[ExecutionModeVecTypeHint].caps.push_back(CapabilityKernel);
-    ExecutionModeParams[ExecutionModeContractionOff].caps.push_back(CapabilityKernel);
-
-    DecorationParams[DecorationRelaxedPrecision].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationBlock].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationBufferBlock].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationRowMajor].caps.push_back(CapabilityMatrix);
-    DecorationParams[DecorationColMajor].caps.push_back(CapabilityMatrix);
-    DecorationParams[DecorationGLSLShared].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationGLSLPacked].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationNoPerspective].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationFlat].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationPatch].caps.push_back(CapabilityTessellation);
-    DecorationParams[DecorationCentroid].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationSample].caps.push_back(CapabilitySampleRateShading);
-    DecorationParams[DecorationInvariant].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationConstant].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationUniform].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationCPacked].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationSaturatedConversion].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationStream].caps.push_back(CapabilityGeometryStreams);
-    DecorationParams[DecorationLocation].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationComponent].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationOffset].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationIndex].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationBinding].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationDescriptorSet].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationXfbBuffer].caps.push_back(CapabilityTransformFeedback);
-    DecorationParams[DecorationXfbStride].caps.push_back(CapabilityTransformFeedback);
-    DecorationParams[DecorationArrayStride].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationMatrixStride].caps.push_back(CapabilityMatrix);
-    DecorationParams[DecorationFuncParamAttr].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationFPRoundingMode].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationFPFastMathMode].caps.push_back(CapabilityKernel);
-    DecorationParams[DecorationLinkageAttributes].caps.push_back(CapabilityLinkage);
-    DecorationParams[DecorationSpecId].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationNoContraction].caps.push_back(CapabilityShader);
-    DecorationParams[DecorationInputAttachmentIndex].caps.push_back(CapabilityInputAttachment);
-    DecorationParams[DecorationAlignment].caps.push_back(CapabilityKernel);
-
-    BuiltInParams[BuiltInPosition].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInPointSize].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInClipDistance].caps.push_back(CapabilityClipDistance);
-    BuiltInParams[BuiltInCullDistance].caps.push_back(CapabilityCullDistance);
-
-    BuiltInParams[BuiltInVertexId].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInVertexId].desc = "Vertex ID, which takes on values 0, 1, 2, . . . .";
-
-    BuiltInParams[BuiltInInstanceId].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInInstanceId].desc = "Instance ID, which takes on values 0, 1, 2, . . . .";
-
-    BuiltInParams[BuiltInVertexIndex].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInVertexIndex].desc = "Vertex index, which takes on values base, base+1, base+2, . . . .";
-
-    BuiltInParams[BuiltInInstanceIndex].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInInstanceIndex].desc = "Instance index, which takes on values base, base+1, base+2, . . . .";
-
-    BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityGeometry);
-    BuiltInParams[BuiltInPrimitiveId].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityGeometry);
-    BuiltInParams[BuiltInInvocationId].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInLayer].caps.push_back(CapabilityGeometry);
-    BuiltInParams[BuiltInViewportIndex].caps.push_back(CapabilityMultiViewport);
-    BuiltInParams[BuiltInTessLevelOuter].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInTessLevelInner].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInTessCoord].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInPatchVertices].caps.push_back(CapabilityTessellation);
-    BuiltInParams[BuiltInFragCoord].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInPointCoord].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInFrontFacing].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInSampleId].caps.push_back(CapabilitySampleRateShading);
-    BuiltInParams[BuiltInSamplePosition].caps.push_back(CapabilitySampleRateShading);
-    BuiltInParams[BuiltInSampleMask].caps.push_back(CapabilitySampleRateShading);
-    BuiltInParams[BuiltInFragDepth].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInHelperInvocation].caps.push_back(CapabilityShader);
-    BuiltInParams[BuiltInWorkDim].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInGlobalSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInEnqueuedWorkgroupSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInGlobalOffset].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInGlobalLinearId].caps.push_back(CapabilityKernel);
-
-    BuiltInParams[BuiltInSubgroupSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInSubgroupMaxSize].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInNumSubgroups].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInNumEnqueuedSubgroups].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInSubgroupId].caps.push_back(CapabilityKernel);
-    BuiltInParams[BuiltInSubgroupLocalInvocationId].caps.push_back(CapabilityKernel);
-
-    DimensionalityParams[Dim1D].caps.push_back(CapabilitySampled1D);
-    DimensionalityParams[DimCube].caps.push_back(CapabilityShader);
-    DimensionalityParams[DimRect].caps.push_back(CapabilitySampledRect);
-    DimensionalityParams[DimBuffer].caps.push_back(CapabilitySampledBuffer);
-    DimensionalityParams[DimSubpassData].caps.push_back(CapabilityInputAttachment);
-
-    // Group Operations
-    for (int i = 0; i < GroupOperationCeiling; ++i) {
-        GroupOperationParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // Enqueue flags
-    for (int i = 0; i < KernelEnqueueFlagsCeiling; ++i) {
-        KernelEnqueueFlagsParams[i].caps.push_back(CapabilityKernel);
-    }
-
-    // Profiling info
-    KernelProfilingInfoParams[0].caps.push_back(CapabilityKernel);
+    OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
+    OperandClassParams[OperandMemoryAccess].set(0, MemoryAccessString, nullptr, true);
+    OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
+    OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
+    OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
+    OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
+    OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
+    OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, 0);
 
     // set name of operator, an initial set of <id> style operands, and the description
 
@@ -1851,7 +1440,6 @@ void Parameterize()
     InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
     InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
 
-    InstructionDesc[OpTypeMatrix].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
     InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
 
@@ -1869,31 +1457,19 @@ void Parameterize()
     InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
     InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
 
-    InstructionDesc[OpTypeRuntimeArray].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
 
     InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
 
-    InstructionDesc[OpTypeOpaque].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
 
     InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
     InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
 
-    InstructionDesc[OpTypeForwardPointer].capabilities.push_back(CapabilityAddresses);
     InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
     InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
 
-    InstructionDesc[OpTypeEvent].capabilities.push_back(CapabilityKernel);
-
-    InstructionDesc[OpTypeDeviceEvent].capabilities.push_back(CapabilityDeviceEnqueue);
-
-    InstructionDesc[OpTypeReserveId].capabilities.push_back(CapabilityPipes);
-
-    InstructionDesc[OpTypeQueue].capabilities.push_back(CapabilityDeviceEnqueue);
-
     InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
-    InstructionDesc[OpTypePipe].capabilities.push_back(CapabilityPipes);
 
     InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
     InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
@@ -1902,7 +1478,6 @@ void Parameterize()
 
     InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
 
-    InstructionDesc[OpConstantSampler].capabilities.push_back(CapabilityLiteralSampler);
     InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
     InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
     InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
@@ -1995,8 +1570,6 @@ void Parameterize()
     InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
     InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
 
-    InstructionDesc[OpCopyMemorySized].capabilities.push_back(CapabilityAddresses);
-
     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
     InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
 
@@ -2017,7 +1590,6 @@ void Parameterize()
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
@@ -2029,40 +1601,34 @@ void Parameterize()
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleDrefImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleDrefExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
@@ -2074,122 +1640,96 @@ void Parameterize()
     InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
     InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageGather].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageDrefGather].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseFetch].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
     InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseGather].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseDrefGather].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
     InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
-    InstructionDesc[OpImageSparseRead].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
-    InstructionDesc[OpImageSparseTexelsResident].capabilities.push_back(CapabilitySparseResidency);
 
     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
-    InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQuerySizeLod].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQuerySize].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
     InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageQueryLod].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQueryLevels].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityKernel);
-    InstructionDesc[OpImageQuerySamples].capabilities.push_back(CapabilityImageQuery);
 
     InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryFormat].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryOrder].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
     InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
@@ -2200,12 +1740,10 @@ void Parameterize()
     InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
     InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
     InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
-    InstructionDesc[OpPtrAccessChain].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
     InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
-    InstructionDesc[OpInBoundsPtrAccessChain].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
 
@@ -2232,65 +1770,49 @@ void Parameterize()
     InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
 
     InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
-    InstructionDesc[OpSatConvertSToU].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
-    InstructionDesc[OpSatConvertUToS].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpConvertPtrToU].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
-    InstructionDesc[OpConvertUToPtr].capabilities.push_back(CapabilityAddresses);
 
     InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpPtrCastToGeneric].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpGenericCastToPtr].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
-    InstructionDesc[OpGenericCastToPtrExplicit].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpGenericPtrMemSemantics].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
 
     InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpTranspose].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
 
     InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
 
     InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsFinite].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsNormal].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpSignBitSet].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpLessOrGreater].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
     InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpOrdered].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
     InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpUnordered].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
     InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
 
     InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
     InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
-    InstructionDesc[OpArrayLength].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
     InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
@@ -2337,23 +1859,18 @@ void Parameterize()
     InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
     InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
 
-    InstructionDesc[OpMatrixTimesScalar].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
     InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
 
-    InstructionDesc[OpVectorTimesMatrix].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
     InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
 
-    InstructionDesc[OpMatrixTimesVector].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
     InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
 
-    InstructionDesc[OpMatrixTimesMatrix].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
     InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
 
-    InstructionDesc[OpOuterProduct].capabilities.push_back(CapabilityMatrix);
     InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
     InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
 
@@ -2404,23 +1921,19 @@ void Parameterize()
     InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
     InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpBitFieldInsert].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
     InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
-    
-    InstructionDesc[OpBitFieldSExtract].capabilities.push_back(CapabilityShader);
+
     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
     InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
     
-    InstructionDesc[OpBitFieldUExtract].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
     InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
     
-    InstructionDesc[OpBitReverse].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
 
     InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
@@ -2495,42 +2008,27 @@ void Parameterize()
     InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
     InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpDPdx].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdy].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidth].capabilities.push_back(CapabilityShader);
     InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdxFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidthFine].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdxCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpFwidthCoarse].capabilities.push_back(CapabilityDerivativeControl);
     InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpEmitVertex].capabilities.push_back(CapabilityGeometry);
-
-    InstructionDesc[OpEndPrimitive].capabilities.push_back(CapabilityGeometry);
-
     InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
-    InstructionDesc[OpEmitStreamVertex].capabilities.push_back(CapabilityGeometryStreams);
 
     InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
-    InstructionDesc[OpEndStreamPrimitive].capabilities.push_back(CapabilityGeometryStreams);
 
     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
@@ -2570,7 +2068,6 @@ void Parameterize()
     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
     InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
@@ -2628,12 +2125,10 @@ void Parameterize()
     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
     InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFlagTestAndSet].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
     InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFlagClear].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
     InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
@@ -2654,19 +2149,15 @@ void Parameterize()
     InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
     InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
 
-    InstructionDesc[OpKill].capabilities.push_back(CapabilityShader);
 
     InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
 
     InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
-    InstructionDesc[OpLifetimeStart].capabilities.push_back(CapabilityKernel);
 
     InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
-    InstructionDesc[OpLifetimeStop].capabilities.push_back(CapabilityKernel);
 
-    InstructionDesc[OpGroupAsyncCopy].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
@@ -2674,77 +2165,62 @@ void Parameterize()
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
     InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpGroupWaitEvents].capabilities.push_back(CapabilityKernel);
     InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
     InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
 
-    InstructionDesc[OpGroupAll].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupAny].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupBroadcast].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
     InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
 
-    InstructionDesc[OpGroupIAdd].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupFAdd].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupUMin].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupSMin].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMin].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupUMax].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupSMax].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMax].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReservedReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
@@ -2752,7 +2228,6 @@ void Parameterize()
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReservedWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
@@ -2760,127 +2235,99 @@ void Parameterize()
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpCommitReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpCommitWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpIsValidReserveId].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
 
-    InstructionDesc[OpGetNumPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGetMaxPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupReserveReadPipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupReserveWritePipePackets].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupCommitReadPipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpGroupCommitWritePipe].capabilities.push_back(CapabilityPipes);
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
     InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpBuildNDRange].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
     InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
 
-    InstructionDesc[OpGetDefaultQueue].capabilities.push_back(CapabilityDeviceEnqueue);
-
-    InstructionDesc[OpCaptureEventProfilingInfo].capabilities.push_back(CapabilityDeviceEnqueue);
-
     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
     InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpSetUserEventStatus].capabilities.push_back(CapabilityDeviceEnqueue);
-
     InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
     InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
 
-    InstructionDesc[OpIsValidEvent].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpCreateUserEvent].capabilities.push_back(CapabilityDeviceEnqueue);
-
-    InstructionDesc[OpRetainEvent].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpReleaseEvent].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpGetKernelWorkGroupSize].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
     InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpEnqueueKernel].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
@@ -2893,184 +2340,149 @@ void Parameterize()
     InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
     InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
 
-    InstructionDesc[OpEnqueueMarker].capabilities.push_back(CapabilityDeviceEnqueue);
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
     InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
 
-    InstructionDesc[OpGroupNonUniformElect].capabilities.push_back(CapabilityGroupNonUniform);
     InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
 
-    InstructionDesc[OpGroupNonUniformAll].capabilities.push_back(CapabilityGroupNonUniformVote);
     InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformAny].capabilities.push_back(CapabilityGroupNonUniformVote);
     InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformAllEqual].capabilities.push_back(CapabilityGroupNonUniformVote);
     InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBroadcast].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
 
-    InstructionDesc[OpGroupNonUniformBroadcastFirst].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallot].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformInverseBallot].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotBitExtract].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
 
-    InstructionDesc[OpGroupNonUniformBallotBitCount].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotFindLSB].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotFindMSB].capabilities.push_back(CapabilityGroupNonUniformBallot);
     InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformShuffle].capabilities.push_back(CapabilityGroupNonUniformShuffle);
     InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
 
-    InstructionDesc[OpGroupNonUniformShuffleXor].capabilities.push_back(CapabilityGroupNonUniformShuffle);
     InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
 
-    InstructionDesc[OpGroupNonUniformShuffleUp].capabilities.push_back(CapabilityGroupNonUniformShuffleRelative);
     InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
 
-    InstructionDesc[OpGroupNonUniformShuffleDown].capabilities.push_back(CapabilityGroupNonUniformShuffleRelative);
     InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
 
-    InstructionDesc[OpGroupNonUniformIAdd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformFAdd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformIMul].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformFMul].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformSMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformUMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformFMin].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformSMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformUMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformFMax].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformBitwiseAnd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformBitwiseOr].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformBitwiseXor].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformLogicalAnd].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformLogicalOr].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformLogicalXor].capabilities.push_back(CapabilityGroupNonUniformArithmetic);
     InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupNonUniformQuadBroadcast].capabilities.push_back(CapabilityGroupNonUniformQuad);
     InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
 
-    InstructionDesc[OpGroupNonUniformQuadSwap].capabilities.push_back(CapabilityGroupNonUniformQuad);
     InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
     InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandLiteralNumber, "'Direction'");
@@ -3079,77 +2491,62 @@ void Parameterize()
 
     InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpSubgroupAnyKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
     InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpSubgroupAllKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
     InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpSubgroupAllEqualKHR].capabilities.push_back(CapabilitySubgroupVoteKHR);
     InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpSubgroupReadInvocationKHR].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
     InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
 
     InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
 
 #ifdef AMD_EXTENSIONS
-    InstructionDesc[OpGroupIAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupFAddNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupUMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupSMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMinNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupUMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupSMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMaxNonUniformAMD].capabilities.push_back(CapabilityGroups);
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
     InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpFragmentMaskFetchAMD].capabilities.push_back(CapabilityFragmentMaskAMD);
     InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
     InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
 
-    InstructionDesc[OpFragmentFetchAMD].capabilities.push_back(CapabilityFragmentMaskAMD);
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
     InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
 #endif
 
 #ifdef NV_EXTENSIONS
-    InstructionDesc[OpGroupNonUniformPartitionNV].capabilities.push_back(CapabilityGroupNonUniformPartitionedNV);
     InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
 #endif
 }
index 710ca1a..7d0475d 100644 (file)
@@ -190,7 +190,6 @@ protected:
 class EnumParameters {
 public:
     EnumParameters() : desc(0) { }
-    EnumCaps caps;
     const char* desc;
 };
 
@@ -235,7 +234,6 @@ public:
     bool hasType()   const { return typePresent != 0; }
 
     const char* opDesc;
-    EnumCaps capabilities;
     OpcodeClass opClass;
     OperandParameters operands;
 
@@ -244,8 +242,6 @@ protected:
     int resultPresent : 1;
 };
 
-const int OpcodeCeiling = 321;
-
 // The set of objects that hold all the instruction/operand
 // parameterization information.
 extern InstructionParameters InstructionDesc[];