Add "aliases" fields to the grammar and remove duplicated (#447)

* Add "aliases" fields to the grammar

Promotion of extensions lead to duplicated entries.
The patch introduce a new entry "aliases" to the grammar.
It is a list of strings, where each string is an alternative name for the token,
and applies on instructions and operand kind's enumerants.
The grammar is updated to use the fields and all duplicated were removed.

The header generator now processes the aliases when generating the headers to account for the change.
This ensure the generated headers doesn't change.

* Update grammar for SPV_EXT_optnone / SPV_INTEL_optnone
diff --git a/include/spirv/unified1/spirv.core.grammar.json b/include/spirv/unified1/spirv.core.grammar.json
index e5a4c6f..8b2c1c1 100644
--- a/include/spirv/unified1/spirv.core.grammar.json
+++ b/include/spirv/unified1/spirv.core.grammar.json
@@ -4737,6 +4737,7 @@
     {
       "opname" : "OpSDot",
       "class"  : "Arithmetic",
+      "aliases" : ["OpSDotKHR"],
       "opcode" : 4450,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -4746,26 +4747,13 @@
         { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
       ],
       "capabilities" : [ "DotProduct" ],
-      "version" : "1.6"
-    },
-    {
-      "opname" : "OpSDotKHR",
-      "class"  : "Arithmetic",
-      "opcode" : 4450,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Vector 1'" },
-        { "kind" : "IdRef", "name" : "'Vector 2'" },
-        { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
-      ],
-      "capabilities" : [ "DotProductKHR" ],
       "extensions" : [ "SPV_KHR_integer_dot_product" ],
       "version" : "1.6"
     },
     {
       "opname" : "OpUDot",
       "class"  : "Arithmetic",
+      "aliases" : ["OpUDotKHR"],
       "opcode" : 4451,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -4775,26 +4763,13 @@
         { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
       ],
       "capabilities" : [ "DotProduct" ],
-      "version" : "1.6"
-    },
-    {
-      "opname" : "OpUDotKHR",
-      "class"  : "Arithmetic",
-      "opcode" : 4451,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Vector 1'" },
-        { "kind" : "IdRef", "name" : "'Vector 2'" },
-        { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
-      ],
-      "capabilities" : [ "DotProductKHR" ],
       "extensions" : [ "SPV_KHR_integer_dot_product" ],
       "version" : "1.6"
     },
     {
       "opname" : "OpSUDot",
       "class"  : "Arithmetic",
+      "aliases" : ["OpSUDotKHR"],
       "opcode" : 4452,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -4804,26 +4779,13 @@
         { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
       ],
       "capabilities" : [ "DotProduct" ],
-      "version" : "1.6"
-    },
-    {
-      "opname" : "OpSUDotKHR",
-      "class"  : "Arithmetic",
-      "opcode" : 4452,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Vector 1'" },
-        { "kind" : "IdRef", "name" : "'Vector 2'" },
-        { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
-      ],
-      "capabilities" : [ "DotProductKHR" ],
       "extensions" : [ "SPV_KHR_integer_dot_product" ],
       "version" : "1.6"
     },
     {
       "opname" : "OpSDotAccSat",
       "class"  : "Arithmetic",
+      "aliases" : ["OpSDotAccSatKHR"],
       "opcode" : 4453,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -4834,27 +4796,13 @@
         { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
       ],
       "capabilities" : [ "DotProduct" ],
-      "version" : "1.6"
-    },
-    {
-      "opname" : "OpSDotAccSatKHR",
-      "class"  : "Arithmetic",
-      "opcode" : 4453,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Vector 1'" },
-        { "kind" : "IdRef", "name" : "'Vector 2'" },
-        { "kind" : "IdRef", "name" : "'Accumulator'" },
-        { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
-      ],
-      "capabilities" : [ "DotProductKHR" ],
       "extensions" : [ "SPV_KHR_integer_dot_product" ],
       "version" : "1.6"
     },
     {
       "opname" : "OpUDotAccSat",
       "class"  : "Arithmetic",
+      "aliases" : ["OpUDotAccSatKHR"],
       "opcode" : 4454,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -4865,27 +4813,13 @@
         { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
       ],
       "capabilities" : [ "DotProduct" ],
-      "version" : "1.6"
-    },
-    {
-      "opname" : "OpUDotAccSatKHR",
-      "class"  : "Arithmetic",
-      "opcode" : 4454,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Vector 1'" },
-        { "kind" : "IdRef", "name" : "'Vector 2'" },
-        { "kind" : "IdRef", "name" : "'Accumulator'" },
-        { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
-      ],
-      "capabilities" : [ "DotProductKHR" ],
       "extensions" : [ "SPV_KHR_integer_dot_product" ],
       "version" : "1.6"
     },
     {
       "opname" : "OpSUDotAccSat",
       "class"  : "Arithmetic",
+      "aliases" : ["OpSUDotAccSatKHR"],
       "opcode" : 4455,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -4896,21 +4830,6 @@
         { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
       ],
       "capabilities" : [ "DotProduct" ],
-      "version" : "1.6"
-    },
-    {
-      "opname" : "OpSUDotAccSatKHR",
-      "class"  : "Arithmetic",
-      "opcode" : 4455,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Vector 1'" },
-        { "kind" : "IdRef", "name" : "'Vector 2'" },
-        { "kind" : "IdRef", "name" : "'Accumulator'" },
-        { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" }
-      ],
-      "capabilities" : [ "DotProductKHR" ],
       "extensions" : [ "SPV_KHR_integer_dot_product" ],
       "version" : "1.6"
     },
@@ -6057,20 +5976,7 @@
     {
       "opname" : "OpReportIntersectionKHR",
       "class"  : "Reserved",
-      "opcode" : 5334,
-      "operands" : [
-        { "kind" : "IdResultType" },
-        { "kind" : "IdResult" },
-        { "kind" : "IdRef", "name" : "'Hit'" },
-        { "kind" : "IdRef", "name" : "'HitKind'" }
-      ],
-      "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-      "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-      "version" : "None"
-    },
-    {
-      "opname" : "OpReportIntersectionNV",
-      "class"  : "Reserved",
+      "aliases" : ["OpReportIntersectionNV"],
       "opcode" : 5334,
       "operands" : [
         { "kind" : "IdResultType" },
@@ -6188,17 +6094,7 @@
     {
       "opname" : "OpTypeAccelerationStructureKHR",
       "class"  : "Type-Declaration",
-      "opcode" : 5341,
-      "operands" : [
-        { "kind" : "IdResult" }
-      ],
-      "capabilities" : [ "RayTracingNV" , "RayTracingKHR", "RayQueryKHR" ],
-      "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing", "SPV_KHR_ray_query" ],
-      "version" : "None"
-    },
-    {
-      "opname" : "OpTypeAccelerationStructureNV",
-      "class"  : "Type-Declaration",
+      "aliases" : ["OpTypeAccelerationStructureNV"],
       "opcode" : 5341,
       "operands" : [
         { "kind" : "IdResult" }
@@ -6313,18 +6209,12 @@
     {
       "opname" : "OpDemoteToHelperInvocation",
       "class"  : "Control-Flow",
+      "aliases" : ["OpDemoteToHelperInvocationEXT"],
       "opcode" : 5380,
       "capabilities" : [ "DemoteToHelperInvocation" ],
       "version" : "1.6"
     },
     {
-      "opname" : "OpDemoteToHelperInvocationEXT",
-      "class"  : "Control-Flow",
-      "opcode" : 5380,
-      "capabilities" : [ "DemoteToHelperInvocationEXT" ],
-      "version" : "1.6"
-    },
-    {
       "opname" : "OpIsHelperInvocationEXT",
       "class"  : "Reserved",
       "opcode" : 5381,
@@ -6332,7 +6222,7 @@
         { "kind" : "IdResultType" },
         { "kind" : "IdResult" }
       ],
-      "capabilities" : [ "DemoteToHelperInvocationEXT" ],
+      "capabilities" : [ "DemoteToHelperInvocation" ],
       "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ],
       "version" : "None"
     },
@@ -6871,17 +6761,7 @@
     {
       "opname" : "OpDecorateString",
       "class"  : "Annotation",
-      "opcode" : 5632,
-      "operands" : [
-        { "kind" : "IdRef",         "name" : "'Target'" },
-        { "kind" : "Decoration" }
-      ],
-      "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ],
-      "version" : "1.4"
-    },
-    {
-      "opname" : "OpDecorateStringGOOGLE",
-      "class"  : "Annotation",
+      "aliases" : ["OpDecorateStringGOOGLE"],
       "opcode" : 5632,
       "operands" : [
         { "kind" : "IdRef",         "name" : "'Target'" },
@@ -6893,18 +6773,7 @@
     {
       "opname" : "OpMemberDecorateString",
       "class"  : "Annotation",
-      "opcode" : 5633,
-      "operands" : [
-        { "kind" : "IdRef",          "name" : "'Struct Type'" },
-        { "kind" : "LiteralInteger", "name" : "'Member'" },
-        { "kind" : "Decoration" }
-      ],
-      "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ],
-      "version" : "1.4"
-    },
-    {
-      "opname" : "OpMemberDecorateStringGOOGLE",
-      "class"  : "Annotation",
+      "aliases" : ["OpMemberDecorateStringGOOGLE"],
       "opcode" : 5633,
       "operands" : [
         { "kind" : "IdRef",          "name" : "'Struct Type'" },
@@ -10165,15 +10034,7 @@
         },
         {
           "enumerant" : "MakeTexelAvailable",
-          "value" : "0x0100",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "parameters" : [
-            { "kind" : "IdScope" }
-          ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "MakeTexelAvailableKHR",
+          "aliases" : [ "MakeTexelAvailableKHR" ],
           "value" : "0x0100",
           "capabilities" : [ "VulkanMemoryModel" ],
           "parameters" : [
@@ -10184,15 +10045,7 @@
         },
         {
           "enumerant" : "MakeTexelVisible",
-          "value" : "0x0200",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "parameters" : [
-            { "kind" : "IdScope" }
-          ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "MakeTexelVisibleKHR",
+          "aliases" : [ "MakeTexelVisibleKHR" ],
           "value" : "0x0200",
           "capabilities" : [ "VulkanMemoryModel" ],
           "parameters" : [
@@ -10203,12 +10056,7 @@
         },
         {
           "enumerant" : "NonPrivateTexel",
-          "value" : "0x0400",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "NonPrivateTexelKHR",
+          "aliases" : [ "NonPrivateTexelKHR" ],
           "value" : "0x0400",
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -10216,12 +10064,7 @@
         },
         {
           "enumerant" : "VolatileTexel",
-          "value" : "0x0800",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "VolatileTexelKHR",
+          "aliases" : [ "VolatileTexelKHR" ],
           "value" : "0x0800",
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -10288,24 +10131,14 @@
         },
         {
           "enumerant" : "AllowContract",
-          "value" : "0x10000",
-          "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "AllowContractFastINTEL",
+          "aliases" : ["AllowContractFastINTEL"],
           "value" : "0x10000",
           "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ],
           "version" : "None"
         },
         {
           "enumerant" : "AllowReassoc",
-          "value" : "0x20000",
-          "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "AllowReassocINTEL",
+          "aliases" : ["AllowReassocINTEL"],
           "value" : "0x20000",
           "capabilities" : [ "FloatControls2", "FPFastMathModeINTEL" ],
           "version" : "None"
@@ -10531,15 +10364,10 @@
         },
         {
           "enumerant" : "OptNoneEXT",
+          "aliases" : ["OptNoneINTEL"],
           "value" : "0x10000",
           "capabilities" : [  "OptNoneEXT" ],
           "version" : "None"
-        },
-        {
-          "enumerant" : "OptNoneINTEL",
-          "value" : "0x10000",
-          "capabilities" : [  "OptNoneINTEL" ],
-          "version" : "None"
         }
       ]
     },
@@ -10549,11 +10377,7 @@
       "enumerants" : [
         {
           "enumerant" : "Relaxed",
-          "value" : "0x0000",
-          "version" : "1.0"
-        },
-        {
-          "enumerant" : "None",
+          "aliases" : ["None"],
           "value" : "0x0000",
           "version" : "1.0"
         },
@@ -10611,12 +10435,7 @@
         },
         {
           "enumerant" : "OutputMemory",
-          "value" : "0x1000",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "OutputMemoryKHR",
+          "aliases" : ["OutputMemoryKHR"],
           "value" : "0x1000",
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -10624,12 +10443,7 @@
         },
         {
           "enumerant" : "MakeAvailable",
-          "value" : "0x2000",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "MakeAvailableKHR",
+          "aliases" : ["MakeAvailableKHR"],
           "value" : "0x2000",
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -10637,12 +10451,7 @@
         },
         {
           "enumerant" : "MakeVisible",
-          "value" : "0x4000",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "MakeVisibleKHR",
+          "aliases" : ["MakeVisibleKHR"],
           "value" : "0x4000",
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -10686,15 +10495,7 @@
         },
         {
           "enumerant" : "MakePointerAvailable",
-          "value" : "0x0008",
-          "parameters" : [
-            { "kind" : "IdScope" }
-          ],
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "MakePointerAvailableKHR",
+          "aliases" : ["MakePointerAvailableKHR"],
           "value" : "0x0008",
           "parameters" : [
             { "kind" : "IdScope" }
@@ -10705,15 +10506,7 @@
         },
         {
           "enumerant" : "MakePointerVisible",
-          "value" : "0x0010",
-          "parameters" : [
-            { "kind" : "IdScope" }
-          ],
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "MakePointerVisibleKHR",
+          "aliases" : ["MakePointerVisibleKHR"],
           "value" : "0x0010",
           "parameters" : [
             { "kind" : "IdScope" }
@@ -10724,12 +10517,7 @@
         },
         {
           "enumerant" : "NonPrivatePointer",
-          "value" : "0x0020",
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "NonPrivatePointerKHR",
+          "aliases" : ["NonPrivatePointerKHR"],
           "value" : "0x0020",
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -11035,72 +10823,42 @@
         },
         {
           "enumerant" : "RayGenerationKHR",
-          "value" : 5313,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "RayGenerationNV",
+          "aliases" : ["RayGenerationNV"],
           "value" : 5313,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "version" : "None"
         },
         {
           "enumerant" : "IntersectionKHR",
-          "value" : 5314,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "IntersectionNV",
+          "aliases" : ["IntersectionNV"],
           "value" : 5314,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "version" : "None"
         },
         {
           "enumerant" : "AnyHitKHR",
-          "value" : 5315,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "AnyHitNV",
+          "aliases" : ["AnyHitNV"],
           "value" : 5315,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "version" : "None"
         },
         {
           "enumerant" : "ClosestHitKHR",
-          "value" : 5316,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ClosestHitNV",
+          "aliases" : ["ClosestHitNV"],
           "value" : 5316,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "version" : "None"
         },
         {
           "enumerant" : "MissKHR",
-          "value" : 5317,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "MissNV",
+          "aliases" : ["MissNV"],
           "value" : 5317,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "version" : "None"
         },
         {
           "enumerant" : "CallableKHR",
-          "value" : 5318,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "CallableNV",
+          "aliases" : ["CallableNV"],
           "value" : 5318,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "version" : "None"
@@ -11142,17 +10900,11 @@
         },
         {
           "enumerant" : "PhysicalStorageBuffer64",
+          "aliases" : ["PhysicalStorageBuffer64EXT"],
           "value" : 5348,
           "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
           "capabilities" : [ "PhysicalStorageBufferAddresses" ],
           "version" : "1.5"
-        },
-        {
-          "enumerant" : "PhysicalStorageBuffer64EXT",
-          "value" : 5348,
-          "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
-          "capabilities" : [ "PhysicalStorageBufferAddresses" ],
-          "version" : "1.5"
         }
       ]
     },
@@ -11180,12 +10932,7 @@
         },
         {
           "enumerant" : "Vulkan",
-          "value" : 3,
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "VulkanKHR",
+          "aliases" : ["VulkanKHR"],
           "value" : 3,
           "capabilities" : [ "VulkanMemoryModel" ],
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
@@ -11659,13 +11406,7 @@
         },
         {
           "enumerant" : "OutputLinesEXT",
-          "value" : 5269,
-          "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
-          "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "OutputLinesNV",
+          "aliases" : ["OutputLinesNV"],
           "value" : 5269,
           "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
           "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
@@ -11673,16 +11414,7 @@
         },
         {
           "enumerant" : "OutputPrimitivesEXT",
-          "value" : 5270,
-          "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
-          "parameters" : [
-            { "kind" : "LiteralInteger", "name" : "'Primitive count'" }
-          ],
-          "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "OutputPrimitivesNV",
+          "aliases" : ["OutputPrimitivesNV"],
           "value" : 5270,
           "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
           "parameters" : [
@@ -11693,13 +11425,7 @@
         },
         {
           "enumerant" : "DerivativeGroupQuadsKHR",
-          "value" : 5289,
-          "capabilities" : [ "ComputeDerivativeGroupQuadsNV", "ComputeDerivativeGroupQuadsKHR" ],
-          "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "DerivativeGroupQuadsNV",
+          "aliases" : ["DerivativeGroupQuadsNV"],
           "value" : 5289,
           "capabilities" : [ "ComputeDerivativeGroupQuadsNV", "ComputeDerivativeGroupQuadsKHR" ],
           "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
@@ -11707,13 +11433,7 @@
         },
         {
           "enumerant" : "DerivativeGroupLinearKHR",
-          "value" : 5290,
-          "capabilities" : [ "ComputeDerivativeGroupLinearNV", "ComputeDerivativeGroupLinearKHR" ],
-          "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "DerivativeGroupLinearNV",
+          "aliases" : ["DerivativeGroupLinearNV"],
           "value" : 5290,
           "capabilities" : [ "ComputeDerivativeGroupLinearNV", "ComputeDerivativeGroupLinearKHR" ],
           "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
@@ -11721,13 +11441,7 @@
         },
         {
           "enumerant" : "OutputTrianglesEXT",
-          "value" : 5298,
-          "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
-          "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "OutputTrianglesNV",
+          "aliases" : ["OutputTrianglesNV"],
           "value" : 5298,
           "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
           "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
@@ -12041,13 +11755,7 @@
         },
         {
           "enumerant" : "CallableDataKHR",
-          "value" : 5328,
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "CallableDataNV",
+          "aliases" : ["CallableDataNV"],
           "value" : 5328,
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
@@ -12055,13 +11763,7 @@
         },
         {
           "enumerant" : "IncomingCallableDataKHR",
-          "value" : 5329,
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "IncomingCallableDataNV",
+          "aliases" : ["IncomingCallableDataNV"],
           "value" : 5329,
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
@@ -12069,13 +11771,7 @@
         },
         {
           "enumerant" : "RayPayloadKHR",
-          "value" : 5338,
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "RayPayloadNV",
+          "aliases" : ["RayPayloadNV"],
           "value" : 5338,
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
@@ -12083,13 +11779,7 @@
         },
         {
           "enumerant" : "HitAttributeKHR",
-          "value" : 5339,
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "HitAttributeNV",
+          "aliases" : ["HitAttributeNV"],
           "value" : 5339,
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
@@ -12097,13 +11787,7 @@
         },
         {
           "enumerant" : "IncomingRayPayloadKHR",
-          "value" : 5342,
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "IncomingRayPayloadNV",
+          "aliases" : ["IncomingRayPayloadNV"],
           "value" : 5342,
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
@@ -12111,13 +11795,7 @@
         },
         {
           "enumerant" : "ShaderRecordBufferKHR",
-          "value" : 5343,
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ShaderRecordBufferNV",
+          "aliases" : ["ShaderRecordBufferNV"],
           "value" : 5343,
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
@@ -12125,19 +11803,13 @@
         },
         {
           "enumerant" : "PhysicalStorageBuffer",
+          "aliases" : ["PhysicalStorageBufferEXT"],
           "value" : 5349,
           "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
           "capabilities" : [ "PhysicalStorageBufferAddresses" ],
           "version" : "1.5"
         },
         {
-          "enumerant" : "PhysicalStorageBufferEXT",
-          "value" : 5349,
-          "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
-          "capabilities" : [ "PhysicalStorageBufferAddresses" ],
-          "version" : "1.5"
-        },
-        {
           "enumerant" : "HitObjectAttributeNV",
           "value" : 5385,
           "capabilities" : [ "ShaderInvocationReorderNV" ],
@@ -13480,13 +13152,7 @@
         },
         {
           "enumerant" : "PerPrimitiveEXT",
-          "value" : 5271,
-          "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
-          "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "PerPrimitiveNV",
+          "aliases" : ["PerPrimitiveNV"],
           "value" : 5271,
           "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ],
           "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ],
@@ -13508,26 +13174,15 @@
         },
         {
           "enumerant" : "PerVertexKHR",
+          "aliases" : ["PerVertexNV"],
           "value" : 5285,
-          "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ],
-          "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "PerVertexNV",
-          "value" : 5285,
-          "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ],
+          "capabilities" : [ "FragmentBarycentricKHR" ],
           "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
           "version" : "None"
         },
         {
           "enumerant" : "NonUniform",
-          "value" : 5300,
-          "capabilities" : [ "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "NonUniformEXT",
+          "aliases" : ["NonUniformEXT"],
           "value" : 5300,
           "capabilities" : [ "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -13535,33 +13190,21 @@
         },
         {
           "enumerant" : "RestrictPointer",
+          "aliases" : ["RestrictPointerEXT"],
           "value" : 5355,
           "capabilities" : [ "PhysicalStorageBufferAddresses" ],
           "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
           "version" : "1.5"
         },
         {
-          "enumerant" : "RestrictPointerEXT",
-          "value" : 5355,
-          "capabilities" : [ "PhysicalStorageBufferAddresses" ],
-          "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
-          "version" : "1.5"
-        },
-        {
           "enumerant" : "AliasedPointer",
+          "aliases" : ["AliasedPointerEXT"],
           "value" : 5356,
           "capabilities" : [ "PhysicalStorageBufferAddresses" ],
           "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
           "version" : "1.5"
         },
         {
-          "enumerant" : "AliasedPointerEXT",
-          "value" : 5356,
-          "capabilities" : [ "PhysicalStorageBufferAddresses" ],
-          "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
-          "version" : "1.5"
-        },
-        {
           "enumerant" : "HitObjectShaderRecordBufferNV",
           "value" : 5386,
           "capabilities" : [ "ShaderInvocationReorderNV" ],
@@ -13660,37 +13303,23 @@
         },
         {
           "enumerant" : "CounterBuffer",
-          "value" : 5634,
-          "parameters" : [
-            { "kind" : "IdRef", "name" : "'Counter Buffer'" }
-          ],
-          "version" : "1.4"
-        },
-        {
-          "enumerant" : "HlslCounterBufferGOOGLE",
+          "aliases" : ["HlslCounterBufferGOOGLE"],
           "value" : 5634,
           "parameters" : [
             { "kind" : "IdRef", "name" : "'Counter Buffer'" }
           ],
           "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ],
-          "version" : "None"
+          "version" : "1.4"
         },
         {
           "enumerant" : "UserSemantic",
-          "value" : 5635,
-          "parameters" : [
-            { "kind" : "LiteralString", "name" : "'Semantic'" }
-          ],
-          "version" : "1.4"
-        },
-        {
-          "enumerant" : "HlslSemanticGOOGLE",
+          "aliases" : ["HlslSemanticGOOGLE"],
           "value" : 5635,
           "parameters" : [
             { "kind" : "LiteralString", "name" : "'Semantic'" }
           ],
           "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ],
-          "version" : "None"
+          "version" : "1.4"
         },
         {
           "enumerant" : "UserTypeGOOGLE",
@@ -14430,12 +14059,7 @@
         },
         {
           "enumerant" : "SubgroupEqMask",
-          "value" : 4416,
-          "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "SubgroupEqMaskKHR",
+          "aliases" : ["SubgroupEqMaskKHR"],
           "value" : 4416,
           "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
           "extensions" : [ "SPV_KHR_shader_ballot" ],
@@ -14443,12 +14067,7 @@
         },
         {
           "enumerant" : "SubgroupGeMask",
-          "value" : 4417,
-          "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "SubgroupGeMaskKHR",
+          "aliases" : ["SubgroupGeMaskKHR"],
           "value" : 4417,
           "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
           "extensions" : [ "SPV_KHR_shader_ballot" ],
@@ -14456,12 +14075,7 @@
         },
         {
           "enumerant" : "SubgroupGtMask",
-          "value" : 4418,
-          "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "SubgroupGtMaskKHR",
+          "aliases" : ["SubgroupGtMaskKHR"],
           "value" : 4418,
           "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
           "extensions" : [ "SPV_KHR_shader_ballot" ],
@@ -14469,12 +14083,7 @@
         },
         {
           "enumerant" : "SubgroupLeMask",
-          "value" : 4419,
-          "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "SubgroupLeMaskKHR",
+          "aliases" : ["SubgroupLeMaskKHR"],
           "value" : 4419,
           "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
           "extensions" : [ "SPV_KHR_shader_ballot" ],
@@ -14482,12 +14091,7 @@
         },
         {
           "enumerant" : "SubgroupLtMask",
-          "value" : 4420,
-          "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "SubgroupLtMaskKHR",
+          "aliases" : ["SubgroupLtMaskKHR"],
           "value" : 4420,
           "capabilities" : [ "SubgroupBallotKHR", "GroupNonUniformBallot" ],
           "extensions" : [ "SPV_KHR_shader_ballot" ],
@@ -14703,61 +14307,37 @@
         },
         {
           "enumerant" : "BaryCoordKHR",
+          "aliases" : ["BaryCoordNV"],
           "value" : 5286,
-          "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ],
-          "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "BaryCoordNV",
-          "value" : 5286,
-          "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ],
+          "capabilities" : [ "FragmentBarycentricKHR" ],
           "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
           "version" : "None"
         },
         {
           "enumerant" : "BaryCoordNoPerspKHR",
+          "aliases" : ["BaryCoordNoPerspNV"],
           "value" : 5287,
-          "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ],
-          "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "BaryCoordNoPerspNV",
-          "value" : 5287,
-          "capabilities" : [ "FragmentBarycentricNV", "FragmentBarycentricKHR" ],
+          "capabilities" : [ "FragmentBarycentricKHR" ],
           "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
           "version" : "None"
         },
         {
           "enumerant" : "FragSizeEXT",
+          "aliases" : ["FragmentSizeNV"],
           "value" : 5292 ,
-          "capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ],
+          "capabilities" : [ "FragmentDensityEXT" ],
           "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ],
           "version" : "None"
         },
         {
-          "enumerant" : "FragmentSizeNV",
-          "value" : 5292 ,
-          "capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ],
-          "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ],
-          "version" : "None"
-        },
-        {
           "enumerant" : "FragInvocationCountEXT",
+          "aliases" : ["InvocationsPerPixelNV"],
           "value" : 5293,
-          "capabilities" : [ "FragmentDensityEXT", "ShadingRateNV" ],
+          "capabilities" : [ "FragmentDensityEXT" ],
           "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ],
           "version" : "None"
         },
         {
-          "enumerant" : "InvocationsPerPixelNV",
-          "value" : 5293,
-          "capabilities" : [ "ShadingRateNV", "FragmentDensityEXT" ],
-          "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ],
-          "version" : "None"
-        },
-        {
           "enumerant" : "PrimitivePointIndicesEXT",
           "value" : 5294,
           "capabilities" : [ "MeshShadingEXT" ],
@@ -14787,13 +14367,7 @@
         },
         {
           "enumerant" : "LaunchIdKHR",
-          "value" : 5319,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "LaunchIdNV",
+          "aliases" : ["LaunchIdNV"],
           "value" : 5319,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14801,13 +14375,7 @@
         },
         {
           "enumerant" : "LaunchSizeKHR",
-          "value" : 5320,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "LaunchSizeNV",
+          "aliases" : ["LaunchSizeNV"],
           "value" : 5320,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14815,13 +14383,7 @@
         },
         {
           "enumerant" : "WorldRayOriginKHR",
-          "value" : 5321,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "WorldRayOriginNV",
+          "aliases" : ["WorldRayOriginNV"],
           "value" : 5321,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14829,13 +14391,7 @@
         },
         {
           "enumerant" : "WorldRayDirectionKHR",
-          "value" : 5322,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "WorldRayDirectionNV",
+          "aliases" : ["WorldRayDirectionNV"],
           "value" : 5322,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14843,13 +14399,7 @@
         },
         {
           "enumerant" : "ObjectRayOriginKHR",
-          "value" : 5323,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ObjectRayOriginNV",
+          "aliases" : ["ObjectRayOriginNV"],
           "value" : 5323,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14857,13 +14407,7 @@
         },
         {
           "enumerant" : "ObjectRayDirectionKHR",
-          "value" : 5324,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ObjectRayDirectionNV",
+          "aliases" : ["ObjectRayDirectionNV"],
           "value" : 5324,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14871,13 +14415,7 @@
         },
         {
           "enumerant" : "RayTminKHR",
-          "value" : 5325,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "RayTminNV",
+          "aliases" : ["RayTminNV"],
           "value" : 5325,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14885,13 +14423,7 @@
         },
         {
           "enumerant" : "RayTmaxKHR",
-          "value" : 5326,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "RayTmaxNV",
+          "aliases" : ["RayTmaxNV"],
           "value" : 5326,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14899,13 +14431,7 @@
         },
         {
           "enumerant" : "InstanceCustomIndexKHR",
-          "value" : 5327,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "InstanceCustomIndexNV",
+          "aliases" : ["InstanceCustomIndexNV"],
           "value" : 5327,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14913,13 +14439,7 @@
         },
         {
           "enumerant" : "ObjectToWorldKHR",
-          "value" : 5330,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ObjectToWorldNV",
+          "aliases" : ["ObjectToWorldNV"],
           "value" : 5330,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14927,13 +14447,7 @@
         },
         {
           "enumerant" : "WorldToObjectKHR",
-          "value" : 5331,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "WorldToObjectNV",
+          "aliases" : ["WorldToObjectNV"],
           "value" : 5331,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14948,13 +14462,7 @@
         },
         {
           "enumerant" : "HitKindKHR",
-          "value" : 5333,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "HitKindNV",
+          "aliases" : ["HitKindNV"],
           "value" : 5333,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -14987,13 +14495,7 @@
         },
         {
           "enumerant" : "IncomingRayFlagsKHR",
-          "value" : 5351,
-          "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
-          "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "IncomingRayFlagsNV",
+          "aliases" : ["IncomingRayFlagsNV"],
           "value" : 5351,
           "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ],
           "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ],
@@ -15086,12 +14588,7 @@
         },
         {
           "enumerant" : "QueueFamily",
-          "value" : 5,
-          "capabilities" : [ "VulkanMemoryModel" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "QueueFamilyKHR",
+          "aliases" : ["QueueFamilyKHR"],
           "value" : 5,
           "capabilities" : [ "VulkanMemoryModel" ],
           "version" : "1.5"
@@ -15667,33 +15164,16 @@
         },
         {
           "enumerant" : "StorageBuffer16BitAccess",
-          "value" : 4433,
-          "extensions" : [ "SPV_KHR_16bit_storage" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "StorageUniformBufferBlock16",
+          "aliases" : ["StorageUniformBufferBlock16"],
           "value" : 4433,
           "extensions" : [ "SPV_KHR_16bit_storage" ],
           "version" : "1.3"
         },
         {
           "enumerant" : "UniformAndStorageBuffer16BitAccess",
+          "aliases" : ["StorageUniform16"],
           "value" : 4434,
-          "capabilities" : [
-            "StorageBuffer16BitAccess",
-            "StorageUniformBufferBlock16"
-          ],
-          "extensions" : [ "SPV_KHR_16bit_storage" ],
-          "version" : "1.3"
-        },
-        {
-          "enumerant" : "StorageUniform16",
-          "value" : 4434,
-          "capabilities" : [
-            "StorageBuffer16BitAccess",
-            "StorageUniformBufferBlock16"
-          ],
+          "capabilities" : [ "StorageBuffer16BitAccess" ],
           "extensions" : [ "SPV_KHR_16bit_storage" ],
           "version" : "1.3"
         },
@@ -15932,22 +15412,16 @@
         },
         {
           "enumerant" : "ShaderViewportIndexLayerEXT",
+          "aliases" : ["ShaderViewportIndexLayerNV"],
           "value" : 5254,
           "capabilities" : [ "MultiViewport" ],
-          "extensions" : [ "SPV_EXT_shader_viewport_index_layer" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ShaderViewportIndexLayerNV",
-          "value" : 5254,
-          "capabilities" : [ "MultiViewport" ],
-          "extensions" : [ "SPV_NV_viewport_array2" ],
+          "extensions" : [ "SPV_EXT_shader_viewport_index_layer", "SPV_NV_viewport_array2" ],
           "version" : "None"
         },
         {
           "enumerant" : "ShaderViewportMaskNV",
           "value" : 5255,
-          "capabilities" : [ "ShaderViewportIndexLayerNV" ],
+          "capabilities" : [ "ShaderViewportIndexLayerEXT" ],
           "extensions" : [ "SPV_NV_viewport_array2" ],
           "version" : "None"
         },
@@ -15994,25 +15468,14 @@
         },
         {
           "enumerant" : "FragmentBarycentricKHR",
-          "value" : 5284,
-          "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "FragmentBarycentricNV",
+          "aliases" : ["FragmentBarycentricNV"],
           "value" : 5284,
           "extensions" : [ "SPV_NV_fragment_shader_barycentric", "SPV_KHR_fragment_shader_barycentric" ],
           "version" : "None"
         },
         {
           "enumerant" : "ComputeDerivativeGroupQuadsKHR",
-          "value" : 5288,
-          "capabilities" : [ "Shader" ],
-          "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ComputeDerivativeGroupQuadsNV",
+          "aliases" : ["ComputeDerivativeGroupQuadsNV"],
           "value" : 5288,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
@@ -16020,19 +15483,13 @@
         },
         {
           "enumerant" : "FragmentDensityEXT",
+          "aliases" : ["ShadingRateNV"],
           "value" : 5291,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate" ],
           "version" : "None"
         },
         {
-          "enumerant" : "ShadingRateNV",
-          "value" : 5291,
-          "capabilities" : [ "Shader" ],
-          "extensions" : [ "SPV_NV_shading_rate", "SPV_EXT_fragment_invocation_density" ],
-          "version" : "None"
-        },
-        {
           "enumerant" : "GroupNonUniformPartitionedNV",
           "value" : 5297,
           "extensions" : [ "SPV_NV_shader_subgroup_partitioned" ],
@@ -16040,12 +15497,7 @@
         },
         {
           "enumerant" : "ShaderNonUniform",
-          "value" : 5301,
-          "capabilities" : [ "Shader" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "ShaderNonUniformEXT",
+          "aliases" : ["ShaderNonUniformEXT"],
           "value" : 5301,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16053,12 +15505,7 @@
         },
         {
           "enumerant" : "RuntimeDescriptorArray",
-          "value" : 5302,
-          "capabilities" : [ "Shader" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "RuntimeDescriptorArrayEXT",
+          "aliases" : ["RuntimeDescriptorArrayEXT"],
           "value" : 5302,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16066,12 +15513,7 @@
         },
         {
           "enumerant" : "InputAttachmentArrayDynamicIndexing",
-          "value" : 5303,
-          "capabilities" : [ "InputAttachment" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "InputAttachmentArrayDynamicIndexingEXT",
+          "aliases" : ["InputAttachmentArrayDynamicIndexingEXT"],
           "value" : 5303,
           "capabilities" : [ "InputAttachment" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16079,12 +15521,7 @@
         },
         {
           "enumerant" : "UniformTexelBufferArrayDynamicIndexing",
-          "value" : 5304,
-          "capabilities" : [ "SampledBuffer" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "UniformTexelBufferArrayDynamicIndexingEXT",
+          "aliases" : ["UniformTexelBufferArrayDynamicIndexingEXT"],
           "value" : 5304,
           "capabilities" : [ "SampledBuffer" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16092,12 +15529,7 @@
         },
         {
           "enumerant" : "StorageTexelBufferArrayDynamicIndexing",
-          "value" : 5305,
-          "capabilities" : [ "ImageBuffer" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "StorageTexelBufferArrayDynamicIndexingEXT",
+          "aliases" : ["StorageTexelBufferArrayDynamicIndexingEXT"],
           "value" : 5305,
           "capabilities" : [ "ImageBuffer" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16105,12 +15537,7 @@
         },
         {
           "enumerant" : "UniformBufferArrayNonUniformIndexing",
-          "value" : 5306,
-          "capabilities" : [ "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "UniformBufferArrayNonUniformIndexingEXT",
+          "aliases" : ["UniformBufferArrayNonUniformIndexingEXT"],
           "value" : 5306,
           "capabilities" : [ "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16118,12 +15545,7 @@
         },
         {
           "enumerant" : "SampledImageArrayNonUniformIndexing",
-          "value" : 5307,
-          "capabilities" : [ "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "SampledImageArrayNonUniformIndexingEXT",
+          "aliases" : ["SampledImageArrayNonUniformIndexingEXT"],
           "value" : 5307,
           "capabilities" : [ "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16131,12 +15553,7 @@
         },
         {
           "enumerant" : "StorageBufferArrayNonUniformIndexing",
-          "value" : 5308,
-          "capabilities" : [ "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "StorageBufferArrayNonUniformIndexingEXT",
+          "aliases" : ["StorageBufferArrayNonUniformIndexingEXT"],
           "value" : 5308,
           "capabilities" : [ "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16144,12 +15561,7 @@
         },
         {
           "enumerant" : "StorageImageArrayNonUniformIndexing",
-          "value" : 5309,
-          "capabilities" : [ "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "StorageImageArrayNonUniformIndexingEXT",
+          "aliases" : ["StorageImageArrayNonUniformIndexingEXT"],
           "value" : 5309,
           "capabilities" : [ "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16157,12 +15569,7 @@
         },
         {
           "enumerant" : "InputAttachmentArrayNonUniformIndexing",
-          "value" : 5310,
-          "capabilities" : [ "InputAttachment", "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "InputAttachmentArrayNonUniformIndexingEXT",
+          "aliases" : ["InputAttachmentArrayNonUniformIndexingEXT"],
           "value" : 5310,
           "capabilities" : [ "InputAttachment", "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16170,12 +15577,7 @@
         },
         {
           "enumerant" : "UniformTexelBufferArrayNonUniformIndexing",
-          "value" : 5311,
-          "capabilities" : [ "SampledBuffer", "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "UniformTexelBufferArrayNonUniformIndexingEXT",
+          "aliases" : ["UniformTexelBufferArrayNonUniformIndexingEXT"],
           "value" : 5311,
           "capabilities" : [ "SampledBuffer", "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16183,12 +15585,7 @@
         },
         {
           "enumerant" : "StorageTexelBufferArrayNonUniformIndexing",
-          "value" : 5312,
-          "capabilities" : [ "ImageBuffer", "ShaderNonUniform" ],
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "StorageTexelBufferArrayNonUniformIndexingEXT",
+          "aliases" : ["StorageTexelBufferArrayNonUniformIndexingEXT"],
           "value" : 5312,
           "capabilities" : [ "ImageBuffer", "ShaderNonUniform" ],
           "extensions" : [ "SPV_EXT_descriptor_indexing" ],
@@ -16217,49 +15614,29 @@
         },
         {
           "enumerant" : "VulkanMemoryModel",
-          "value" : 5345,
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "VulkanMemoryModelKHR",
+          "aliases" : ["VulkanMemoryModelKHR"],
           "value" : 5345,
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
           "version" : "1.5"
         },
         {
           "enumerant" : "VulkanMemoryModelDeviceScope",
-          "value" : 5346,
-          "version" : "1.5"
-        },
-        {
-          "enumerant" : "VulkanMemoryModelDeviceScopeKHR",
+          "aliases" : ["VulkanMemoryModelDeviceScopeKHR"],
           "value" : 5346,
           "extensions" : [ "SPV_KHR_vulkan_memory_model" ],
           "version" : "1.5"
         },
         {
           "enumerant" : "PhysicalStorageBufferAddresses",
+          "aliases" : ["PhysicalStorageBufferAddressesEXT"],
           "value" : 5347,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer" ],
           "version" : "1.5"
         },
         {
-          "enumerant" : "PhysicalStorageBufferAddressesEXT",
-          "value" : 5347,
-          "capabilities" : [ "Shader" ],
-          "extensions" : [ "SPV_EXT_physical_storage_buffer" ],
-          "version" : "1.5"
-        },
-        {
           "enumerant" : "ComputeDerivativeGroupLinearKHR",
-          "value" : 5350,
-          "capabilities" : [ "Shader" ],
-          "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "ComputeDerivativeGroupLinearNV",
+          "aliases" : ["ComputeDerivativeGroupLinearNV"],
           "value" : 5350,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_NV_compute_shader_derivatives", "SPV_KHR_compute_shader_derivatives" ],
@@ -16309,12 +15686,7 @@
         },
         {
           "enumerant" : "DemoteToHelperInvocation",
-          "value" : 5379,
-          "capabilities" : [ "Shader" ],
-          "version" : "1.6"
-        },
-        {
-          "enumerant" : "DemoteToHelperInvocationEXT",
+          "aliases" : ["DemoteToHelperInvocationEXT"],
           "value" : 5379,
           "capabilities" : [ "Shader" ],
           "extensions" : [ "SPV_EXT_demote_to_helper_invocation" ],
@@ -16630,23 +16002,14 @@
         },
         {
           "enumerant" : "DotProductInputAll",
-          "value" : 6016,
-          "version" : "1.6"
-        },
-        {
-          "enumerant" : "DotProductInputAllKHR",
+          "aliases" : ["DotProductInputAllKHR"],
           "value" : 6016,
           "extensions" : [ "SPV_KHR_integer_dot_product" ],
           "version" : "1.6"
         },
         {
           "enumerant" : "DotProductInput4x8Bit",
-          "value" : 6017,
-          "capabilities" : [ "Int8" ],
-          "version" : "1.6"
-        },
-        {
-          "enumerant" : "DotProductInput4x8BitKHR",
+          "aliases" : ["DotProductInput4x8BitKHR"],
           "value" : 6017,
           "capabilities" : [ "Int8" ],
           "extensions" : [ "SPV_KHR_integer_dot_product" ],
@@ -16654,22 +16017,14 @@
         },
         {
           "enumerant" : "DotProductInput4x8BitPacked",
-          "value" : 6018,
-          "version" : "1.6"
-        },
-        {
-          "enumerant" : "DotProductInput4x8BitPackedKHR",
+          "aliases" : ["DotProductInput4x8BitPackedKHR"],
           "value" : 6018,
           "extensions" : [ "SPV_KHR_integer_dot_product" ],
           "version" : "1.6"
         },
         {
           "enumerant" : "DotProduct",
-          "value" : 6019,
-          "version" : "1.6"
-        },
-        {
-          "enumerant" : "DotProductKHR",
+          "aliases" : ["DotProductKHR"],
           "value" : 6019,
           "extensions" : [ "SPV_KHR_integer_dot_product" ],
           "version" : "1.6"
@@ -16731,14 +16086,9 @@
         },
         {
           "enumerant" : "OptNoneEXT",
+          "aliases" : ["OptNoneINTEL"],
           "value" : 6094,
-          "extensions" : [ "SPV_EXT_optnone" ],
-          "version" : "None"
-        },
-        {
-          "enumerant" : "OptNoneINTEL",
-          "value" : 6094,
-          "extensions" : [ "SPV_INTEL_optnone" ],
+          "extensions" : [ "SPV_EXT_optnone", "SPV_INTEL_optnone" ],
           "version" : "None"
         },
         {
@@ -16913,11 +16263,7 @@
       "enumerants" : [
         {
           "enumerant" : "PackedVectorFormat4x8Bit",
-          "value" : 0,
-          "version" : "1.6"
-        },
-        {
-          "enumerant" : "PackedVectorFormat4x8BitKHR",
+          "aliases" : ["PackedVectorFormat4x8BitKHR"],
           "value" : 0,
           "extensions" : [ "SPV_KHR_integer_dot_product" ],
           "version" : "1.6"
diff --git a/tools/buildHeaders/header.cpp b/tools/buildHeaders/header.cpp
index 9f7264a..f8e4627 100644
--- a/tools/buildHeaders/header.cpp
+++ b/tools/buildHeaders/header.cpp
@@ -243,6 +243,10 @@
             for (auto& enumRow : enumSet) {
                 std::string name = enumRow.name;
                 enums[e - spv::OperandSource]["Values"][name] = enumRow.value;
+                // Add aliases
+                for (auto& alias : enumRow.aliases) {
+                    enums[e - spv::OperandSource]["Values"][alias] = enumRow.value;
+                }
             }
 
             enums[e - spv::OperandSource]["Type"] = mask ? "Bit" : "Value";
@@ -255,6 +259,10 @@
             for (auto& enumRow : spv::InstructionDesc) {
                 std::string name = enumRow.name;
                 entry["Values"][name] = enumRow.value;
+                // Add aliases
+                for (auto& alias : enumRow.aliases) {
+                    entry["Values"][alias] = enumRow.value;
+                }
             }
             entry["Type"] = "Value";
             entry["Name"] = "Op";
diff --git a/tools/buildHeaders/jsonToSpirv.cpp b/tools/buildHeaders/jsonToSpirv.cpp
index a821a1c..46cf83e 100644
--- a/tools/buildHeaders/jsonToSpirv.cpp
+++ b/tools/buildHeaders/jsonToSpirv.cpp
@@ -474,37 +474,6 @@
     return bit;
 }
 
-// Given two pairs (name and in core) compares if the order is correct for naming
-// conventions. The conventions are:
-// * Core
-// * KHR
-// * EXT
-// * Vendor (no preference between vendors)
-//
-// Returns true if the order is valid.
-bool SuffixComparison(const std::string& prev, bool prevCore,
-                      const std::string& cur, bool curCore)
-{
-  // Duplicate entry
-  if (prev == cur) return false;
-
-  if (prevCore) return true;
-  if (curCore) return false;
-
-  // Both are suffixed names.
-  const bool prevKHR = prev.substr(prev.size() - 3) == "KHR";
-  const bool prevEXT = prev.substr(prev.size() - 3) == "EXT";
-  const bool curKHR = cur.substr(cur.size() - 3) == "KHR";
-  const bool curEXT = cur.substr(cur.size() - 3) == "EXT";
-
-  if (prevKHR) return true;
-  if (curKHR) return false;
-  if (prevEXT) return true;
-  if (curEXT) return false;
-
-  return true;
-}
-
 void jsonToSpirv(const std::string& jsonPath, bool buildingHeaders)
 {
     // only do this once.
@@ -562,6 +531,18 @@
         return result;
     };
 
+    const auto getAliases = [](const Json::Value& object) {
+        Aliases result;
+        const auto& aliases = object["aliases"];
+        if (!aliases.empty()) {
+            assert(aliases.isArray());
+            for (const auto& alias : aliases) {
+                result.emplace_back(alias.asString());
+            }
+        }
+        return result;
+    };
+
     // set up the printing classes
     std::unordered_set<std::string> tags;  // short-lived local for error checking below
     const Json::Value printingClasses = root["instruction_printing_class"];
@@ -613,12 +594,9 @@
                       << " is out of order. It follows the instruction with opcode " << maxOpcode
                       << std::endl;
             std::exit(1);
-          } else if (maxOpcode == opcode &&
-                     !SuffixComparison(maxName, maxCore, name,
-                                       version != "None")) {
-            std::cerr << "Error: " << name
-                      << " is out of order. It follows alias " << maxName
-                      << std::endl;
+          } else if (maxOpcode == opcode) {
+            std::cerr << "Error: " << name << " is an alias of " << maxName
+            << ". Use \"aliases\" instead." << std::endl;
             std::exit(1);
           } else {
             maxOpcode = opcode;
@@ -626,6 +604,7 @@
             maxCore = version != "None";
           }
         }
+        Aliases aliases = getAliases(inst);
         EnumCaps caps = getCaps(inst);
         std::string lastVersion = inst["lastVersion"].asString();
         Extensions exts = getExts(inst);
@@ -642,7 +621,7 @@
             }
         }
         InstructionDesc.emplace_back(
-            std::move(EnumValue(opcode, name,
+            std::move(EnumValue(opcode, name, std::move(aliases),
                                 std::move(caps), std::move(version), std::move(lastVersion), std::move(exts),
                                 std::move(operands))),
              printingClass, defTypeId, defResultId);
@@ -654,7 +633,7 @@
     // Specific additional context-dependent operands
 
     // Populate dest with EnumValue objects constructed from source.
-    const auto populateEnumValues = [&getCaps,&getExts,&errorCount](EnumValues* dest, const Json::Value& source, bool bitEnum) {
+    const auto populateEnumValues = [&getCaps,&getAliases,&getExts,&errorCount](EnumValues* dest, const Json::Value& source, bool bitEnum) {
         // A lambda for determining the numeric value to be used for a given
         // enumerant in JSON form, and whether that value is a 0 in a bitfield.
         auto getValue = [&bitEnum](const Json::Value& enumerant) {
@@ -694,11 +673,9 @@
                           << " is out of order. It has value " <<  value
                           << " but follows the enumerant with value " << maxValue << std::endl;
                 std::exit(1);
-              } else if (maxValue == value &&
-                         !SuffixComparison(maxName, maxCore, name,
-                                           version != "None")) {
+              } else if (maxValue == value ) {
                 std::cerr << "Error: " << source["kind"] << " enumerant " << name
-                          << " is out of order. It follows alias " << maxName << std::endl;
+                          << " is an alias of " << maxName << ". Use \"aliases\" instead." << std::endl;
                 std::exit(1);
               } else {
                 maxValue = value;
@@ -706,6 +683,7 @@
                 maxCore = version != "None";
               }
             }
+            Aliases aliases = getAliases(enumerant);
             EnumCaps caps(getCaps(enumerant));
             std::string lastVersion = enumerant["lastVersion"].asString();
             Extensions exts(getExts(enumerant));
@@ -721,7 +699,7 @@
                 }
             }
             dest->emplace_back(
-                value, enumerant["enumerant"].asString(),
+                value, enumerant["enumerant"].asString(), std::move(aliases),
                 std::move(caps), std::move(version), std::move(lastVersion), std::move(exts), std::move(params));
         }
     };
diff --git a/tools/buildHeaders/jsonToSpirv.h b/tools/buildHeaders/jsonToSpirv.h
index f07e96a..19376ca 100644
--- a/tools/buildHeaders/jsonToSpirv.h
+++ b/tools/buildHeaders/jsonToSpirv.h
@@ -125,6 +125,9 @@
 // A set of extensions.
 typedef std::vector<std::string> Extensions;
 
+// A set of aliases.
+typedef std::vector<std::string> Aliases;
+
 // Parameterize a set of operands with their OperandClass(es) and descriptions.
 class OperandParameters {
 public:
@@ -205,18 +208,21 @@
 class EnumValue {
 public:
     EnumValue() : value(0), desc(nullptr) {}
-    EnumValue(unsigned int the_value, const std::string& the_name, EnumCaps&& the_caps,
+    EnumValue(unsigned int the_value, const std::string& the_name, Aliases&& the_aliases, EnumCaps&& the_caps,
         const std::string& the_firstVersion, const std::string& the_lastVersion,
         Extensions&& the_extensions, OperandParameters&& the_operands) :
-      value(the_value), name(the_name), capabilities(std::move(the_caps)),
+      value(the_value), name(the_name), aliases(std::move(the_aliases)), capabilities(std::move(the_caps)),
       firstVersion(std::move(the_firstVersion)), lastVersion(std::move(the_lastVersion)),
       extensions(std::move(the_extensions)), operands(std::move(the_operands)), desc(nullptr) { }
 
+    bool hasAliases() const { return !aliases.empty(); }
+
     // For ValueEnum, the value from the JSON file.
     // For BitEnum, the index of the bit position represented by this mask.
     // (That is, what you shift 1 by to get the mask.)
     unsigned value;
     std::string name;
+    Aliases aliases;
     EnumCaps capabilities;
     std::string firstVersion;
     std::string lastVersion;
@@ -278,19 +284,14 @@
        printingClass(printClass),
        opDesc("TBD."),
        typePresent(has_type),
-       resultPresent(has_result),
-       alias(this) { }
+       resultPresent(has_result) { }
     InstructionValue(const InstructionValue& v)
     {
         *this = v;
-        alias = this;
     }
 
     bool hasResult() const { return resultPresent != 0; }
     bool hasType()   const { return typePresent != 0; }
-    void setAlias(const InstructionValue& a) { alias = &a; }
-    const InstructionValue& getAlias() const { return *alias; }
-    bool isAlias() const { return alias != this; }
 
     std::string printingClass;
     const char* opDesc;
@@ -298,7 +299,6 @@
 protected:
     int typePresent   : 1;
     int resultPresent : 1;
-    const InstructionValue* alias;    // correct only after discovering the aliases; otherwise points to this
 };
 
 using InstructionValues = EnumValuesContainer<InstructionValue>;