From 1de2e410ae8b5f7276afcfd9f3401a1c4e2cb2d7 Mon Sep 17 00:00:00 2001
From: Wooyoung Kim <wooykim@qti.qualcomm.com>
Date: Wed, 2 Jul 2025 08:52:46 -0700
Subject: [PATCH] SPV_QCOM_cooperative_matrix_conversion (#533) (#533)

---
 include/spirv/unified1/spirv.bf               |  5 ++
 .../spirv/unified1/spirv.core.grammar.json    | 56 +++++++++++++++++++
 include/spirv/unified1/spirv.cs               |  5 ++
 include/spirv/unified1/spirv.h                | 14 +++++
 include/spirv/unified1/spirv.hpp              | 14 +++++
 include/spirv/unified1/spirv.hpp11            | 14 +++++
 include/spirv/unified1/spirv.json             |  5 ++
 include/spirv/unified1/spirv.lua              |  5 ++
 include/spirv/unified1/spirv.py               |  5 ++
 include/spirv/unified1/spv.d                  |  5 ++
 10 files changed, 128 insertions(+)

diff --git a/include/spirv/unified1/spirv.bf b/include/spirv/unified1/spirv.bf
index 630f2f4ff..95469e77d 100644
--- a/include/spirv/unified1/spirv.bf
+++ b/include/spirv/unified1/spirv.bf
@@ -1138,6 +1138,7 @@ namespace Spv
             TextureBoxFilterQCOM = 4485,
             TextureBlockMatchQCOM = 4486,
             TileShadingQCOM = 4495,
+            CooperativeMatrixConversionQCOM = 4496,
             TextureBlockMatch2QCOM = 4498,
             Float16ImageAMD = 5008,
             ImageGatherBiasLodAMD = 5009,
@@ -2081,10 +2082,14 @@ namespace Spv
             OpImageBoxFilterQCOM = 4481,
             OpImageBlockMatchSSDQCOM = 4482,
             OpImageBlockMatchSADQCOM = 4483,
+            OpBitCastArrayQCOM = 4497,
             OpImageBlockMatchWindowSSDQCOM = 4500,
             OpImageBlockMatchWindowSADQCOM = 4501,
             OpImageBlockMatchGatherSSDQCOM = 4502,
             OpImageBlockMatchGatherSADQCOM = 4503,
+            OpCompositeConstructCoopMatQCOM = 4540,
+            OpCompositeExtractCoopMatQCOM = 4541,
+            OpExtractSubArrayQCOM = 4542,
             OpGroupIAddNonUniformAMD = 5000,
             OpGroupFAddNonUniformAMD = 5001,
             OpGroupFMinNonUniformAMD = 5002,
diff --git a/include/spirv/unified1/spirv.core.grammar.json b/include/spirv/unified1/spirv.core.grammar.json
index 2470bfadb..f9b01b468 100644
--- a/include/spirv/unified1/spirv.core.grammar.json
+++ b/include/spirv/unified1/spirv.core.grammar.json
@@ -5268,6 +5268,18 @@
       "capabilities" : [ "TextureBlockMatchQCOM" ],
       "version" : "None"
     },
+    {
+      "opname" : "OpBitCastArrayQCOM",
+      "class"  : "Conversion",
+      "opcode" : 4497,
+      "operands" : [
+        { "kind" : "IdResultType" },
+        { "kind" : "IdResult" },
+        { "kind" : "IdRef", "name" : "Source Array" }
+      ],
+      "capabilities" : [ "CooperativeMatrixConversionQCOM" ],
+      "version" : "None"
+    },
     {
       "opname" : "OpImageBlockMatchWindowSSDQCOM",
       "class"  : "Image",
@@ -5332,6 +5344,43 @@
       "capabilities" : [ "TextureBlockMatch2QCOM" ],
       "version" : "None"
     },
+    {
+      "opname" : "OpCompositeConstructCoopMatQCOM",
+      "class"  : "Composite",
+      "opcode" : 4540,
+      "operands" : [
+        { "kind" : "IdResultType" },
+        { "kind" : "IdResult" },
+        { "kind" : "IdRef", "name" : "Source Array" }
+      ],
+      "capabilities" : [ "CooperativeMatrixConversionQCOM" ],
+      "version" : "None"
+    },
+    {
+      "opname" : "OpCompositeExtractCoopMatQCOM",
+      "class"  : "Composite",
+      "opcode" : 4541,
+      "operands" : [
+        { "kind" : "IdResultType" },
+        { "kind" : "IdResult" },
+        { "kind" : "IdRef", "name" : "Source Cooperative Matrix" }
+      ],
+      "capabilities" : [ "CooperativeMatrixConversionQCOM" ],
+      "version" : "None"
+    },
+    {
+      "opname" : "OpExtractSubArrayQCOM",
+      "class"  : "Composite",
+      "opcode" : 4542,
+      "operands" : [
+        { "kind" : "IdResultType" },
+        { "kind" : "IdResult" },
+        { "kind" : "IdRef", "name" : "Source Array" },
+        { "kind" : "IdRef", "name" : "index" }
+      ],
+      "capabilities" : [ "CooperativeMatrixConversionQCOM" ],
+      "version" : "None"
+    },
     {
       "opname" : "OpGroupIAddNonUniformAMD",
       "class"  : "Group",
@@ -16688,6 +16737,13 @@
           "extensions" : [ "SPV_QCOM_tile_shading" ],
           "version" : "None"
         },
+        {
+          "enumerant" : "CooperativeMatrixConversionQCOM",
+          "value" : 4496,
+          "capabilities" : [ "CooperativeMatrixKHR" ],
+          "extensions" : [ "SPV_QCOM_cooperative_matrix_conversion" ],
+          "version" : "None"
+        },
         {
           "enumerant" : "TextureBlockMatch2QCOM",
           "value" : 4498,
diff --git a/include/spirv/unified1/spirv.cs b/include/spirv/unified1/spirv.cs
index 57e7216eb..607663378 100644
--- a/include/spirv/unified1/spirv.cs
+++ b/include/spirv/unified1/spirv.cs
@@ -1137,6 +1137,7 @@ public enum Capability
             TextureBoxFilterQCOM = 4485,
             TextureBlockMatchQCOM = 4486,
             TileShadingQCOM = 4495,
+            CooperativeMatrixConversionQCOM = 4496,
             TextureBlockMatch2QCOM = 4498,
             Float16ImageAMD = 5008,
             ImageGatherBiasLodAMD = 5009,
@@ -2080,10 +2081,14 @@ public enum Op
             OpImageBoxFilterQCOM = 4481,
             OpImageBlockMatchSSDQCOM = 4482,
             OpImageBlockMatchSADQCOM = 4483,
+            OpBitCastArrayQCOM = 4497,
             OpImageBlockMatchWindowSSDQCOM = 4500,
             OpImageBlockMatchWindowSADQCOM = 4501,
             OpImageBlockMatchGatherSSDQCOM = 4502,
             OpImageBlockMatchGatherSADQCOM = 4503,
+            OpCompositeConstructCoopMatQCOM = 4540,
+            OpCompositeExtractCoopMatQCOM = 4541,
+            OpExtractSubArrayQCOM = 4542,
             OpGroupIAddNonUniformAMD = 5000,
             OpGroupFAddNonUniformAMD = 5001,
             OpGroupFMinNonUniformAMD = 5002,
diff --git a/include/spirv/unified1/spirv.h b/include/spirv/unified1/spirv.h
index 84972dac3..2bd9daff8 100644
--- a/include/spirv/unified1/spirv.h
+++ b/include/spirv/unified1/spirv.h
@@ -1108,6 +1108,7 @@ typedef enum SpvCapability_ {
     SpvCapabilityTextureBoxFilterQCOM = 4485,
     SpvCapabilityTextureBlockMatchQCOM = 4486,
     SpvCapabilityTileShadingQCOM = 4495,
+    SpvCapabilityCooperativeMatrixConversionQCOM = 4496,
     SpvCapabilityTextureBlockMatch2QCOM = 4498,
     SpvCapabilityFloat16ImageAMD = 5008,
     SpvCapabilityImageGatherBiasLodAMD = 5009,
@@ -2015,10 +2016,14 @@ typedef enum SpvOp_ {
     SpvOpImageBoxFilterQCOM = 4481,
     SpvOpImageBlockMatchSSDQCOM = 4482,
     SpvOpImageBlockMatchSADQCOM = 4483,
+    SpvOpBitCastArrayQCOM = 4497,
     SpvOpImageBlockMatchWindowSSDQCOM = 4500,
     SpvOpImageBlockMatchWindowSADQCOM = 4501,
     SpvOpImageBlockMatchGatherSSDQCOM = 4502,
     SpvOpImageBlockMatchGatherSADQCOM = 4503,
+    SpvOpCompositeConstructCoopMatQCOM = 4540,
+    SpvOpCompositeExtractCoopMatQCOM = 4541,
+    SpvOpExtractSubArrayQCOM = 4542,
     SpvOpGroupIAddNonUniformAMD = 5000,
     SpvOpGroupFAddNonUniformAMD = 5001,
     SpvOpGroupFMinNonUniformAMD = 5002,
@@ -2846,10 +2851,14 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
     case SpvOpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitCastArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeConstructCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeExtractCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpExtractSubArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case SpvOpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
@@ -4073,6 +4082,7 @@ inline const char* SpvCapabilityToString(SpvCapability value) {
     case SpvCapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
     case SpvCapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
     case SpvCapabilityTileShadingQCOM: return "TileShadingQCOM";
+    case SpvCapabilityCooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM";
     case SpvCapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
     case SpvCapabilityFloat16ImageAMD: return "Float16ImageAMD";
     case SpvCapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
@@ -4829,10 +4839,14 @@ inline const char* SpvOpToString(SpvOp value) {
     case SpvOpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
     case SpvOpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
     case SpvOpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case SpvOpBitCastArrayQCOM: return "OpBitCastArrayQCOM";
     case SpvOpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
     case SpvOpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
     case SpvOpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
     case SpvOpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case SpvOpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM";
+    case SpvOpCompositeExtractCoopMatQCOM: return "OpCompositeExtractCoopMatQCOM";
+    case SpvOpExtractSubArrayQCOM: return "OpExtractSubArrayQCOM";
     case SpvOpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
     case SpvOpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
     case SpvOpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
diff --git a/include/spirv/unified1/spirv.hpp b/include/spirv/unified1/spirv.hpp
index a3d760a54..33ff9253d 100644
--- a/include/spirv/unified1/spirv.hpp
+++ b/include/spirv/unified1/spirv.hpp
@@ -1104,6 +1104,7 @@ enum Capability {
     CapabilityTextureBoxFilterQCOM = 4485,
     CapabilityTextureBlockMatchQCOM = 4486,
     CapabilityTileShadingQCOM = 4495,
+    CapabilityCooperativeMatrixConversionQCOM = 4496,
     CapabilityTextureBlockMatch2QCOM = 4498,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
@@ -2011,10 +2012,14 @@ enum Op {
     OpImageBoxFilterQCOM = 4481,
     OpImageBlockMatchSSDQCOM = 4482,
     OpImageBlockMatchSADQCOM = 4483,
+    OpBitCastArrayQCOM = 4497,
     OpImageBlockMatchWindowSSDQCOM = 4500,
     OpImageBlockMatchWindowSADQCOM = 4501,
     OpImageBlockMatchGatherSSDQCOM = 4502,
     OpImageBlockMatchGatherSADQCOM = 4503,
+    OpCompositeConstructCoopMatQCOM = 4540,
+    OpCompositeExtractCoopMatQCOM = 4541,
+    OpExtractSubArrayQCOM = 4542,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
@@ -2842,10 +2847,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpBitCastArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeConstructCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeExtractCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpExtractSubArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
@@ -4069,6 +4078,7 @@ inline const char* CapabilityToString(Capability value) {
     case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
     case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
     case CapabilityTileShadingQCOM: return "TileShadingQCOM";
+    case CapabilityCooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM";
     case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
     case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
     case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
@@ -4825,10 +4835,14 @@ inline const char* OpToString(Op value) {
     case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
     case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
     case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case OpBitCastArrayQCOM: return "OpBitCastArrayQCOM";
     case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
     case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
     case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
     case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case OpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM";
+    case OpCompositeExtractCoopMatQCOM: return "OpCompositeExtractCoopMatQCOM";
+    case OpExtractSubArrayQCOM: return "OpExtractSubArrayQCOM";
     case OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
     case OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
     case OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
diff --git a/include/spirv/unified1/spirv.hpp11 b/include/spirv/unified1/spirv.hpp11
index e8479cb83..e806cf66b 100644
--- a/include/spirv/unified1/spirv.hpp11
+++ b/include/spirv/unified1/spirv.hpp11
@@ -1104,6 +1104,7 @@ enum class Capability : unsigned {
     TextureBoxFilterQCOM = 4485,
     TextureBlockMatchQCOM = 4486,
     TileShadingQCOM = 4495,
+    CooperativeMatrixConversionQCOM = 4496,
     TextureBlockMatch2QCOM = 4498,
     Float16ImageAMD = 5008,
     ImageGatherBiasLodAMD = 5009,
@@ -2011,10 +2012,14 @@ enum class Op : unsigned {
     OpImageBoxFilterQCOM = 4481,
     OpImageBlockMatchSSDQCOM = 4482,
     OpImageBlockMatchSADQCOM = 4483,
+    OpBitCastArrayQCOM = 4497,
     OpImageBlockMatchWindowSSDQCOM = 4500,
     OpImageBlockMatchWindowSADQCOM = 4501,
     OpImageBlockMatchGatherSSDQCOM = 4502,
     OpImageBlockMatchGatherSADQCOM = 4503,
+    OpCompositeConstructCoopMatQCOM = 4540,
+    OpCompositeExtractCoopMatQCOM = 4541,
+    OpExtractSubArrayQCOM = 4542,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
@@ -2842,10 +2847,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case Op::OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case Op::OpBitCastArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case Op::OpCompositeConstructCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case Op::OpCompositeExtractCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case Op::OpExtractSubArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case Op::OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case Op::OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case Op::OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
@@ -4069,6 +4078,7 @@ inline const char* CapabilityToString(Capability value) {
     case Capability::TextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
     case Capability::TextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
     case Capability::TileShadingQCOM: return "TileShadingQCOM";
+    case Capability::CooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM";
     case Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
     case Capability::Float16ImageAMD: return "Float16ImageAMD";
     case Capability::ImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
@@ -4825,10 +4835,14 @@ inline const char* OpToString(Op value) {
     case Op::OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
     case Op::OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
     case Op::OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case Op::OpBitCastArrayQCOM: return "OpBitCastArrayQCOM";
     case Op::OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
     case Op::OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
     case Op::OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
     case Op::OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case Op::OpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM";
+    case Op::OpCompositeExtractCoopMatQCOM: return "OpCompositeExtractCoopMatQCOM";
+    case Op::OpExtractSubArrayQCOM: return "OpExtractSubArrayQCOM";
     case Op::OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
     case Op::OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
     case Op::OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
diff --git a/include/spirv/unified1/spirv.json b/include/spirv/unified1/spirv.json
index e0c0230bb..776bbd78d 100644
--- a/include/spirv/unified1/spirv.json
+++ b/include/spirv/unified1/spirv.json
@@ -1080,6 +1080,7 @@
                     "TextureBoxFilterQCOM": 4485,
                     "TextureBlockMatchQCOM": 4486,
                     "TileShadingQCOM": 4495,
+                    "CooperativeMatrixConversionQCOM": 4496,
                     "TextureBlockMatch2QCOM": 4498,
                     "Float16ImageAMD": 5008,
                     "ImageGatherBiasLodAMD": 5009,
@@ -1992,10 +1993,14 @@
                     "OpImageBoxFilterQCOM": 4481,
                     "OpImageBlockMatchSSDQCOM": 4482,
                     "OpImageBlockMatchSADQCOM": 4483,
+                    "OpBitCastArrayQCOM": 4497,
                     "OpImageBlockMatchWindowSSDQCOM": 4500,
                     "OpImageBlockMatchWindowSADQCOM": 4501,
                     "OpImageBlockMatchGatherSSDQCOM": 4502,
                     "OpImageBlockMatchGatherSADQCOM": 4503,
+                    "OpCompositeConstructCoopMatQCOM": 4540,
+                    "OpCompositeExtractCoopMatQCOM": 4541,
+                    "OpExtractSubArrayQCOM": 4542,
                     "OpGroupIAddNonUniformAMD": 5000,
                     "OpGroupFAddNonUniformAMD": 5001,
                     "OpGroupFMinNonUniformAMD": 5002,
diff --git a/include/spirv/unified1/spirv.lua b/include/spirv/unified1/spirv.lua
index 410060b69..180cfac85 100644
--- a/include/spirv/unified1/spirv.lua
+++ b/include/spirv/unified1/spirv.lua
@@ -1095,6 +1095,7 @@ spv = {
         TextureBoxFilterQCOM = 4485,
         TextureBlockMatchQCOM = 4486,
         TileShadingQCOM = 4495,
+        CooperativeMatrixConversionQCOM = 4496,
         TextureBlockMatch2QCOM = 4498,
         Float16ImageAMD = 5008,
         ImageGatherBiasLodAMD = 5009,
@@ -2002,10 +2003,14 @@ spv = {
         OpImageBoxFilterQCOM = 4481,
         OpImageBlockMatchSSDQCOM = 4482,
         OpImageBlockMatchSADQCOM = 4483,
+        OpBitCastArrayQCOM = 4497,
         OpImageBlockMatchWindowSSDQCOM = 4500,
         OpImageBlockMatchWindowSADQCOM = 4501,
         OpImageBlockMatchGatherSSDQCOM = 4502,
         OpImageBlockMatchGatherSADQCOM = 4503,
+        OpCompositeConstructCoopMatQCOM = 4540,
+        OpCompositeExtractCoopMatQCOM = 4541,
+        OpExtractSubArrayQCOM = 4542,
         OpGroupIAddNonUniformAMD = 5000,
         OpGroupFAddNonUniformAMD = 5001,
         OpGroupFMinNonUniformAMD = 5002,
diff --git a/include/spirv/unified1/spirv.py b/include/spirv/unified1/spirv.py
index 0b77b4f2d..963df996e 100644
--- a/include/spirv/unified1/spirv.py
+++ b/include/spirv/unified1/spirv.py
@@ -1066,6 +1066,7 @@
         'TextureBoxFilterQCOM' : 4485,
         'TextureBlockMatchQCOM' : 4486,
         'TileShadingQCOM' : 4495,
+        'CooperativeMatrixConversionQCOM' : 4496,
         'TextureBlockMatch2QCOM' : 4498,
         'Float16ImageAMD' : 5008,
         'ImageGatherBiasLodAMD' : 5009,
@@ -1945,10 +1946,14 @@
         'OpImageBoxFilterQCOM' : 4481,
         'OpImageBlockMatchSSDQCOM' : 4482,
         'OpImageBlockMatchSADQCOM' : 4483,
+        'OpBitCastArrayQCOM' : 4497,
         'OpImageBlockMatchWindowSSDQCOM' : 4500,
         'OpImageBlockMatchWindowSADQCOM' : 4501,
         'OpImageBlockMatchGatherSSDQCOM' : 4502,
         'OpImageBlockMatchGatherSADQCOM' : 4503,
+        'OpCompositeConstructCoopMatQCOM' : 4540,
+        'OpCompositeExtractCoopMatQCOM' : 4541,
+        'OpExtractSubArrayQCOM' : 4542,
         'OpGroupIAddNonUniformAMD' : 5000,
         'OpGroupFAddNonUniformAMD' : 5001,
         'OpGroupFMinNonUniformAMD' : 5002,
diff --git a/include/spirv/unified1/spv.d b/include/spirv/unified1/spv.d
index a5763e6cf..6346bcb0e 100644
--- a/include/spirv/unified1/spv.d
+++ b/include/spirv/unified1/spv.d
@@ -1140,6 +1140,7 @@ enum Capability : uint
     TextureBoxFilterQCOM = 4485,
     TextureBlockMatchQCOM = 4486,
     TileShadingQCOM = 4495,
+    CooperativeMatrixConversionQCOM = 4496,
     TextureBlockMatch2QCOM = 4498,
     Float16ImageAMD = 5008,
     ImageGatherBiasLodAMD = 5009,
@@ -2083,10 +2084,14 @@ enum Op : uint
     OpImageBoxFilterQCOM = 4481,
     OpImageBlockMatchSSDQCOM = 4482,
     OpImageBlockMatchSADQCOM = 4483,
+    OpBitCastArrayQCOM = 4497,
     OpImageBlockMatchWindowSSDQCOM = 4500,
     OpImageBlockMatchWindowSADQCOM = 4501,
     OpImageBlockMatchGatherSSDQCOM = 4502,
     OpImageBlockMatchGatherSADQCOM = 4503,
+    OpCompositeConstructCoopMatQCOM = 4540,
+    OpCompositeExtractCoopMatQCOM = 4541,
+    OpExtractSubArrayQCOM = 4542,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
