From 9c9e1f701242b59dead94426a25f2ad5d3bcf66d Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 16 Dec 2024 22:10:10 -0800 Subject: Support matrix negation in metal backend. (#5891) --- source/slang/slang-emit-metal.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'source') diff --git a/source/slang/slang-emit-metal.cpp b/source/slang/slang-emit-metal.cpp index e6e2a3ec5..45a9e60ad 100644 --- a/source/slang/slang-emit-metal.cpp +++ b/source/slang/slang-emit-metal.cpp @@ -701,6 +701,21 @@ bool MetalSourceEmitter::tryEmitInstExprImpl(IRInst* inst, const EmitOpInfo& inO m_writer->emit(")"); return true; } + case kIROp_Neg: + { + if (as(inst->getOperand(0)->getDataType())) + { + // Metal does not support negate operator on matrices, + // we should emit "(matrix(0) - op0)" instead. + m_writer->emit("("); + emitType(inst->getDataType()); + m_writer->emit("(0) - "); + emitOperand(inst->getOperand(0), getInfo(EmitOp::General)); + m_writer->emit(")"); + return true; + } + break; + } case kIROp_Mul: { // Component-wise multiplication needs to be special cased, -- cgit v1.2.3