summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-metal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-emit-metal.cpp')
-rw-r--r--source/slang/slang-emit-metal.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/source/slang/slang-emit-metal.cpp b/source/slang/slang-emit-metal.cpp
index 0a5506776..d38c3de9b 100644
--- a/source/slang/slang-emit-metal.cpp
+++ b/source/slang/slang-emit-metal.cpp
@@ -253,6 +253,24 @@ bool MetalSourceEmitter::tryEmitInstStmtImpl(IRInst* inst)
case kIROp_discard:
m_writer->emit("discard_fragment();\n");
return true;
+ case kIROp_MetalAtomicCast:
+ {
+ auto oldValName = getName(inst);
+ auto op0 = inst->getOperand(0);
+
+ m_writer->emit("atomic_");
+ emitType(op0->getDataType());
+ m_writer->emit(" ");
+ m_writer->emit(oldValName);
+ m_writer->emit(" = ");
+
+ m_writer->emit("((atomic_");
+ emitType(op0->getDataType());
+ m_writer->emit(")(");
+ emitOperand(op0, getInfo(EmitOp::General));
+ m_writer->emit("));\n");
+ return true;
+ }
}
return false;
}