diff --git a/.gitmodules b/.gitmodules index 84c0ff13..f14530db 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "crates/grammar/headers"] path = crates/grammar/headers url = https://github.com/KhronosGroup/SPIRV-Headers.git - branch = vulkan-sdk-1.4.357 + branch = vulkan-sdk-1.4.363 diff --git a/Cargo.lock b/Cargo.lock index 49d846bd..797ddefa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,7 +90,7 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "autogen" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anyhow", "rspirv2-grammar", @@ -302,7 +302,7 @@ checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" [[package]] name = "examples" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anyhow", "clap", @@ -639,7 +639,7 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "rspirv2" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "bitflags", "bytemuck", @@ -651,7 +651,7 @@ dependencies = [ [[package]] name = "rspirv2-grammar" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anyhow", "rspirv2-grammar-parser", @@ -659,7 +659,7 @@ dependencies = [ [[package]] name = "rspirv2-grammar-parser" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anyhow", "convert_case", @@ -676,7 +676,7 @@ dependencies = [ [[package]] name = "rspirv2-tools" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anstream", "anyhow", @@ -688,7 +688,7 @@ dependencies = [ [[package]] name = "rspirv2-tools-gen" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anstream", "anyhow", @@ -701,7 +701,7 @@ dependencies = [ [[package]] name = "rspirv2-types" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anstyle", "anyhow", @@ -814,7 +814,7 @@ dependencies = [ [[package]] name = "spv" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anstream", "anyhow", @@ -1145,7 +1145,7 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "xtask" -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index 940c8256..01002ffd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,7 @@ members = [ resolver = "3" [workspace.package] -version = "0.1.0+sdk-1.4.357" +version = "0.1.0+sdk-1.4.363" edition = "2024" license = "MIT OR Apache-2.0" repository = "https://github.com/Rust-GPU/rspirv2/" diff --git a/crates/grammar/headers b/crates/grammar/headers index 29981f65..49654312 160000 --- a/crates/grammar/headers +++ b/crates/grammar/headers @@ -1 +1 @@ -Subproject commit 29981f65241605e08b0ede4cfeb999fe3b723c6a +Subproject commit 496543121ce6419f23d6fa5d7194ba66c36212d2 diff --git a/crates/rspirv2/src/core/extensions.rs b/crates/rspirv2/src/core/extensions.rs index 182132dd..fa62f6e3 100644 --- a/crates/rspirv2/src/core/extensions.rs +++ b/crates/rspirv2/src/core/extensions.rs @@ -58,6 +58,8 @@ pub const EXTENSION_SPV_ARM_GRAPH: Extension = Extension::new("SPV_ARM_graph"); pub const EXTENSION_SPV_ARM_TENSORS: Extension = Extension::new("SPV_ARM_tensors"); pub const EXTENSION_SPV_EXT_ARITHMETIC_FENCE: Extension = Extension::new("SPV_EXT_arithmetic_fence"); +pub const EXTENSION_SPV_EXT_COOPERATIVE_MATRIX_MAINTENANCE_1: Extension = + Extension::new("SPV_EXT_cooperative_matrix_maintenance1"); pub const EXTENSION_SPV_EXT_DEMOTE_TO_HELPER_INVOCATION: Extension = Extension::new("SPV_EXT_demote_to_helper_invocation"); pub const EXTENSION_SPV_EXT_DESCRIPTOR_HEAP: Extension = Extension::new("SPV_EXT_descriptor_heap"); @@ -317,6 +319,8 @@ pub const EXTENSION_SPV_NV_STEREO_VIEW_RENDERING: Extension = pub const EXTENSION_SPV_NV_TENSOR_ADDRESSING: Extension = Extension::new("SPV_NV_tensor_addressing"); pub const EXTENSION_SPV_NV_VIEWPORT_ARRAY_2: Extension = Extension::new("SPV_NV_viewport_array2"); +pub const EXTENSION_SPV_QCOM_BFLOAT_16_MULADD: Extension = + Extension::new("SPV_QCOM_bfloat16_muladd"); pub const EXTENSION_SPV_QCOM_COOPERATIVE_MATRIX_CONVERSION: Extension = Extension::new("SPV_QCOM_cooperative_matrix_conversion"); pub const EXTENSION_SPV_QCOM_IMAGE_PROCESSING: Extension = @@ -327,6 +331,7 @@ pub const EXTENSION_SPV_QCOM_IMAGE_PROCESSING_3: Extension = Extension::new("SPV_QCOM_image_processing3"); pub const EXTENSION_SPV_QCOM_MULTIPLE_WAIT_QUEUES: Extension = Extension::new("SPV_QCOM_multiple_wait_queues"); +pub const EXTENSION_SPV_QCOM_SUBGROUP_SIZE: Extension = Extension::new("SPV_QCOM_subgroup_size"); pub const EXTENSION_SPV_QCOM_TILE_SHADING: Extension = Extension::new("SPV_QCOM_tile_shading"); pub const EXTENSION_SPV_SAMSUNG_INTRINSIC: Extension = Extension::new("SPV_SAMSUNG_intrinsic"); pub const EXTENSION_SPV_VALVE_MIXED_FLOAT_DOT_PRODUCT: Extension = diff --git a/crates/rspirv2/src/core/grammar.rs b/crates/rspirv2/src/core/grammar.rs index d7817966..446a533b 100644 --- a/crates/rspirv2/src/core/grammar.rs +++ b/crates/rspirv2/src/core/grammar.rs @@ -424,6 +424,7 @@ const ALL_INSTS: &[&InstMeta] = &[ &OP_IMAGE_BLOCK_MATCH_WINDOW_SADQCOM, &OP_IMAGE_BLOCK_MATCH_GATHER_SSDQCOM, &OP_IMAGE_BLOCK_MATCH_GATHER_SADQCOM, + &OP_B_FLOAT_16_MUL_ADD_QCOM, &OP_COMPOSITE_CONSTRUCT_COOP_MAT_QCOM, &OP_COMPOSITE_EXTRACT_COOP_MAT_QCOM, &OP_EXTRACT_SUB_ARRAY_QCOM, @@ -498,7 +499,7 @@ const ALL_INSTS: &[&InstMeta] = &[ &OP_COOPERATIVE_VECTOR_OUTER_PRODUCT_ACCUMULATE_NV, &OP_COOPERATIVE_VECTOR_REDUCE_SUM_ACCUMULATE_NV, &OP_COOPERATIVE_VECTOR_MATRIX_MUL_ADD_NV, - &OP_COOPERATIVE_MATRIX_CONVERT_NV, + &OP_COOPERATIVE_MATRIX_CONVERT_USE_EXT, &OP_EMIT_MESH_TASKS_EXT, &OP_SET_MESH_OUTPUTS_EXT, &OP_GROUP_NON_UNIFORM_PARTITION_EXT, @@ -559,12 +560,13 @@ const ALL_INSTS: &[&InstMeta] = &[ &OP_COOPERATIVE_MATRIX_STORE_NV, &OP_COOPERATIVE_MATRIX_MUL_ADD_NV, &OP_COOPERATIVE_MATRIX_LENGTH_NV, + &OP_COOPERATIVE_MATRIX_GET_COORDINATE_EXT, &OP_BEGIN_INVOCATION_INTERLOCK_EXT, &OP_END_INVOCATION_INTERLOCK_EXT, - &OP_COOPERATIVE_MATRIX_REDUCE_NV, + &OP_COOPERATIVE_MATRIX_REDUCE_EXT, &OP_COOPERATIVE_MATRIX_LOAD_TENSOR_NV, &OP_COOPERATIVE_MATRIX_STORE_TENSOR_NV, - &OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_NV, + &OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_EXT, &OP_TYPE_TENSOR_LAYOUT_NV, &OP_TYPE_TENSOR_VIEW_NV, &OP_CREATE_TENSOR_LAYOUT_NV, diff --git a/crates/rspirv2/src/core/inst.rs b/crates/rspirv2/src/core/inst.rs index 7bb1cd86..ca7a6afb 100644 --- a/crates/rspirv2/src/core/inst.rs +++ b/crates/rspirv2/src/core/inst.rs @@ -24499,6 +24499,72 @@ impl InstEncoding for OpImageBlockMatchGatherSADQCOM { } } #[derive(Clone, Debug, Eq, PartialEq, Hash)] +pub struct OpBFloat16MulAddQCOM { + pub id_result_type: IdResultType, + pub id_result: IdResult, + pub operand_1: IdRef, + pub operand_2: IdRef, + pub operand_3: IdRef, +} +impl Inst for OpBFloat16MulAddQCOM { + const META: &InstMeta = &OP_B_FLOAT_16_MUL_ADD_QCOM; +} +impl InstEncoding for OpBFloat16MulAddQCOM { + type IdResult = IdResult; + type IdResultType = IdResult; + fn id_result(&self) -> Self::IdResult { + self.id_result + } + fn id_result_type(&self) -> Self::IdResultType { + self.id_result_type.0 + } + fn encode(&self, writer: &mut impl WordWriter) -> Result<(), EncodeError> { + profiling::function_scope!(); + let len = 1 + + OperandEncoding::word_len(&self.id_result_type) + + OperandEncoding::word_len(&self.id_result) + + OperandEncoding::word_len(&self.operand_1) + + OperandEncoding::word_len(&self.operand_2) + + OperandEncoding::word_len(&self.operand_3); + writer.write_op(Self::META.opcode, len)?; + OperandEncoding::encode(&self.id_result_type, &mut *writer)?; + OperandEncoding::encode(&self.id_result, &mut *writer)?; + OperandEncoding::encode(&self.operand_1, &mut *writer)?; + OperandEncoding::encode(&self.operand_2, &mut *writer)?; + OperandEncoding::encode(&self.operand_3, &mut *writer)?; + Ok(()) + } + fn decode(reader: InstReader<'_>) -> Result { + profiling::function_scope!(); + let mut op_reader = reader.check_opcode(Self::META)?; + Ok(Self { + id_result_type: OperandEncoding::decode(&mut op_reader)?, + id_result: OperandEncoding::decode(&mut op_reader)?, + operand_1: OperandEncoding::decode(&mut op_reader)?, + operand_2: OperandEncoding::decode(&mut op_reader)?, + operand_3: OperandEncoding::decode_last(&mut op_reader)?, + }) + } + fn dis_fmt(&self, f: &mut Formatter<'_>, ctx: &DisContext) -> std::fmt::Result { + profiling::function_scope!(); + let ctx = &OperandDisContext { + id_result: Some(self.id_result), + id_result_type: Some(self.id_result_type), + ctx, + }; + let rspirv_space = ctx.rspirv_space(); + write!( + f, + "{}OpBFloat16MulAddQCOM{rspirv_space}{}{rspirv_space}{}{}{}", + ctx.id_result_writer(), + self.id_result_type.dis(ctx), + self.operand_1.dis(ctx), + self.operand_2.dis(ctx), + self.operand_3.dis(ctx) + ) + } +} +#[derive(Clone, Debug, Eq, PartialEq, Hash)] pub struct OpCompositeConstructCoopMatQCOM { pub id_result_type: IdResultType, pub id_result: IdResult, @@ -29105,15 +29171,16 @@ impl InstEncoding for OpCooperativeVectorMatrixMulAddNV { } } #[derive(Clone, Debug, Eq, PartialEq, Hash)] -pub struct OpCooperativeMatrixConvertNV { +pub struct OpCooperativeMatrixConvertUseEXT { pub id_result_type: IdResultType, pub id_result: IdResult, pub matrix: IdRef, } -impl Inst for OpCooperativeMatrixConvertNV { - const META: &InstMeta = &OP_COOPERATIVE_MATRIX_CONVERT_NV; +pub type OpCooperativeMatrixConvertNV = OpCooperativeMatrixConvertUseEXT; +impl Inst for OpCooperativeMatrixConvertUseEXT { + const META: &InstMeta = &OP_COOPERATIVE_MATRIX_CONVERT_USE_EXT; } -impl InstEncoding for OpCooperativeMatrixConvertNV { +impl InstEncoding for OpCooperativeMatrixConvertUseEXT { type IdResult = IdResult; type IdResultType = IdResult; fn id_result(&self) -> Self::IdResult { @@ -29153,7 +29220,7 @@ impl InstEncoding for OpCooperativeMatrixConvertNV { let rspirv_space = ctx.rspirv_space(); write!( f, - "{}OpCooperativeMatrixConvertNV{rspirv_space}{}{rspirv_space}{}", + "{}OpCooperativeMatrixConvertUseEXT{rspirv_space}{}{rspirv_space}{}", ctx.id_result_writer(), self.id_result_type.dis(ctx), self.matrix.dis(ctx) @@ -32820,6 +32887,67 @@ impl InstEncoding for OpCooperativeMatrixLengthNV { } } #[derive(Clone, Debug, Eq, PartialEq, Hash)] +pub struct OpCooperativeMatrixGetCoordinateEXT { + pub id_result_type: IdResultType, + pub id_result: IdResult, + pub matrix: IdRef, + pub index: IdRef, +} +impl Inst for OpCooperativeMatrixGetCoordinateEXT { + const META: &InstMeta = &OP_COOPERATIVE_MATRIX_GET_COORDINATE_EXT; +} +impl InstEncoding for OpCooperativeMatrixGetCoordinateEXT { + type IdResult = IdResult; + type IdResultType = IdResult; + fn id_result(&self) -> Self::IdResult { + self.id_result + } + fn id_result_type(&self) -> Self::IdResultType { + self.id_result_type.0 + } + fn encode(&self, writer: &mut impl WordWriter) -> Result<(), EncodeError> { + profiling::function_scope!(); + let len = 1 + + OperandEncoding::word_len(&self.id_result_type) + + OperandEncoding::word_len(&self.id_result) + + OperandEncoding::word_len(&self.matrix) + + OperandEncoding::word_len(&self.index); + writer.write_op(Self::META.opcode, len)?; + OperandEncoding::encode(&self.id_result_type, &mut *writer)?; + OperandEncoding::encode(&self.id_result, &mut *writer)?; + OperandEncoding::encode(&self.matrix, &mut *writer)?; + OperandEncoding::encode(&self.index, &mut *writer)?; + Ok(()) + } + fn decode(reader: InstReader<'_>) -> Result { + profiling::function_scope!(); + let mut op_reader = reader.check_opcode(Self::META)?; + Ok(Self { + id_result_type: OperandEncoding::decode(&mut op_reader)?, + id_result: OperandEncoding::decode(&mut op_reader)?, + matrix: OperandEncoding::decode(&mut op_reader)?, + index: OperandEncoding::decode_last(&mut op_reader)?, + }) + } + fn dis_fmt(&self, f: &mut Formatter<'_>, ctx: &DisContext) -> std::fmt::Result { + profiling::function_scope!(); + let ctx = &OperandDisContext { + id_result: Some(self.id_result), + id_result_type: Some(self.id_result_type), + ctx, + }; + let rspirv_space = ctx.rspirv_space(); + write!( + f, + "{}OpCooperativeMatrixGetCoordinateEXT{rspirv_space}{}{rspirv_space}{}{}", + ctx.id_result_writer(), + self.id_result_type.dis(ctx), + self.matrix.dis(ctx), + self.index.dis(ctx) + ) + } +} +#[derive(Clone, Debug, Eq, PartialEq, Hash)] pub struct OpBeginInvocationInterlockEXT {} impl Inst for OpBeginInvocationInterlockEXT { const META: &InstMeta = &OP_BEGIN_INVOCATION_INTERLOCK_EXT; @@ -32882,17 +33010,18 @@ impl InstEncoding for OpEndInvocationInterlockEXT { } } #[derive(Clone, Debug, Eq, PartialEq, Hash)] -pub struct OpCooperativeMatrixReduceNV { +pub struct OpCooperativeMatrixReduceEXT { pub id_result_type: IdResultType, pub id_result: IdResult, pub matrix: IdRef, pub reduce: CooperativeMatrixReduce, pub combine_func: IdRef, } -impl Inst for OpCooperativeMatrixReduceNV { - const META: &InstMeta = &OP_COOPERATIVE_MATRIX_REDUCE_NV; +pub type OpCooperativeMatrixReduceNV = OpCooperativeMatrixReduceEXT; +impl Inst for OpCooperativeMatrixReduceEXT { + const META: &InstMeta = &OP_COOPERATIVE_MATRIX_REDUCE_EXT; } -impl InstEncoding for OpCooperativeMatrixReduceNV { +impl InstEncoding for OpCooperativeMatrixReduceEXT { type IdResult = IdResult; type IdResultType = IdResult; fn id_result(&self) -> Self::IdResult { @@ -32938,7 +33067,7 @@ impl InstEncoding for OpCooperativeMatrixReduceNV { let rspirv_space = ctx.rspirv_space(); write!( f, - "{}OpCooperativeMatrixReduceNV{rspirv_space}{}{rspirv_space}{}{}{}", + "{}OpCooperativeMatrixReduceEXT{rspirv_space}{}{rspirv_space}{}{}{}", ctx.id_result_writer(), self.id_result_type.dis(ctx), self.matrix.dis(ctx), @@ -33086,17 +33215,18 @@ impl InstEncoding for OpCooperativeMatrixStoreTensorNV { } } #[derive(Clone, Debug, Eq, PartialEq, Hash)] -pub struct OpCooperativeMatrixPerElementOpNV { +pub struct OpCooperativeMatrixPerElementOpEXT { pub id_result_type: IdResultType, pub id_result: IdResult, pub matrix: IdRef, pub func: IdRef, pub operands: ZeroOrMore, } -impl Inst for OpCooperativeMatrixPerElementOpNV { - const META: &InstMeta = &OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_NV; +pub type OpCooperativeMatrixPerElementOpNV = OpCooperativeMatrixPerElementOpEXT; +impl Inst for OpCooperativeMatrixPerElementOpEXT { + const META: &InstMeta = &OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_EXT; } -impl InstEncoding for OpCooperativeMatrixPerElementOpNV { +impl InstEncoding for OpCooperativeMatrixPerElementOpEXT { type IdResult = IdResult; type IdResultType = IdResult; fn id_result(&self) -> Self::IdResult { @@ -33142,7 +33272,7 @@ impl InstEncoding for OpCooperativeMatrixPerElementOpNV { let rspirv_space = ctx.rspirv_space(); write!( f, - "{}OpCooperativeMatrixPerElementOpNV{rspirv_space}{}{rspirv_space}{}{}{}", + "{}OpCooperativeMatrixPerElementOpEXT{rspirv_space}{}{rspirv_space}{}{}{}", ctx.id_result_writer(), self.id_result_type.dis(ctx), self.matrix.dis(ctx), diff --git a/crates/rspirv2/src/core/inst_meta.rs b/crates/rspirv2/src/core/inst_meta.rs index 227b4797..dccf191e 100644 --- a/crates/rspirv2/src/core/inst_meta.rs +++ b/crates/rspirv2/src/core/inst_meta.rs @@ -13523,6 +13523,44 @@ pub const OP_IMAGE_BLOCK_MATCH_GATHER_SADQCOM: InstMeta = InstMeta { aliases: &[], provisional: false, }; +pub const OP_B_FLOAT_16_MUL_ADD_QCOM: InstMeta = InstMeta { + opname: "OpBFloat16MulAddQCOM", + class: Some(&PRINTING_CLASS_ARITHMETIC), + opcode: 4505u16, + operands: &[ + OperandSpecMeta { + kind: &OPERAND_KIND_ID_RESULT_TYPE, + name: None, + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_RESULT, + name: None, + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_REF, + name: Some("Operand 1"), + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_REF, + name: Some("Operand 2"), + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_REF, + name: Some("Operand 3"), + quantifier: Quantifier::One, + }, + ], + capabilities: &[&Capability::BFloat16MulAddQCOM], + extensions: &[], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, +}; pub const OP_COMPOSITE_CONSTRUCT_COOP_MAT_QCOM: InstMeta = InstMeta { opname: "OpCompositeConstructCoopMatQCOM", class: Some(&PRINTING_CLASS_COMPOSITE), @@ -16164,8 +16202,8 @@ pub const OP_COOPERATIVE_VECTOR_MATRIX_MUL_ADD_NV: InstMeta = InstMeta { aliases: &[], provisional: false, }; -pub const OP_COOPERATIVE_MATRIX_CONVERT_NV: InstMeta = InstMeta { - opname: "OpCooperativeMatrixConvertNV", +pub const OP_COOPERATIVE_MATRIX_CONVERT_USE_EXT: InstMeta = InstMeta { + opname: "OpCooperativeMatrixConvertUseEXT", class: Some(&PRINTING_CLASS_CONVERSION), opcode: 5293u16, operands: &[ @@ -16185,11 +16223,14 @@ pub const OP_COOPERATIVE_MATRIX_CONVERT_NV: InstMeta = InstMeta { quantifier: Quantifier::One, }, ], - capabilities: &[&Capability::CooperativeMatrixConversionsNV], + capabilities: &[ + &Capability::CooperativeMatrixConversionsEXT, + &Capability::CooperativeMatrixConversionsNV, + ], extensions: &[], version: Some("None"), last_version: None, - aliases: &[], + aliases: &["OpCooperativeMatrixConvertNV"], provisional: false, }; pub const OP_EMIT_MESH_TASKS_EXT: InstMeta = InstMeta { @@ -18311,6 +18352,39 @@ pub const OP_COOPERATIVE_MATRIX_LENGTH_NV: InstMeta = InstMeta { aliases: &[], provisional: false, }; +pub const OP_COOPERATIVE_MATRIX_GET_COORDINATE_EXT: InstMeta = InstMeta { + opname: "OpCooperativeMatrixGetCoordinateEXT", + class: Some(&PRINTING_CLASS_MISCELLANEOUS), + opcode: 5363u16, + operands: &[ + OperandSpecMeta { + kind: &OPERAND_KIND_ID_RESULT_TYPE, + name: None, + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_RESULT, + name: None, + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_REF, + name: Some("Matrix"), + quantifier: Quantifier::One, + }, + OperandSpecMeta { + kind: &OPERAND_KIND_ID_REF, + name: Some("Index"), + quantifier: Quantifier::One, + }, + ], + capabilities: &[&Capability::CooperativeMatrixGetCoordinateEXT], + extensions: &[], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, +}; pub const OP_BEGIN_INVOCATION_INTERLOCK_EXT: InstMeta = InstMeta { opname: "OpBeginInvocationInterlockEXT", class: Some(&PRINTING_CLASS_RESERVED), @@ -18343,9 +18417,9 @@ pub const OP_END_INVOCATION_INTERLOCK_EXT: InstMeta = InstMeta { aliases: &[], provisional: false, }; -pub const OP_COOPERATIVE_MATRIX_REDUCE_NV: InstMeta = InstMeta { - opname: "OpCooperativeMatrixReduceNV", - class: Some(&PRINTING_CLASS_ARITHMETIC), +pub const OP_COOPERATIVE_MATRIX_REDUCE_EXT: InstMeta = InstMeta { + opname: "OpCooperativeMatrixReduceEXT", + class: Some(&PRINTING_CLASS_FUNCTION), opcode: 5366u16, operands: &[ OperandSpecMeta { @@ -18374,11 +18448,11 @@ pub const OP_COOPERATIVE_MATRIX_REDUCE_NV: InstMeta = InstMeta { quantifier: Quantifier::One, }, ], - capabilities: &[&Capability::CooperativeMatrixReductionsNV], + capabilities: &[&Capability::CooperativeMatrixReductionsEXT], extensions: &[], version: Some("None"), last_version: None, - aliases: &[], + aliases: &["OpCooperativeMatrixReduceNV"], provisional: false, }; pub const OP_COOPERATIVE_MATRIX_LOAD_TENSOR_NV: InstMeta = InstMeta { @@ -18467,8 +18541,8 @@ pub const OP_COOPERATIVE_MATRIX_STORE_TENSOR_NV: InstMeta = InstMeta { aliases: &[], provisional: false, }; -pub const OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_NV: InstMeta = InstMeta { - opname: "OpCooperativeMatrixPerElementOpNV", +pub const OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_EXT: InstMeta = InstMeta { + opname: "OpCooperativeMatrixPerElementOpEXT", class: Some(&PRINTING_CLASS_FUNCTION), opcode: 5369u16, operands: &[ @@ -18498,11 +18572,11 @@ pub const OP_COOPERATIVE_MATRIX_PER_ELEMENT_OP_NV: InstMeta = InstMeta { quantifier: Quantifier::ZeroOrMore, }, ], - capabilities: &[&Capability::CooperativeMatrixPerElementOperationsNV], + capabilities: &[&Capability::CooperativeMatrixPerElementOperationsEXT], extensions: &[], version: Some("None"), last_version: None, - aliases: &[], + aliases: &["OpCooperativeMatrixPerElementOpNV"], provisional: false, }; pub const OP_TYPE_TENSOR_LAYOUT_NV: InstMeta = InstMeta { diff --git a/crates/rspirv2/src/core/inst_set.rs b/crates/rspirv2/src/core/inst_set.rs index d52127dd..d3f755ff 100644 --- a/crates/rspirv2/src/core/inst_set.rs +++ b/crates/rspirv2/src/core/inst_set.rs @@ -414,6 +414,7 @@ pub enum CoreInstSet { ImageBlockMatchWindowSADQCOM(OpImageBlockMatchWindowSADQCOM), ImageBlockMatchGatherSSDQCOM(OpImageBlockMatchGatherSSDQCOM), ImageBlockMatchGatherSADQCOM(OpImageBlockMatchGatherSADQCOM), + BFloat16MulAddQCOM(OpBFloat16MulAddQCOM), CompositeConstructCoopMatQCOM(OpCompositeConstructCoopMatQCOM), CompositeExtractCoopMatQCOM(OpCompositeExtractCoopMatQCOM), ExtractSubArrayQCOM(OpExtractSubArrayQCOM), @@ -488,7 +489,7 @@ pub enum CoreInstSet { CooperativeVectorOuterProductAccumulateNV(OpCooperativeVectorOuterProductAccumulateNV), CooperativeVectorReduceSumAccumulateNV(OpCooperativeVectorReduceSumAccumulateNV), CooperativeVectorMatrixMulAddNV(OpCooperativeVectorMatrixMulAddNV), - CooperativeMatrixConvertNV(OpCooperativeMatrixConvertNV), + CooperativeMatrixConvertUseEXT(OpCooperativeMatrixConvertUseEXT), EmitMeshTasksEXT(OpEmitMeshTasksEXT), SetMeshOutputsEXT(OpSetMeshOutputsEXT), GroupNonUniformPartitionEXT(OpGroupNonUniformPartitionEXT), @@ -553,12 +554,13 @@ pub enum CoreInstSet { CooperativeMatrixStoreNV(OpCooperativeMatrixStoreNV), CooperativeMatrixMulAddNV(OpCooperativeMatrixMulAddNV), CooperativeMatrixLengthNV(OpCooperativeMatrixLengthNV), + CooperativeMatrixGetCoordinateEXT(OpCooperativeMatrixGetCoordinateEXT), BeginInvocationInterlockEXT(OpBeginInvocationInterlockEXT), EndInvocationInterlockEXT(OpEndInvocationInterlockEXT), - CooperativeMatrixReduceNV(OpCooperativeMatrixReduceNV), + CooperativeMatrixReduceEXT(OpCooperativeMatrixReduceEXT), CooperativeMatrixLoadTensorNV(OpCooperativeMatrixLoadTensorNV), CooperativeMatrixStoreTensorNV(OpCooperativeMatrixStoreTensorNV), - CooperativeMatrixPerElementOpNV(OpCooperativeMatrixPerElementOpNV), + CooperativeMatrixPerElementOpEXT(OpCooperativeMatrixPerElementOpEXT), TypeTensorLayoutNV(OpTypeTensorLayoutNV), TypeTensorViewNV(OpTypeTensorViewNV), CreateTensorLayoutNV(OpCreateTensorLayoutNV), @@ -1444,6 +1446,7 @@ impl InstEncoding for CoreInstSet { Self::ImageBlockMatchWindowSADQCOM(inst) => InstEncoding::id_result(inst).to_optional(), Self::ImageBlockMatchGatherSSDQCOM(inst) => InstEncoding::id_result(inst).to_optional(), Self::ImageBlockMatchGatherSADQCOM(inst) => InstEncoding::id_result(inst).to_optional(), + Self::BFloat16MulAddQCOM(inst) => InstEncoding::id_result(inst).to_optional(), Self::CompositeConstructCoopMatQCOM(inst) => { InstEncoding::id_result(inst).to_optional() } @@ -1542,7 +1545,9 @@ impl InstEncoding for CoreInstSet { Self::CooperativeVectorMatrixMulAddNV(inst) => { InstEncoding::id_result(inst).to_optional() } - Self::CooperativeMatrixConvertNV(inst) => InstEncoding::id_result(inst).to_optional(), + Self::CooperativeMatrixConvertUseEXT(inst) => { + InstEncoding::id_result(inst).to_optional() + } Self::EmitMeshTasksEXT(inst) => InstEncoding::id_result(inst).to_optional(), Self::SetMeshOutputsEXT(inst) => InstEncoding::id_result(inst).to_optional(), Self::GroupNonUniformPartitionEXT(inst) => InstEncoding::id_result(inst).to_optional(), @@ -1641,16 +1646,19 @@ impl InstEncoding for CoreInstSet { Self::CooperativeMatrixStoreNV(inst) => InstEncoding::id_result(inst).to_optional(), Self::CooperativeMatrixMulAddNV(inst) => InstEncoding::id_result(inst).to_optional(), Self::CooperativeMatrixLengthNV(inst) => InstEncoding::id_result(inst).to_optional(), + Self::CooperativeMatrixGetCoordinateEXT(inst) => { + InstEncoding::id_result(inst).to_optional() + } Self::BeginInvocationInterlockEXT(inst) => InstEncoding::id_result(inst).to_optional(), Self::EndInvocationInterlockEXT(inst) => InstEncoding::id_result(inst).to_optional(), - Self::CooperativeMatrixReduceNV(inst) => InstEncoding::id_result(inst).to_optional(), + Self::CooperativeMatrixReduceEXT(inst) => InstEncoding::id_result(inst).to_optional(), Self::CooperativeMatrixLoadTensorNV(inst) => { InstEncoding::id_result(inst).to_optional() } Self::CooperativeMatrixStoreTensorNV(inst) => { InstEncoding::id_result(inst).to_optional() } - Self::CooperativeMatrixPerElementOpNV(inst) => { + Self::CooperativeMatrixPerElementOpEXT(inst) => { InstEncoding::id_result(inst).to_optional() } Self::TypeTensorLayoutNV(inst) => InstEncoding::id_result(inst).to_optional(), @@ -2812,6 +2820,7 @@ impl InstEncoding for CoreInstSet { Self::ImageBlockMatchGatherSADQCOM(inst) => { InstEncoding::id_result_type(inst).to_optional() } + Self::BFloat16MulAddQCOM(inst) => InstEncoding::id_result_type(inst).to_optional(), Self::CompositeConstructCoopMatQCOM(inst) => { InstEncoding::id_result_type(inst).to_optional() } @@ -2954,7 +2963,7 @@ impl InstEncoding for CoreInstSet { Self::CooperativeVectorMatrixMulAddNV(inst) => { InstEncoding::id_result_type(inst).to_optional() } - Self::CooperativeMatrixConvertNV(inst) => { + Self::CooperativeMatrixConvertUseEXT(inst) => { InstEncoding::id_result_type(inst).to_optional() } Self::EmitMeshTasksEXT(inst) => InstEncoding::id_result_type(inst).to_optional(), @@ -3089,13 +3098,16 @@ impl InstEncoding for CoreInstSet { Self::CooperativeMatrixLengthNV(inst) => { InstEncoding::id_result_type(inst).to_optional() } + Self::CooperativeMatrixGetCoordinateEXT(inst) => { + InstEncoding::id_result_type(inst).to_optional() + } Self::BeginInvocationInterlockEXT(inst) => { InstEncoding::id_result_type(inst).to_optional() } Self::EndInvocationInterlockEXT(inst) => { InstEncoding::id_result_type(inst).to_optional() } - Self::CooperativeMatrixReduceNV(inst) => { + Self::CooperativeMatrixReduceEXT(inst) => { InstEncoding::id_result_type(inst).to_optional() } Self::CooperativeMatrixLoadTensorNV(inst) => { @@ -3104,7 +3116,7 @@ impl InstEncoding for CoreInstSet { Self::CooperativeMatrixStoreTensorNV(inst) => { InstEncoding::id_result_type(inst).to_optional() } - Self::CooperativeMatrixPerElementOpNV(inst) => { + Self::CooperativeMatrixPerElementOpEXT(inst) => { InstEncoding::id_result_type(inst).to_optional() } Self::TypeTensorLayoutNV(inst) => InstEncoding::id_result_type(inst).to_optional(), @@ -4239,6 +4251,7 @@ impl InstEncoding for CoreInstSet { Self::ImageBlockMatchWindowSADQCOM(inst) => InstEncoding::encode(inst, writer), Self::ImageBlockMatchGatherSSDQCOM(inst) => InstEncoding::encode(inst, writer), Self::ImageBlockMatchGatherSADQCOM(inst) => InstEncoding::encode(inst, writer), + Self::BFloat16MulAddQCOM(inst) => InstEncoding::encode(inst, writer), Self::CompositeConstructCoopMatQCOM(inst) => InstEncoding::encode(inst, writer), Self::CompositeExtractCoopMatQCOM(inst) => InstEncoding::encode(inst, writer), Self::ExtractSubArrayQCOM(inst) => InstEncoding::encode(inst, writer), @@ -4321,7 +4334,7 @@ impl InstEncoding for CoreInstSet { InstEncoding::encode(inst, writer) } Self::CooperativeVectorMatrixMulAddNV(inst) => InstEncoding::encode(inst, writer), - Self::CooperativeMatrixConvertNV(inst) => InstEncoding::encode(inst, writer), + Self::CooperativeMatrixConvertUseEXT(inst) => InstEncoding::encode(inst, writer), Self::EmitMeshTasksEXT(inst) => InstEncoding::encode(inst, writer), Self::SetMeshOutputsEXT(inst) => InstEncoding::encode(inst, writer), Self::GroupNonUniformPartitionEXT(inst) => InstEncoding::encode(inst, writer), @@ -4392,12 +4405,13 @@ impl InstEncoding for CoreInstSet { Self::CooperativeMatrixStoreNV(inst) => InstEncoding::encode(inst, writer), Self::CooperativeMatrixMulAddNV(inst) => InstEncoding::encode(inst, writer), Self::CooperativeMatrixLengthNV(inst) => InstEncoding::encode(inst, writer), + Self::CooperativeMatrixGetCoordinateEXT(inst) => InstEncoding::encode(inst, writer), Self::BeginInvocationInterlockEXT(inst) => InstEncoding::encode(inst, writer), Self::EndInvocationInterlockEXT(inst) => InstEncoding::encode(inst, writer), - Self::CooperativeMatrixReduceNV(inst) => InstEncoding::encode(inst, writer), + Self::CooperativeMatrixReduceEXT(inst) => InstEncoding::encode(inst, writer), Self::CooperativeMatrixLoadTensorNV(inst) => InstEncoding::encode(inst, writer), Self::CooperativeMatrixStoreTensorNV(inst) => InstEncoding::encode(inst, writer), - Self::CooperativeMatrixPerElementOpNV(inst) => InstEncoding::encode(inst, writer), + Self::CooperativeMatrixPerElementOpEXT(inst) => InstEncoding::encode(inst, writer), Self::TypeTensorLayoutNV(inst) => InstEncoding::encode(inst, writer), Self::TypeTensorViewNV(inst) => InstEncoding::encode(inst, writer), Self::CreateTensorLayoutNV(inst) => InstEncoding::encode(inst, writer), @@ -6463,6 +6477,11 @@ impl InstEncoding for CoreInstSet { ::decode(reader)?, ) } + 4505u16 => { + Self::BFloat16MulAddQCOM( + ::decode(reader)?, + ) + } 4540u16 => { Self::CompositeConstructCoopMatQCOM( ::decode( @@ -6848,8 +6867,10 @@ impl InstEncoding for CoreInstSet { ) } 5293u16 => { - Self::CooperativeMatrixConvertNV( - ::decode(reader)?, + Self::CooperativeMatrixConvertUseEXT( + ::decode( + reader, + )?, ) } 5294u16 => { @@ -7186,6 +7207,13 @@ impl InstEncoding for CoreInstSet { ::decode(reader)?, ) } + 5363u16 => { + Self::CooperativeMatrixGetCoordinateEXT( + ::decode( + reader, + )?, + ) + } 5364u16 => { Self::BeginInvocationInterlockEXT( ::decode(reader)?, @@ -7197,8 +7225,8 @@ impl InstEncoding for CoreInstSet { ) } 5366u16 => { - Self::CooperativeMatrixReduceNV( - ::decode(reader)?, + Self::CooperativeMatrixReduceEXT( + ::decode(reader)?, ) } 5367u16 => { @@ -7216,8 +7244,8 @@ impl InstEncoding for CoreInstSet { ) } 5369u16 => { - Self::CooperativeMatrixPerElementOpNV( - ::decode( + Self::CooperativeMatrixPerElementOpEXT( + ::decode( reader, )?, ) @@ -9516,6 +9544,7 @@ impl InstEncoding for CoreInstSet { Self::ImageBlockMatchWindowSADQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::ImageBlockMatchGatherSSDQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::ImageBlockMatchGatherSADQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), + Self::BFloat16MulAddQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CompositeConstructCoopMatQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CompositeExtractCoopMatQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::ExtractSubArrayQCOM(inst) => InstEncoding::dis_fmt(inst, f, ctx), @@ -9598,7 +9627,7 @@ impl InstEncoding for CoreInstSet { InstEncoding::dis_fmt(inst, f, ctx) } Self::CooperativeVectorMatrixMulAddNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), - Self::CooperativeMatrixConvertNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), + Self::CooperativeMatrixConvertUseEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::EmitMeshTasksEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::SetMeshOutputsEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::GroupNonUniformPartitionEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), @@ -9673,12 +9702,13 @@ impl InstEncoding for CoreInstSet { Self::CooperativeMatrixStoreNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CooperativeMatrixMulAddNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CooperativeMatrixLengthNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), + Self::CooperativeMatrixGetCoordinateEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::BeginInvocationInterlockEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::EndInvocationInterlockEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), - Self::CooperativeMatrixReduceNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), + Self::CooperativeMatrixReduceEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CooperativeMatrixLoadTensorNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CooperativeMatrixStoreTensorNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), - Self::CooperativeMatrixPerElementOpNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), + Self::CooperativeMatrixPerElementOpEXT(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::TypeTensorLayoutNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::TypeTensorViewNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), Self::CreateTensorLayoutNV(inst) => InstEncoding::dis_fmt(inst, f, ctx), @@ -12276,6 +12306,11 @@ impl From for CoreInstSet { Self::ImageBlockMatchGatherSADQCOM(inst) } } +impl From for CoreInstSet { + fn from(inst: OpBFloat16MulAddQCOM) -> Self { + Self::BFloat16MulAddQCOM(inst) + } +} impl From for CoreInstSet { fn from(inst: OpCompositeConstructCoopMatQCOM) -> Self { Self::CompositeConstructCoopMatQCOM(inst) @@ -12646,9 +12681,9 @@ impl From for CoreInstSet { Self::CooperativeVectorMatrixMulAddNV(inst) } } -impl From for CoreInstSet { - fn from(inst: OpCooperativeMatrixConvertNV) -> Self { - Self::CooperativeMatrixConvertNV(inst) +impl From for CoreInstSet { + fn from(inst: OpCooperativeMatrixConvertUseEXT) -> Self { + Self::CooperativeMatrixConvertUseEXT(inst) } } impl From for CoreInstSet { @@ -12951,6 +12986,11 @@ impl From for CoreInstSet { Self::CooperativeMatrixLengthNV(inst) } } +impl From for CoreInstSet { + fn from(inst: OpCooperativeMatrixGetCoordinateEXT) -> Self { + Self::CooperativeMatrixGetCoordinateEXT(inst) + } +} impl From for CoreInstSet { fn from(inst: OpBeginInvocationInterlockEXT) -> Self { Self::BeginInvocationInterlockEXT(inst) @@ -12961,9 +13001,9 @@ impl From for CoreInstSet { Self::EndInvocationInterlockEXT(inst) } } -impl From for CoreInstSet { - fn from(inst: OpCooperativeMatrixReduceNV) -> Self { - Self::CooperativeMatrixReduceNV(inst) +impl From for CoreInstSet { + fn from(inst: OpCooperativeMatrixReduceEXT) -> Self { + Self::CooperativeMatrixReduceEXT(inst) } } impl From for CoreInstSet { @@ -12976,9 +13016,9 @@ impl From for CoreInstSet { Self::CooperativeMatrixStoreTensorNV(inst) } } -impl From for CoreInstSet { - fn from(inst: OpCooperativeMatrixPerElementOpNV) -> Self { - Self::CooperativeMatrixPerElementOpNV(inst) +impl From for CoreInstSet { + fn from(inst: OpCooperativeMatrixPerElementOpEXT) -> Self { + Self::CooperativeMatrixPerElementOpEXT(inst) } } impl From for CoreInstSet { diff --git a/crates/rspirv2/src/core/operand_kinds.rs b/crates/rspirv2/src/core/operand_kinds.rs index 46f1eaba..907092ad 100644 --- a/crates/rspirv2/src/core/operand_kinds.rs +++ b/crates/rspirv2/src/core/operand_kinds.rs @@ -2512,6 +2512,28 @@ pub const OPERAND_KIND_EXECUTION_MODE: OperandKind = OperandKind { aliases: &[], provisional: false, }, + Enumerant { + symbol: "SubgroupSizeHalfQCOM", + value: 4507u32, + parameters: &[], + capabilities: &[&Capability::SubgroupSizeQCOM], + extensions: &[], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, + }, + Enumerant { + symbol: "SubgroupSizeFullQCOM", + value: 4508u32, + parameters: &[], + capabilities: &[&Capability::SubgroupSizeQCOM], + extensions: &[], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, + }, Enumerant { symbol: "EarlyAndLateFragmentTestsAMD", value: 5017u32, @@ -6327,6 +6349,17 @@ pub const OPERAND_KIND_DECORATION: OperandKind = OperandKind { aliases: &[], provisional: false, }, + Enumerant { + symbol: "CooperativeMatrixTransposeEXT", + value: 5440u32, + parameters: &[], + capabilities: &[&Capability::CooperativeMatrixConversionsEXT], + extensions: &[], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, + }, Enumerant { symbol: "SIMTCallINTEL", value: 5599u32, @@ -10379,6 +10412,28 @@ pub const OPERAND_KIND_CAPABILITY: OperandKind = OperandKind { aliases: &[], provisional: false, }, + Enumerant { + symbol: "BFloat16MulAddQCOM", + value: 4504u32, + parameters: &[], + capabilities: &[], + extensions: &[EXTENSION_SPV_QCOM_BFLOAT_16_MULADD], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, + }, + Enumerant { + symbol: "SubgroupSizeQCOM", + value: 4506u32, + parameters: &[], + capabilities: &[], + extensions: &[EXTENSION_SPV_QCOM_SUBGROUP_SIZE], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, + }, Enumerant { symbol: "MultipleWaitQueuesQCOM", value: 4539u32, @@ -11257,16 +11312,30 @@ pub const OPERAND_KIND_CAPABILITY: OperandKind = OperandKind { provisional: false, }, Enumerant { - symbol: "CooperativeMatrixReductionsNV", - value: 5430u32, + symbol: "CooperativeMatrixConversionsEXT", + value: 5429u32, parameters: &[], capabilities: &[], - extensions: &[EXTENSION_SPV_NV_COOPERATIVE_MATRIX_2], + extensions: &[EXTENSION_SPV_EXT_COOPERATIVE_MATRIX_MAINTENANCE_1], version: Some("None"), last_version: None, aliases: &[], provisional: false, }, + Enumerant { + symbol: "CooperativeMatrixReductionsEXT", + value: 5430u32, + parameters: &[], + capabilities: &[], + extensions: &[ + EXTENSION_SPV_EXT_COOPERATIVE_MATRIX_MAINTENANCE_1, + EXTENSION_SPV_NV_COOPERATIVE_MATRIX_2, + ], + version: Some("None"), + last_version: None, + aliases: &["CooperativeMatrixReductionsNV"], + provisional: false, + }, Enumerant { symbol: "CooperativeMatrixConversionsNV", value: 5431u32, @@ -11279,14 +11348,17 @@ pub const OPERAND_KIND_CAPABILITY: OperandKind = OperandKind { provisional: false, }, Enumerant { - symbol: "CooperativeMatrixPerElementOperationsNV", + symbol: "CooperativeMatrixPerElementOperationsEXT", value: 5432u32, parameters: &[], capabilities: &[], - extensions: &[EXTENSION_SPV_NV_COOPERATIVE_MATRIX_2], + extensions: &[ + EXTENSION_SPV_EXT_COOPERATIVE_MATRIX_MAINTENANCE_1, + EXTENSION_SPV_NV_COOPERATIVE_MATRIX_2, + ], version: Some("None"), last_version: None, - aliases: &[], + aliases: &["CooperativeMatrixPerElementOperationsNV"], provisional: false, }, Enumerant { @@ -11333,6 +11405,17 @@ pub const OPERAND_KIND_CAPABILITY: OperandKind = OperandKind { aliases: &[], provisional: false, }, + Enumerant { + symbol: "CooperativeMatrixGetCoordinateEXT", + value: 5438u32, + parameters: &[], + capabilities: &[], + extensions: &[EXTENSION_SPV_EXT_COOPERATIVE_MATRIX_MAINTENANCE_1], + version: Some("None"), + last_version: None, + aliases: &[], + provisional: false, + }, Enumerant { symbol: "TensorAddressingNV", value: 5439u32, diff --git a/crates/rspirv2/src/core/operands.rs b/crates/rspirv2/src/core/operands.rs index 920e5aa8..d949b055 100644 --- a/crates/rspirv2/src/core/operands.rs +++ b/crates/rspirv2/src/core/operands.rs @@ -1894,6 +1894,8 @@ pub enum ExecutionMode { ///z rate LiteralInteger, ), + SubgroupSizeHalfQCOM, + SubgroupSizeFullQCOM, EarlyAndLateFragmentTestsAMD, StencilRefReplacingEXT, CoalescingAMDX, @@ -2148,6 +2150,8 @@ unsafe impl OperandEncoding for ExecutionMode { OperandEncoding::encode(p1, &mut *writer)?; OperandEncoding::encode(p2, &mut *writer)? } + Self::SubgroupSizeHalfQCOM => writer.write(Word(4507u32)), + Self::SubgroupSizeFullQCOM => writer.write(Word(4508u32)), Self::EarlyAndLateFragmentTestsAMD => writer.write(Word(5017u32)), Self::StencilRefReplacingEXT => writer.write(Word(5027u32)), Self::CoalescingAMDX => writer.write(Word(5069u32)), @@ -2354,6 +2358,8 @@ unsafe impl OperandEncoding for ExecutionMode { OperandEncoding::decode(&mut *reader)?, OperandEncoding::decode(&mut *reader)?, ), + 4507u32 => Self::SubgroupSizeHalfQCOM, + 4508u32 => Self::SubgroupSizeFullQCOM, 5017u32 => Self::EarlyAndLateFragmentTestsAMD, 5027u32 => Self::StencilRefReplacingEXT, 5069u32 => Self::CoalescingAMDX, @@ -2542,6 +2548,8 @@ unsafe impl OperandEncoding for ExecutionMode { p2.dis(_ctx) ) } + Self::SubgroupSizeHalfQCOM => write!(f, " SubgroupSizeHalfQCOM"), + Self::SubgroupSizeFullQCOM => write!(f, " SubgroupSizeFullQCOM"), Self::EarlyAndLateFragmentTestsAMD => { write!(f, " EarlyAndLateFragmentTestsAMD") } @@ -4002,6 +4010,7 @@ pub enum Decoration { BindlessImageNV, BoundSamplerNV, BoundImageNV, + CooperativeMatrixTransposeEXT, SIMTCallINTEL( ///N LiteralInteger, @@ -4422,6 +4431,7 @@ unsafe impl OperandEncoding for Decoration { Self::BindlessImageNV => writer.write(Word(5399u32)), Self::BoundSamplerNV => writer.write(Word(5400u32)), Self::BoundImageNV => writer.write(Word(5401u32)), + Self::CooperativeMatrixTransposeEXT => writer.write(Word(5440u32)), Self::SIMTCallINTEL(p0) => { writer.write(Word(5599u32)); OperandEncoding::encode(p0, &mut *writer)? @@ -4733,6 +4743,7 @@ unsafe impl OperandEncoding for Decoration { 5399u32 => Self::BindlessImageNV, 5400u32 => Self::BoundSamplerNV, 5401u32 => Self::BoundImageNV, + 5440u32 => Self::CooperativeMatrixTransposeEXT, 5599u32 => Self::SIMTCallINTEL(OperandEncoding::decode(&mut *reader)?), 5602u32 => Self::ReferencedIndirectlyINTEL, 5607u32 => Self::ClobberINTEL(OperandEncoding::decode(&mut *reader)?), @@ -4955,6 +4966,9 @@ unsafe impl OperandEncoding for Decoration { Self::BindlessImageNV => write!(f, " BindlessImageNV"), Self::BoundSamplerNV => write!(f, " BoundSamplerNV"), Self::BoundImageNV => write!(f, " BoundImageNV"), + Self::CooperativeMatrixTransposeEXT => { + write!(f, " CooperativeMatrixTransposeEXT") + } Self::SIMTCallINTEL(p0) => write!(f, " SIMTCallINTEL{}", p0.dis(_ctx)), Self::ReferencedIndirectlyINTEL => write!(f, " ReferencedIndirectlyINTEL"), Self::ClobberINTEL(p0) => write!(f, " ClobberINTEL{}", p0.dis(_ctx)), @@ -5920,6 +5934,8 @@ pub enum Capability { TileShadingQCOM = 4495u32, CooperativeMatrixConversionQCOM = 4496u32, TextureBlockMatch2QCOM = 4498u32, + BFloat16MulAddQCOM = 4504u32, + SubgroupSizeQCOM = 4506u32, MultipleWaitQueuesQCOM = 4539u32, ImageGatherLinearQCOM = 4543u32, ImageGatherExtendedModesQCOM = 4544u32, @@ -6013,13 +6029,15 @@ pub enum Capability { PushConstantBanksNV = 5423u32, LongVectorEXT = 5425u32, Shader64BitIndexingEXT = 5426u32, - CooperativeMatrixReductionsNV = 5430u32, + CooperativeMatrixConversionsEXT = 5429u32, + CooperativeMatrixReductionsEXT = 5430u32, CooperativeMatrixConversionsNV = 5431u32, - CooperativeMatrixPerElementOperationsNV = 5432u32, + CooperativeMatrixPerElementOperationsEXT = 5432u32, CooperativeMatrixTensorAddressingNV = 5433u32, CooperativeMatrixBlockLoadsNV = 5434u32, CooperativeVectorTrainingNV = 5435u32, RayTracingClusterAccelerationStructureNV = 5437u32, + CooperativeMatrixGetCoordinateEXT = 5438u32, TensorAddressingNV = 5439u32, CooperativeMatrixDecodeVectorNV = 5447u32, SubgroupShuffleINTEL = 5568u32, @@ -6157,6 +6175,9 @@ impl Capability { pub const ComputeDerivativeGroupLinearNV: Self = Self::ComputeDerivativeGroupLinearKHR; pub const DemoteToHelperInvocationEXT: Self = Self::DemoteToHelperInvocation; pub const RayTracingOpacityMicromapEXT: Self = Self::RayTracingOpacityMicromapKHR; + pub const CooperativeMatrixReductionsNV: Self = Self::CooperativeMatrixReductionsEXT; + pub const CooperativeMatrixPerElementOperationsNV: Self = + Self::CooperativeMatrixPerElementOperationsEXT; pub const FPGAMemoryAttributesINTEL: Self = Self::FPGAMemoryAttributesALTERA; pub const ArbitraryPrecisionIntegersINTEL: Self = Self::ArbitraryPrecisionIntegersALTERA; pub const ArbitraryPrecisionFloatingPointINTEL: Self = @@ -6327,6 +6348,8 @@ unsafe impl OperandEncoding for Capability { 4495u32 => Self::TileShadingQCOM, 4496u32 => Self::CooperativeMatrixConversionQCOM, 4498u32 => Self::TextureBlockMatch2QCOM, + 4504u32 => Self::BFloat16MulAddQCOM, + 4506u32 => Self::SubgroupSizeQCOM, 4539u32 => Self::MultipleWaitQueuesQCOM, 4543u32 => Self::ImageGatherLinearQCOM, 4544u32 => Self::ImageGatherExtendedModesQCOM, @@ -6404,13 +6427,15 @@ unsafe impl OperandEncoding for Capability { 5423u32 => Self::PushConstantBanksNV, 5425u32 => Self::LongVectorEXT, 5426u32 => Self::Shader64BitIndexingEXT, - 5430u32 => Self::CooperativeMatrixReductionsNV, + 5429u32 => Self::CooperativeMatrixConversionsEXT, + 5430u32 => Self::CooperativeMatrixReductionsEXT, 5431u32 => Self::CooperativeMatrixConversionsNV, - 5432u32 => Self::CooperativeMatrixPerElementOperationsNV, + 5432u32 => Self::CooperativeMatrixPerElementOperationsEXT, 5433u32 => Self::CooperativeMatrixTensorAddressingNV, 5434u32 => Self::CooperativeMatrixBlockLoadsNV, 5435u32 => Self::CooperativeVectorTrainingNV, 5437u32 => Self::RayTracingClusterAccelerationStructureNV, + 5438u32 => Self::CooperativeMatrixGetCoordinateEXT, 5439u32 => Self::TensorAddressingNV, 5447u32 => Self::CooperativeMatrixDecodeVectorNV, 5568u32 => Self::SubgroupShuffleINTEL, @@ -6687,6 +6712,8 @@ unsafe impl OperandEncoding for Capability { write!(f, " CooperativeMatrixConversionQCOM") } Self::TextureBlockMatch2QCOM => write!(f, " TextureBlockMatch2QCOM"), + Self::BFloat16MulAddQCOM => write!(f, " BFloat16MulAddQCOM"), + Self::SubgroupSizeQCOM => write!(f, " SubgroupSizeQCOM"), Self::MultipleWaitQueuesQCOM => write!(f, " MultipleWaitQueuesQCOM"), Self::ImageGatherLinearQCOM => write!(f, " ImageGatherLinearQCOM"), Self::ImageGatherExtendedModesQCOM => { @@ -6818,14 +6845,17 @@ unsafe impl OperandEncoding for Capability { Self::PushConstantBanksNV => write!(f, " PushConstantBanksNV"), Self::LongVectorEXT => write!(f, " LongVectorEXT"), Self::Shader64BitIndexingEXT => write!(f, " Shader64BitIndexingEXT"), - Self::CooperativeMatrixReductionsNV => { - write!(f, " CooperativeMatrixReductionsNV") + Self::CooperativeMatrixConversionsEXT => { + write!(f, " CooperativeMatrixConversionsEXT") + } + Self::CooperativeMatrixReductionsEXT => { + write!(f, " CooperativeMatrixReductionsEXT") } Self::CooperativeMatrixConversionsNV => { write!(f, " CooperativeMatrixConversionsNV") } - Self::CooperativeMatrixPerElementOperationsNV => { - write!(f, " CooperativeMatrixPerElementOperationsNV") + Self::CooperativeMatrixPerElementOperationsEXT => { + write!(f, " CooperativeMatrixPerElementOperationsEXT") } Self::CooperativeMatrixTensorAddressingNV => { write!(f, " CooperativeMatrixTensorAddressingNV") @@ -6839,6 +6869,9 @@ unsafe impl OperandEncoding for Capability { Self::RayTracingClusterAccelerationStructureNV => { write!(f, " RayTracingClusterAccelerationStructureNV") } + Self::CooperativeMatrixGetCoordinateEXT => { + write!(f, " CooperativeMatrixGetCoordinateEXT") + } Self::TensorAddressingNV => write!(f, " TensorAddressingNV"), Self::CooperativeMatrixDecodeVectorNV => { write!(f, " CooperativeMatrixDecodeVectorNV")