Merge pull request #220 from kpet/spv-khr-integer-dot-product

Support SPV_KHR_integer_dot_product
diff --git a/include/spirv/unified1/spirv.core.grammar.json b/include/spirv/unified1/spirv.core.grammar.json
index 9259fdc..04151cc 100644
--- a/include/spirv/unified1/spirv.core.grammar.json
+++ b/include/spirv/unified1/spirv.core.grammar.json
@@ -4261,6 +4261,93 @@
       "version" : "None"
     },
     {
+      "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" ],
+      "version" : "None"
+    },
+    {
+      "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" ],
+      "version" : "None"
+    },
+    {
+      "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" ],
+      "version" : "None"
+    },
+    {
+      "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" ],
+      "version" : "None"
+    },
+    {
+      "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" ],
+      "version" : "None"
+    },
+    {
+      "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" ],
+      "version" : "None"
+    },
+    {
         "opname" : "OpTypeRayQueryKHR",
         "class" : "Reserved",
         "opcode" : 4472,
@@ -13290,6 +13377,31 @@
           "version" : "None"
         },
         {
+          "enumerant" : "DotProductInputAllKHR",
+          "value" : 6016,
+          "extensions" : [ "SPV_KHR_integer_dot_product" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "DotProductInput4x8BitKHR",
+          "value" : 6017,
+          "capabilities" : [ "Int8" ],
+          "extensions" : [ "SPV_KHR_integer_dot_product" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "DotProductInput4x8BitPackedKHR",
+          "value" : 6018,
+          "extensions" : [ "SPV_KHR_integer_dot_product" ],
+          "version" : "None"
+        },
+        {
+          "enumerant" : "DotProductKHR",
+          "value" : 6019,
+          "extensions" : [ "SPV_KHR_integer_dot_product" ],
+          "version" : "None"
+        },
+        {
           "enumerant" : "AtomicFloat32AddEXT",
           "value" : 6033,
           "capabilities" : [ "Shader" ],
@@ -13372,6 +13484,18 @@
       ]
     },
     {
+      "category" : "ValueEnum",
+      "kind" : "PackedVectorFormat",
+      "enumerants" : [
+        {
+          "enumerant" : "PackedVectorFormat4x8BitKHR",
+          "value" : 0,
+          "capabilities" : [ "DotProductInput4x8BitPackedKHR" ],
+          "version" : "None"
+        }
+      ]
+    },
+    {
       "category" : "Id",
       "kind" : "IdResultType",
       "doc" : "Reference to an <id> representing the result's type of the enclosing instruction"
diff --git a/include/spirv/unified1/spirv.cs b/include/spirv/unified1/spirv.cs
index 4d130a1..e8bf8d1 100644
--- a/include/spirv/unified1/spirv.cs
+++ b/include/spirv/unified1/spirv.cs
@@ -1045,6 +1045,10 @@
             IOPipesINTEL = 5943,
             BlockingPipesINTEL = 5945,
             FPGARegINTEL = 5948,
+            DotProductInputAllKHR = 6016,
+            DotProductInput4x8BitKHR = 6017,
+            DotProductInput4x8BitPackedKHR = 6018,
+            DotProductKHR = 6019,
             AtomicFloat32AddEXT = 6033,
             AtomicFloat64AddEXT = 6034,
             LongConstantCompositeINTEL = 6089,
@@ -1147,6 +1151,11 @@
             SAT_SYM = 3,
         }
 
+        public enum PackedVectorFormat
+        {
+            PackedVectorFormat4x8BitKHR = 0,
+        }
+
         public enum Op
         {
             OpNop = 0,
@@ -1505,6 +1514,12 @@
             OpConvertUToAccelerationStructureKHR = 4447,
             OpIgnoreIntersectionKHR = 4448,
             OpTerminateRayKHR = 4449,
+            OpSDotKHR = 4450,
+            OpUDotKHR = 4451,
+            OpSUDotKHR = 4452,
+            OpSDotAccSatKHR = 4453,
+            OpUDotAccSatKHR = 4454,
+            OpSUDotAccSatKHR = 4455,
             OpTypeRayQueryKHR = 4472,
             OpRayQueryInitializeKHR = 4473,
             OpRayQueryTerminateKHR = 4474,
diff --git a/include/spirv/unified1/spirv.h b/include/spirv/unified1/spirv.h
index 0ba7862..cd777e9 100644
--- a/include/spirv/unified1/spirv.h
+++ b/include/spirv/unified1/spirv.h
@@ -1045,6 +1045,10 @@
     SpvCapabilityIOPipesINTEL = 5943,
     SpvCapabilityBlockingPipesINTEL = 5945,
     SpvCapabilityFPGARegINTEL = 5948,
+    SpvCapabilityDotProductInputAllKHR = 6016,
+    SpvCapabilityDotProductInput4x8BitKHR = 6017,
+    SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
+    SpvCapabilityDotProductKHR = 6019,
     SpvCapabilityAtomicFloat32AddEXT = 6033,
     SpvCapabilityAtomicFloat64AddEXT = 6034,
     SpvCapabilityLongConstantCompositeINTEL = 6089,
@@ -1146,6 +1150,11 @@
     SpvOverflowModesMax = 0x7fffffff,
 } SpvOverflowModes;
 
+typedef enum SpvPackedVectorFormat_ {
+    SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
+    SpvPackedVectorFormatMax = 0x7fffffff,
+} SpvPackedVectorFormat;
+
 typedef enum SpvOp_ {
     SpvOpNop = 0,
     SpvOpUndef = 1,
@@ -1503,6 +1512,12 @@
     SpvOpConvertUToAccelerationStructureKHR = 4447,
     SpvOpIgnoreIntersectionKHR = 4448,
     SpvOpTerminateRayKHR = 4449,
+    SpvOpSDotKHR = 4450,
+    SpvOpUDotKHR = 4451,
+    SpvOpSUDotKHR = 4452,
+    SpvOpSDotAccSatKHR = 4453,
+    SpvOpUDotAccSatKHR = 4454,
+    SpvOpSUDotAccSatKHR = 4455,
     SpvOpTypeRayQueryKHR = 4472,
     SpvOpRayQueryInitializeKHR = 4473,
     SpvOpRayQueryTerminateKHR = 4474,
@@ -2143,6 +2158,12 @@
     case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
     case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSDotKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUDotKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSUDotKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSUDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
     case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
diff --git a/include/spirv/unified1/spirv.hpp b/include/spirv/unified1/spirv.hpp
index 06b4384..6b57605 100644
--- a/include/spirv/unified1/spirv.hpp
+++ b/include/spirv/unified1/spirv.hpp
@@ -1041,6 +1041,10 @@
     CapabilityIOPipesINTEL = 5943,
     CapabilityBlockingPipesINTEL = 5945,
     CapabilityFPGARegINTEL = 5948,
+    CapabilityDotProductInputAllKHR = 6016,
+    CapabilityDotProductInput4x8BitKHR = 6017,
+    CapabilityDotProductInput4x8BitPackedKHR = 6018,
+    CapabilityDotProductKHR = 6019,
     CapabilityAtomicFloat32AddEXT = 6033,
     CapabilityAtomicFloat64AddEXT = 6034,
     CapabilityLongConstantCompositeINTEL = 6089,
@@ -1142,6 +1146,11 @@
     OverflowModesMax = 0x7fffffff,
 };
 
+enum PackedVectorFormat {
+    PackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
+    PackedVectorFormatMax = 0x7fffffff,
+};
+
 enum Op {
     OpNop = 0,
     OpUndef = 1,
@@ -1499,6 +1508,12 @@
     OpConvertUToAccelerationStructureKHR = 4447,
     OpIgnoreIntersectionKHR = 4448,
     OpTerminateRayKHR = 4449,
+    OpSDotKHR = 4450,
+    OpUDotKHR = 4451,
+    OpSUDotKHR = 4452,
+    OpSDotAccSatKHR = 4453,
+    OpUDotAccSatKHR = 4454,
+    OpSUDotAccSatKHR = 4455,
     OpTypeRayQueryKHR = 4472,
     OpRayQueryInitializeKHR = 4473,
     OpRayQueryTerminateKHR = 4474,
@@ -2139,6 +2154,12 @@
     case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
     case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
     case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+    case OpSDotKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUDotKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSUDotKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
+    case OpSUDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
     case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
diff --git a/include/spirv/unified1/spirv.hpp11 b/include/spirv/unified1/spirv.hpp11
index 20aaeb6..cac9539 100644
--- a/include/spirv/unified1/spirv.hpp11
+++ b/include/spirv/unified1/spirv.hpp11
@@ -1041,6 +1041,10 @@
     IOPipesINTEL = 5943,
     BlockingPipesINTEL = 5945,
     FPGARegINTEL = 5948,
+    DotProductInputAllKHR = 6016,
+    DotProductInput4x8BitKHR = 6017,
+    DotProductInput4x8BitPackedKHR = 6018,
+    DotProductKHR = 6019,
     AtomicFloat32AddEXT = 6033,
     AtomicFloat64AddEXT = 6034,
     LongConstantCompositeINTEL = 6089,
@@ -1142,6 +1146,11 @@
     Max = 0x7fffffff,
 };
 
+enum class PackedVectorFormat : unsigned {
+    PackedVectorFormat4x8BitKHR = 0,
+    Max = 0x7fffffff,
+};
+
 enum class Op : unsigned {
     OpNop = 0,
     OpUndef = 1,
@@ -1499,6 +1508,12 @@
     OpConvertUToAccelerationStructureKHR = 4447,
     OpIgnoreIntersectionKHR = 4448,
     OpTerminateRayKHR = 4449,
+    OpSDotKHR = 4450,
+    OpUDotKHR = 4451,
+    OpSUDotKHR = 4452,
+    OpSDotAccSatKHR = 4453,
+    OpUDotAccSatKHR = 4454,
+    OpSUDotAccSatKHR = 4455,
     OpTypeRayQueryKHR = 4472,
     OpRayQueryInitializeKHR = 4473,
     OpRayQueryTerminateKHR = 4474,
@@ -2139,6 +2154,12 @@
     case Op::OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
     case Op::OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
     case Op::OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+    case Op::OpSDotKHR: *hasResult = true; *hasResultType = true; break;
+    case Op::OpUDotKHR: *hasResult = true; *hasResultType = true; break;
+    case Op::OpSUDotKHR: *hasResult = true; *hasResultType = true; break;
+    case Op::OpSDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
+    case Op::OpUDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
+    case Op::OpSUDotAccSatKHR: *hasResult = true; *hasResultType = true; break;
     case Op::OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case Op::OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case Op::OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
diff --git a/include/spirv/unified1/spirv.json b/include/spirv/unified1/spirv.json
index 74815c9..c765839 100644
--- a/include/spirv/unified1/spirv.json
+++ b/include/spirv/unified1/spirv.json
@@ -1028,6 +1028,10 @@
                     "IOPipesINTEL": 5943,
                     "BlockingPipesINTEL": 5945,
                     "FPGARegINTEL": 5948,
+                    "DotProductInputAllKHR": 6016,
+                    "DotProductInput4x8BitKHR": 6017,
+                    "DotProductInput4x8BitPackedKHR": 6018,
+                    "DotProductKHR": 6019,
                     "AtomicFloat32AddEXT": 6033,
                     "AtomicFloat64AddEXT": 6034,
                     "LongConstantCompositeINTEL": 6089
@@ -1134,6 +1138,14 @@
                 }
             },
             {
+                "Name": "PackedVectorFormat",
+                "Type": "Value",
+                "Values":
+                {
+                    "PackedVectorFormat4x8BitKHR": 0
+                }
+            },
+            {
                 "Name": "Op",
                 "Type": "Value",
                 "Values":
@@ -1494,6 +1506,12 @@
                     "OpConvertUToAccelerationStructureKHR": 4447,
                     "OpIgnoreIntersectionKHR": 4448,
                     "OpTerminateRayKHR": 4449,
+                    "OpSDotKHR": 4450,
+                    "OpUDotKHR": 4451,
+                    "OpSUDotKHR": 4452,
+                    "OpSDotAccSatKHR": 4453,
+                    "OpUDotAccSatKHR": 4454,
+                    "OpSUDotAccSatKHR": 4455,
                     "OpTypeRayQueryKHR": 4472,
                     "OpRayQueryInitializeKHR": 4473,
                     "OpRayQueryTerminateKHR": 4474,
diff --git a/include/spirv/unified1/spirv.lua b/include/spirv/unified1/spirv.lua
index f1e81de..bd335b1 100644
--- a/include/spirv/unified1/spirv.lua
+++ b/include/spirv/unified1/spirv.lua
@@ -1003,6 +1003,10 @@
         IOPipesINTEL = 5943,
         BlockingPipesINTEL = 5945,
         FPGARegINTEL = 5948,
+        DotProductInputAllKHR = 6016,
+        DotProductInput4x8BitKHR = 6017,
+        DotProductInput4x8BitPackedKHR = 6018,
+        DotProductKHR = 6019,
         AtomicFloat32AddEXT = 6033,
         AtomicFloat64AddEXT = 6034,
         LongConstantCompositeINTEL = 6089,
@@ -1094,6 +1098,10 @@
         SAT_SYM = 3,
     },
 
+    PackedVectorFormat = {
+        PackedVectorFormat4x8BitKHR = 0,
+    },
+
     Op = {
         OpNop = 0,
         OpUndef = 1,
@@ -1451,6 +1459,12 @@
         OpConvertUToAccelerationStructureKHR = 4447,
         OpIgnoreIntersectionKHR = 4448,
         OpTerminateRayKHR = 4449,
+        OpSDotKHR = 4450,
+        OpUDotKHR = 4451,
+        OpSUDotKHR = 4452,
+        OpSDotAccSatKHR = 4453,
+        OpUDotAccSatKHR = 4454,
+        OpSUDotAccSatKHR = 4455,
         OpTypeRayQueryKHR = 4472,
         OpRayQueryInitializeKHR = 4473,
         OpRayQueryTerminateKHR = 4474,
diff --git a/include/spirv/unified1/spirv.py b/include/spirv/unified1/spirv.py
index 4fc2ddd..5f0f806 100644
--- a/include/spirv/unified1/spirv.py
+++ b/include/spirv/unified1/spirv.py
@@ -1003,6 +1003,10 @@
         'IOPipesINTEL' : 5943,
         'BlockingPipesINTEL' : 5945,
         'FPGARegINTEL' : 5948,
+        'DotProductInputAllKHR' : 6016,
+        'DotProductInput4x8BitKHR' : 6017,
+        'DotProductInput4x8BitPackedKHR' : 6018,
+        'DotProductKHR' : 6019,
         'AtomicFloat32AddEXT' : 6033,
         'AtomicFloat64AddEXT' : 6034,
         'LongConstantCompositeINTEL' : 6089,
@@ -1094,6 +1098,10 @@
         'SAT_SYM' : 3,
     },
 
+    'PackedVectorFormat' : {
+        'PackedVectorFormat4x8BitKHR' : 0,
+    },
+
     'Op' : {
         'OpNop' : 0,
         'OpUndef' : 1,
@@ -1451,6 +1459,12 @@
         'OpConvertUToAccelerationStructureKHR' : 4447,
         'OpIgnoreIntersectionKHR' : 4448,
         'OpTerminateRayKHR' : 4449,
+        'OpSDotKHR' : 4450,
+        'OpUDotKHR' : 4451,
+        'OpSUDotKHR' : 4452,
+        'OpSDotAccSatKHR' : 4453,
+        'OpUDotAccSatKHR' : 4454,
+        'OpSUDotAccSatKHR' : 4455,
         'OpTypeRayQueryKHR' : 4472,
         'OpRayQueryInitializeKHR' : 4473,
         'OpRayQueryTerminateKHR' : 4474,
diff --git a/include/spirv/unified1/spv.d b/include/spirv/unified1/spv.d
index d15b3f5..5b6da8e 100644
--- a/include/spirv/unified1/spv.d
+++ b/include/spirv/unified1/spv.d
@@ -1048,6 +1048,10 @@
     IOPipesINTEL = 5943,
     BlockingPipesINTEL = 5945,
     FPGARegINTEL = 5948,
+    DotProductInputAllKHR = 6016,
+    DotProductInput4x8BitKHR = 6017,
+    DotProductInput4x8BitPackedKHR = 6018,
+    DotProductKHR = 6019,
     AtomicFloat32AddEXT = 6033,
     AtomicFloat64AddEXT = 6034,
     LongConstantCompositeINTEL = 6089,
@@ -1150,6 +1154,11 @@
     SAT_SYM = 3,
 }
 
+enum PackedVectorFormat : uint
+{
+    PackedVectorFormat4x8BitKHR = 0,
+}
+
 enum Op : uint
 {
     OpNop = 0,
@@ -1508,6 +1517,12 @@
     OpConvertUToAccelerationStructureKHR = 4447,
     OpIgnoreIntersectionKHR = 4448,
     OpTerminateRayKHR = 4449,
+    OpSDotKHR = 4450,
+    OpUDotKHR = 4451,
+    OpSUDotKHR = 4452,
+    OpSDotAccSatKHR = 4453,
+    OpUDotAccSatKHR = 4454,
+    OpSUDotAccSatKHR = 4455,
     OpTypeRayQueryKHR = 4472,
     OpRayQueryInitializeKHR = 4473,
     OpRayQueryTerminateKHR = 4474,
diff --git a/tools/buildHeaders/jsonToSpirv.cpp b/tools/buildHeaders/jsonToSpirv.cpp
index 78f2133..67b5bce 100644
--- a/tools/buildHeaders/jsonToSpirv.cpp
+++ b/tools/buildHeaders/jsonToSpirv.cpp
@@ -87,6 +87,7 @@
 EnumValues RayQueryCommittedIntersectionTypeParams;
 EnumValues RayQueryCandidateIntersectionTypeParams;
 EnumValues FragmentShadingRateParams;
+EnumValues PackedVectorFormatParams;
 
 std::pair<bool, std::string> ReadFile(const std::string& path)
 {
@@ -231,6 +232,8 @@
             type = OperandRayQueryCandidateIntersectionType;
         } else if (operandKind == "FragmentShadingRate") {
             type = OperandFragmentShadingRate;
+        } else if (operandKind == "PackedVectorFormat") {
+            type = OperandPackedVectorFormat;
         }
 
         if (type == OperandNone) {
@@ -539,6 +542,8 @@
             establishOperandClass(enumName, OperandRayQueryCandidateIntersectionType, &RayQueryCandidateIntersectionTypeParams, operandEnum, category);
         } else if (enumName == "FragmentShadingRate") {
             establishOperandClass(enumName, OperandFragmentShadingRate, &FragmentShadingRateParams, operandEnum, category);
+        } else if (enumName == "PackedVectorFormat") {
+            establishOperandClass(enumName, OperandPackedVectorFormat, &PackedVectorFormatParams, operandEnum, category);
         }
     }
 }
diff --git a/tools/buildHeaders/jsonToSpirv.h b/tools/buildHeaders/jsonToSpirv.h
index b1b7d88..3be6456 100644
--- a/tools/buildHeaders/jsonToSpirv.h
+++ b/tools/buildHeaders/jsonToSpirv.h
@@ -95,6 +95,7 @@
     OperandFPOperationMode,
     OperandQuantizationModes,
     OperandOverflowModes,
+    OperandPackedVectorFormat,
 
     OperandOpcode,