@@ -6908,6 +6908,131 @@ Value *TranslateVectorAccumulate(CallInst *CI, IntrinsicOp IOP,
69086908 {OpArg, InputVector, MatrixBuffer, MatrixOffset});
69096909}
69106910
6911+ Value *TranslateLinAlgFillMatrix (CallInst *CI, IntrinsicOp IOP,
6912+ OP::OpCode OpCode,
6913+ HLOperationLowerHelper &Helper,
6914+ HLObjectOperationLowerHelper *ObjHelper,
6915+ bool &Translated) {
6916+ hlsl::OP *HlslOp = &Helper.hlslOP ;
6917+ IRBuilder<> Builder (CI);
6918+
6919+ Value *MatrixPtr = CI->getArgOperand (1 );
6920+ DXASSERT_NOMSG (isa<PointerType>(MatrixPtr->getType ()));
6921+ Type *MatrixType = MatrixPtr->getType ()->getPointerElementType ();
6922+ Value *Scalar = CI->getArgOperand (2 );
6923+
6924+ Constant *OpArg = HlslOp->GetU32Const ((unsigned )OpCode);
6925+ Function *DxilFunc =
6926+ HlslOp->GetOpFunc (OpCode, {MatrixType, Scalar->getType ()});
6927+
6928+ Value *Matrix = Builder.CreateCall (DxilFunc, {OpArg, Scalar});
6929+ Builder.CreateStore (Matrix, MatrixPtr);
6930+
6931+ return nullptr ;
6932+ }
6933+
6934+ Value *TranslateLinAlgMatrixAccumStoreToDescriptor (
6935+ CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
6936+ HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *ObjHelper,
6937+ bool &Translated) {
6938+ DXASSERT (false , " Not implemented." );
6939+ return nullptr ;
6940+ }
6941+
6942+ Value *TranslateLinAlgMatVecMul (CallInst *CI, IntrinsicOp IOP,
6943+ OP::OpCode OpCode,
6944+ HLOperationLowerHelper &Helper,
6945+ HLObjectOperationLowerHelper *ObjHelper,
6946+ bool &Translated) {
6947+ DXASSERT (false , " Not implemented." );
6948+ return nullptr ;
6949+ }
6950+
6951+ Value *TranslateLinAlgMatVecMulAdd (CallInst *CI, IntrinsicOp IOP,
6952+ OP::OpCode OpCode,
6953+ HLOperationLowerHelper &Helper,
6954+ HLObjectOperationLowerHelper *ObjHelper,
6955+ bool &Translated) {
6956+ DXASSERT (false , " Not implemented." );
6957+ return nullptr ;
6958+ }
6959+
6960+ Value *TranslateLinAlgMatrixLoadFromDescriptor (
6961+ CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
6962+ HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *ObjHelper,
6963+ bool &Translated) {
6964+ DXASSERT (false , " Not implemented." );
6965+ return nullptr ;
6966+ }
6967+
6968+ Value *TranslateLinAlgMatrixOuterProduct (
6969+ CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
6970+ HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *ObjHelper,
6971+ bool &Translated) {
6972+ DXASSERT (false , " Not implemented." );
6973+ return nullptr ;
6974+ }
6975+
6976+ Value *TranslateLinAlgMatrixAccumulate (CallInst *CI, IntrinsicOp IOP,
6977+ OP::OpCode OpCode,
6978+ HLOperationLowerHelper &Helper,
6979+ HLObjectOperationLowerHelper *ObjHelper,
6980+ bool &Translated) {
6981+ DXASSERT (false , " Not implemented." );
6982+ return nullptr ;
6983+ }
6984+
6985+ Value *TranslateLinAlgMatrixGetCoordinate (
6986+ CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
6987+ HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *ObjHelper,
6988+ bool &Translated) {
6989+ DXASSERT (false , " Not implemented." );
6990+ return nullptr ;
6991+ }
6992+
6993+ Value *TranslateLinAlgMatrixGetElement (CallInst *CI, IntrinsicOp IOP,
6994+ OP::OpCode OpCode,
6995+ HLOperationLowerHelper &Helper,
6996+ HLObjectOperationLowerHelper *ObjHelper,
6997+ bool &Translated) {
6998+ DXASSERT (false , " Not implemented." );
6999+ return nullptr ;
7000+ }
7001+
7002+ Value *TranslateLinAlgMatrixSetElement (CallInst *CI, IntrinsicOp IOP,
7003+ OP::OpCode OpCode,
7004+ HLOperationLowerHelper &Helper,
7005+ HLObjectOperationLowerHelper *ObjHelper,
7006+ bool &Translated) {
7007+ DXASSERT (false , " Not implemented." );
7008+ return nullptr ;
7009+ }
7010+
7011+ Value *TranslateLinAlgMatrixMatrixMultiply (
7012+ CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
7013+ HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *ObjHelper,
7014+ bool &Translated) {
7015+ DXASSERT (false , " Not implemented." );
7016+ return nullptr ;
7017+ }
7018+
7019+ Value *TranslateLinAlgMatrixMatrixMultiplyAccumulate (
7020+ CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
7021+ HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *ObjHelper,
7022+ bool &Translated) {
7023+ DXASSERT (false , " Not implemented." );
7024+ return nullptr ;
7025+ }
7026+
7027+ Value *TranslateLinAlgCopyConvertMatrix (CallInst *CI, IntrinsicOp IOP,
7028+ OP::OpCode OpCode,
7029+ HLOperationLowerHelper &Helper,
7030+ HLObjectOperationLowerHelper *ObjHelper,
7031+ bool &Translated) {
7032+ DXASSERT (false , " Not implemented." );
7033+ return nullptr ;
7034+ }
7035+
69117036} // namespace
69127037
69137038// Lower table.
@@ -7657,44 +7782,50 @@ constexpr IntrinsicLower gLowerTable[] = {
76577782 TranslateHitObjectTriangleObjectPositions,
76587783 DXIL::OpCode::HitObject_TriangleObjectPosition},
76597784
7660- {IntrinsicOp::IOP___builtin_LinAlg_CopyConvertMatrix, EmptyLower,
7661- DXIL::OpCode::LinAlgCopyConvertMatrix},
7662- {IntrinsicOp::IOP___builtin_LinAlg_FillMatrix, EmptyLower ,
7785+ {IntrinsicOp::IOP___builtin_LinAlg_CopyConvertMatrix,
7786+ TranslateLinAlgCopyConvertMatrix, DXIL::OpCode::LinAlgCopyConvertMatrix},
7787+ {IntrinsicOp::IOP___builtin_LinAlg_FillMatrix, TranslateLinAlgFillMatrix ,
76637788 DXIL::OpCode::LinAlgFillMatrix},
7664- {IntrinsicOp::IOP___builtin_LinAlg_MatrixGetCoordinate, EmptyLower,
7789+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixGetCoordinate,
7790+ TranslateLinAlgMatrixGetCoordinate,
76657791 DXIL::OpCode::LinAlgMatrixGetCoordinate},
7666- {IntrinsicOp::IOP___builtin_LinAlg_MatrixGetElement, EmptyLower,
7667- DXIL::OpCode::LinAlgMatrixGetElement},
7668- {IntrinsicOp::IOP___builtin_LinAlg_MatrixLength, EmptyLower ,
7792+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixGetElement,
7793+ TranslateLinAlgMatrixGetElement, DXIL::OpCode::LinAlgMatrixGetElement},
7794+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixLength, TrivialUnaryOperation ,
76697795 DXIL::OpCode::LinAlgMatrixLength},
7670- {IntrinsicOp::IOP___builtin_LinAlg_MatrixLoadFromDescriptor, EmptyLower,
7796+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixLoadFromDescriptor,
7797+ TranslateLinAlgMatrixLoadFromDescriptor,
76717798 DXIL::OpCode::LinAlgMatrixLoadFromDescriptor},
76727799 {IntrinsicOp::IOP___builtin_LinAlg_MatrixLoadFromMemory, EmptyLower,
76737800 DXIL::OpCode::LinAlgMatrixLoadFromMemory},
7674- {IntrinsicOp::IOP___builtin_LinAlg_MatrixSetElement, EmptyLower,
7675- DXIL::OpCode::LinAlgMatrixSetElement},
7676- {IntrinsicOp::IOP___builtin_LinAlg_MatrixStoreToDescriptor, EmptyLower,
7801+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixSetElement,
7802+ TranslateLinAlgMatrixSetElement, DXIL::OpCode::LinAlgMatrixSetElement},
7803+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixStoreToDescriptor,
7804+ TranslateLinAlgMatrixAccumStoreToDescriptor,
76777805 DXIL::OpCode::LinAlgMatrixStoreToDescriptor},
76787806 {IntrinsicOp::IOP___builtin_LinAlg_MatrixStoreToMemory, EmptyLower,
76797807 DXIL::OpCode::LinAlgMatrixStoreToMemory},
7680- {IntrinsicOp::IOP___builtin_LinAlg_MatrixAccumulate, EmptyLower,
7681- DXIL::OpCode::LinAlgMatrixAccumulate},
7682- {IntrinsicOp::IOP___builtin_LinAlg_MatrixMatrixMultiply, EmptyLower,
7683- DXIL::OpCode::LinAlgMatrixMultiply},
7808+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixAccumulate,
7809+ TranslateLinAlgMatrixAccumulate, DXIL::OpCode::LinAlgMatrixAccumulate},
7810+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixMatrixMultiply,
7811+ TranslateLinAlgMatrixMatrixMultiply, DXIL::OpCode::LinAlgMatrixMultiply},
76847812 {IntrinsicOp::IOP___builtin_LinAlg_MatrixMatrixMultiplyAccumulate,
7685- EmptyLower, DXIL::OpCode::LinAlgMatrixMultiplyAccumulate},
7686- {IntrinsicOp::IOP___builtin_LinAlg_MatrixQueryAccumulatorLayout, EmptyLower,
7687- DXIL::OpCode::LinAlgMatrixQueryAccumulatorLayout},
7688- {IntrinsicOp::IOP___builtin_LinAlg_MatrixAccumulateToDescriptor, EmptyLower,
7813+ TranslateLinAlgMatrixMatrixMultiplyAccumulate,
7814+ DXIL::OpCode::LinAlgMatrixMultiplyAccumulate},
7815+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixQueryAccumulatorLayout,
7816+ TrivialNoArgOperation, DXIL::OpCode::LinAlgMatrixQueryAccumulatorLayout},
7817+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixAccumulateToDescriptor,
7818+ TranslateLinAlgMatrixAccumStoreToDescriptor,
76897819 DXIL::OpCode::LinAlgMatrixAccumulateToDescriptor},
76907820 {IntrinsicOp::IOP___builtin_LinAlg_MatrixAccumulateToMemory, EmptyLower,
76917821 DXIL::OpCode::LinAlgMatrixAccumulateToMemory},
7692- {IntrinsicOp::IOP___builtin_LinAlg_MatrixOuterProduct, EmptyLower,
7693- DXIL::OpCode::LinAlgMatrixOuterProduct},
7694- {IntrinsicOp::IOP___builtin_LinAlg_MatrixVectorMultiply, EmptyLower,
7695- DXIL::OpCode::LinAlgMatVecMul},
7696- {IntrinsicOp::IOP___builtin_LinAlg_MatrixVectorMultiplyAdd, EmptyLower,
7697- DXIL::OpCode::LinAlgMatVecMulAdd},
7822+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixOuterProduct,
7823+ TranslateLinAlgMatrixOuterProduct, DXIL::OpCode::LinAlgMatrixOuterProduct},
7824+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixVectorMultiply,
7825+ TranslateLinAlgMatVecMul, DXIL::OpCode::LinAlgMatVecMul},
7826+ {IntrinsicOp::IOP___builtin_LinAlg_MatrixVectorMultiplyAdd,
7827+ TranslateLinAlgMatVecMulAdd, DXIL::OpCode::LinAlgMatVecMulAdd},
7828+
76987829 {IntrinsicOp::IOP_DebugBreak, TrivialNoArgOperation,
76997830 DXIL::OpCode::DebugBreak},
77007831 {IntrinsicOp::IOP_DxIsDebuggerPresent, TranslateWaveToVal,
0 commit comments