@@ -494,6 +494,12 @@ pub fn instruction_signatures(op: Op) -> Option<&'static [InstSig<'static>]> {
494494 Op :: IAddCarry | Op :: ISubBorrow | Op :: UMulExtended | Op :: SMulExtended => sig ! {
495495 ( T , T ) -> Struct ( [ T , T ] )
496496 } ,
497+ Op :: SDot | Op :: UDot | Op :: SUDot | Op :: SDotAccSat | Op :: UDotAccSat | Op :: SUDotAccSat => {
498+ sig ! {
499+ // FIXME(eddyb) missing equality constraint between two vectors
500+ ( Vector ( T ) , T ) -> Vector ( T )
501+ }
502+ }
497503
498504 // 3.37.14. Bit Instructions
499505 Op :: ShiftRightLogical
@@ -593,6 +599,8 @@ pub fn instruction_signatures(op: Op) -> Option<&'static [InstSig<'static>]> {
593599 } ,
594600 // Capability: Kernel
595601 Op :: AtomicFlagTestAndSet | Op :: AtomicFlagClear => { }
602+ // SPV_EXT_shader_atomic_float_min_max
603+ Op :: AtomicFMinEXT | Op :: AtomicFMaxEXT => sig ! { ( Pointer ( _, T ) , _, _, T ) -> T } ,
596604 // SPV_EXT_shader_atomic_float_add
597605 Op :: AtomicFAddEXT => sig ! { ( Pointer ( _, T ) , _, _, T ) -> T } ,
598606
@@ -945,6 +953,181 @@ pub fn instruction_signatures(op: Op) -> Option<&'static [InstSig<'static>]> {
945953 | Op :: SubgroupAvcSicGetInterRawSadsINTEL => {
946954 reserved ! ( SPV_INTEL_device_side_avc_motion_estimation ) ;
947955 }
956+ // SPV_EXT_mesh_shader
957+ Op :: EmitMeshTasksEXT | Op :: SetMeshOutputsEXT => {
958+ reserved ! ( SPV_EXT_mesh_shader )
959+ }
960+ // SPV_NV_ray_tracing_motion_blur
961+ Op :: TraceMotionNV | Op :: TraceRayMotionNV => reserved ! ( SPV_NV_ray_tracing_motion_blur ) ,
962+ // SPV_NV_bindless_texture
963+ Op :: ConvertUToImageNV
964+ | Op :: ConvertUToSamplerNV
965+ | Op :: ConvertImageToUNV
966+ | Op :: ConvertSamplerToUNV
967+ | Op :: ConvertUToSampledImageNV
968+ | Op :: ConvertSampledImageToUNV
969+ | Op :: SamplerImageAddressingModeNV => reserved ! ( SPV_NV_bindless_texture ) ,
970+ // SPV_INTEL_inline_assembly
971+ Op :: AsmTargetINTEL | Op :: AsmINTEL | Op :: AsmCallINTEL => reserved ! ( SPV_NV_bindless_texture ) ,
972+ // SPV_INTEL_variable_length_array
973+ Op :: VariableLengthArrayINTEL => reserved ! ( SPV_INTEL_variable_length_array ) ,
974+ // SPV_KHR_uniform_group_instructions
975+ Op :: GroupIMulKHR
976+ | Op :: GroupFMulKHR
977+ | Op :: GroupBitwiseAndKHR
978+ | Op :: GroupBitwiseOrKHR
979+ | Op :: GroupBitwiseXorKHR
980+ | Op :: GroupLogicalAndKHR
981+ | Op :: GroupLogicalOrKHR
982+ | Op :: GroupLogicalXorKHR => reserved ! ( SPV_KHR_uniform_group_instructions ) ,
983+ // SPV_KHR_expect_assume
984+ Op :: AssumeTrueKHR | Op :: ExpectKHR => reserved ! ( SPV_KHR_expect_assume ) ,
985+ // SPV_KHR_subgroup_rotate
986+ Op :: GroupNonUniformRotateKHR => reserved ! ( SPV_KHR_subgroup_rotate ) ,
987+ // SPV_NV_shader_invocation_reorder
988+ Op :: HitObjectRecordHitMotionNV
989+ | Op :: HitObjectRecordHitWithIndexMotionNV
990+ | Op :: HitObjectRecordMissMotionNV
991+ | Op :: HitObjectGetWorldToObjectNV
992+ | Op :: HitObjectGetObjectToWorldNV
993+ | Op :: HitObjectGetObjectRayDirectionNV
994+ | Op :: HitObjectGetObjectRayOriginNV
995+ | Op :: HitObjectTraceRayMotionNV
996+ | Op :: HitObjectGetShaderRecordBufferHandleNV
997+ | Op :: HitObjectGetShaderBindingTableRecordIndexNV
998+ | Op :: HitObjectRecordEmptyNV
999+ | Op :: HitObjectTraceRayNV
1000+ | Op :: HitObjectRecordHitNV
1001+ | Op :: HitObjectRecordHitWithIndexNV
1002+ | Op :: HitObjectRecordMissNV
1003+ | Op :: HitObjectExecuteShaderNV
1004+ | Op :: HitObjectGetCurrentTimeNV
1005+ | Op :: HitObjectGetAttributesNV
1006+ | Op :: HitObjectGetHitKindNV
1007+ | Op :: HitObjectGetPrimitiveIndexNV
1008+ | Op :: HitObjectGetGeometryIndexNV
1009+ | Op :: HitObjectGetInstanceIdNV
1010+ | Op :: HitObjectGetInstanceCustomIndexNV
1011+ | Op :: HitObjectGetWorldRayDirectionNV
1012+ | Op :: HitObjectGetWorldRayOriginNV
1013+ | Op :: HitObjectGetRayTMaxNV
1014+ | Op :: HitObjectGetRayTMinNV
1015+ | Op :: HitObjectIsEmptyNV
1016+ | Op :: HitObjectIsHitNV
1017+ | Op :: HitObjectIsMissNV
1018+ | Op :: ReorderThreadWithHitObjectNV
1019+ | Op :: ReorderThreadWithHintNV
1020+ | Op :: TypeHitObjectNV => reserved ! ( SPV_NV_shader_invocation_reorder ) ,
1021+ // SPV_INTEL_arbitrary_precision_floating_point
1022+ Op :: ArbitraryFloatAddINTEL
1023+ | Op :: ArbitraryFloatSubINTEL
1024+ | Op :: ArbitraryFloatMulINTEL
1025+ | Op :: ArbitraryFloatDivINTEL
1026+ | Op :: ArbitraryFloatGTINTEL
1027+ | Op :: ArbitraryFloatGEINTEL
1028+ | Op :: ArbitraryFloatLTINTEL
1029+ | Op :: ArbitraryFloatLEINTEL
1030+ | Op :: ArbitraryFloatEQINTEL
1031+ | Op :: ArbitraryFloatRecipINTEL
1032+ | Op :: ArbitraryFloatRSqrtINTEL
1033+ | Op :: ArbitraryFloatCbrtINTEL
1034+ | Op :: ArbitraryFloatHypotINTEL
1035+ | Op :: ArbitraryFloatSqrtINTEL
1036+ | Op :: ArbitraryFloatLogINTEL
1037+ | Op :: ArbitraryFloatLog2INTEL
1038+ | Op :: ArbitraryFloatLog10INTEL
1039+ | Op :: ArbitraryFloatLog1pINTEL
1040+ | Op :: ArbitraryFloatExpINTEL
1041+ | Op :: ArbitraryFloatExp2INTEL
1042+ | Op :: ArbitraryFloatExp10INTEL
1043+ | Op :: ArbitraryFloatExpm1INTEL
1044+ | Op :: ArbitraryFloatSinINTEL
1045+ | Op :: ArbitraryFloatCosINTEL
1046+ | Op :: ArbitraryFloatSinCosINTEL
1047+ | Op :: ArbitraryFloatSinPiINTEL
1048+ | Op :: ArbitraryFloatCosPiINTEL
1049+ | Op :: ArbitraryFloatSinCosPiINTEL
1050+ | Op :: ArbitraryFloatASinINTEL
1051+ | Op :: ArbitraryFloatASinPiINTEL
1052+ | Op :: ArbitraryFloatACosINTEL
1053+ | Op :: ArbitraryFloatACosPiINTEL
1054+ | Op :: ArbitraryFloatATanINTEL
1055+ | Op :: ArbitraryFloatATanPiINTEL
1056+ | Op :: ArbitraryFloatATan2INTEL
1057+ | Op :: ArbitraryFloatPowINTEL
1058+ | Op :: ArbitraryFloatPowRINTEL
1059+ | Op :: ArbitraryFloatPowNINTEL => {
1060+ reserved ! ( SPV_INTEL_arbitrary_precision_floating_point )
1061+ }
1062+ // TODO these instructions are outdated, and will be replaced by the ones in comments below. When updating, consider merging with the branch above.
1063+ Op :: ArbitraryFloatCastINTEL
1064+ | Op :: ArbitraryFloatCastFromIntINTEL
1065+ | Op :: ArbitraryFloatCastToIntINTEL => {
1066+ // Op::ArbitraryFloatConvertINTEL
1067+ // | Op::ArbitraryFloatConvertFromUIntINTEL
1068+ // | Op::ArbitraryFloatConvertFromSIntINTEL
1069+ // | Op::ArbitraryFloatConvertToUIntINTEL
1070+ // | Op::ArbitraryFloatConvertToSIntINTEL
1071+ reserved ! ( SPV_INTEL_arbitrary_precision_floating_point )
1072+ }
1073+ // SPV_INTEL_arbitrary_precision_fixed_point
1074+ Op :: FixedSqrtINTEL
1075+ | Op :: FixedRecipINTEL
1076+ | Op :: FixedRsqrtINTEL
1077+ | Op :: FixedSinINTEL
1078+ | Op :: FixedCosINTEL
1079+ | Op :: FixedSinCosINTEL
1080+ | Op :: FixedSinPiINTEL
1081+ | Op :: FixedCosPiINTEL
1082+ | Op :: FixedSinCosPiINTEL
1083+ | Op :: FixedLogINTEL
1084+ | Op :: FixedExpINTEL => reserved ! ( SPV_INTEL_arbitrary_precision_fixed_point ) ,
1085+ // SPV_EXT_shader_tile_image
1086+ Op :: ColorAttachmentReadEXT | Op :: DepthAttachmentReadEXT | Op :: StencilAttachmentReadEXT => {
1087+ reserved ! ( SPV_EXT_shader_tile_image )
1088+ }
1089+ // SPV_KHR_cooperative_matrix
1090+ Op :: TypeCooperativeMatrixKHR
1091+ | Op :: CooperativeMatrixLoadKHR
1092+ | Op :: CooperativeMatrixStoreKHR
1093+ | Op :: CooperativeMatrixMulAddKHR
1094+ | Op :: CooperativeMatrixLengthKHR => reserved ! ( SPV_KHR_cooperative_matrix ) ,
1095+ // SPV_QCOM_image_processing
1096+ Op :: ImageSampleWeightedQCOM
1097+ | Op :: ImageBoxFilterQCOM
1098+ | Op :: ImageBlockMatchSSDQCOM
1099+ | Op :: ImageBlockMatchSADQCOM => reserved ! ( SPV_QCOM_image_processing ) ,
1100+ // SPV_AMDX_shader_enqueue
1101+ Op :: FinalizeNodePayloadsAMDX
1102+ | Op :: FinishWritingNodePayloadAMDX
1103+ | Op :: InitializeNodePayloadsAMDX => reserved ! ( SPV_AMDX_shader_enqueue ) ,
1104+ // SPV_NV_displacement_micromap
1105+ Op :: FetchMicroTriangleVertexPositionNV | Op :: FetchMicroTriangleVertexBarycentricNV => {
1106+ reserved ! ( SPV_NV_displacement_micromap )
1107+ }
1108+ // SPV_KHR_ray_tracing_position_fetch
1109+ Op :: RayQueryGetIntersectionTriangleVertexPositionsKHR => {
1110+ reserved ! ( SPV_KHR_ray_tracing_position_fetch )
1111+ }
1112+ // SPV_INTEL_bfloat16_conversion
1113+ Op :: ConvertFToBF16INTEL | Op :: ConvertBF16ToFINTEL => {
1114+ reserved ! ( SPV_INTEL_bfloat16_conversion )
1115+ }
1116+
1117+ // TODO unknown_extension_INTEL
1118+ Op :: SaveMemoryINTEL
1119+ | Op :: RestoreMemoryINTEL
1120+ | Op :: AliasDomainDeclINTEL
1121+ | Op :: AliasScopeDeclINTEL
1122+ | Op :: AliasScopeListDeclINTEL
1123+ | Op :: PtrCastToCrossWorkgroupINTEL
1124+ | Op :: CrossWorkgroupCastToPtrINTEL
1125+ | Op :: TypeBufferSurfaceINTEL
1126+ | Op :: TypeStructContinuedINTEL
1127+ | Op :: ConstantCompositeContinuedINTEL
1128+ | Op :: SpecConstantCompositeContinuedINTEL
1129+ | Op :: ControlBarrierArriveINTEL
1130+ | Op :: ControlBarrierWaitINTEL => reserved ! ( unknown_extension_INTEL) ,
9481131 }
9491132
9501133 None
0 commit comments