summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-c-like.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-08-14 16:23:19 -0700
committerGitHub <noreply@github.com>2023-08-14 16:23:19 -0700
commit661d6198bbb9857d3fdc6df477e0742ed0b0765c (patch)
tree974a57cfa2e43624e91502e9e652a0cc78105b3a /source/slang/slang-emit-c-like.cpp
parent0403e0556b470f6b316153caea2dc6f5c314da5b (diff)
Support per field matrix layout (#3101)
* Support per field matrix layout * Fix warnings. * Fix. * Fix tests. * Fix spiv gen. * Fix. * More test fixes. * Fix. * Run only GPU tests on self-hosted servers. * Remove -use-glsl-matrix-layout-modifier. * Fix. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit-c-like.cpp')
-rw-r--r--source/slang/slang-emit-c-like.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp
index 0cc3a196b..95c691d8b 100644
--- a/source/slang/slang-emit-c-like.cpp
+++ b/source/slang/slang-emit-c-like.cpp
@@ -2146,6 +2146,52 @@ void CLikeSourceEmitter::defaultEmitInstExpr(IRInst* inst, const EmitOpInfo& inO
}
break;
+ case kIROp_StructuredBufferLoad:
+ case kIROp_RWStructuredBufferLoad:
+ {
+ auto base = inst->getOperand(0);
+ emitOperand(base, outerPrec);
+ m_writer->emit(".Load(");
+ emitOperand(inst->getOperand(1), EmitOpInfo());
+ m_writer->emit(")");
+ }
+ break;
+
+ case kIROp_StructuredBufferLoadStatus:
+ case kIROp_RWStructuredBufferLoadStatus:
+ {
+ auto base = inst->getOperand(0);
+ emitOperand(base, outerPrec);
+ m_writer->emit(".Load(");
+ emitOperand(inst->getOperand(1), EmitOpInfo());
+ m_writer->emit(", ");
+ emitOperand(inst->getOperand(2), EmitOpInfo());
+ m_writer->emit(")");
+ }
+ break;
+
+ case kIROp_RWStructuredBufferGetElementPtr:
+ {
+ auto base = inst->getOperand(0);
+ emitOperand(base, outerPrec);
+ m_writer->emit("[");
+ emitOperand(inst->getOperand(1), EmitOpInfo());
+ m_writer->emit("]");
+ }
+ break;
+
+ case kIROp_RWStructuredBufferStore:
+ {
+ auto base = inst->getOperand(0);
+ emitOperand(base, EmitOpInfo());
+ m_writer->emit(".Store(");
+ emitOperand(inst->getOperand(1), EmitOpInfo());
+ m_writer->emit(", ");
+ emitOperand(inst->getOperand(2), EmitOpInfo());
+ m_writer->emit(")");
+ }
+ break;
+
case kIROp_Call:
{
emitCallExpr((IRCall*)inst, outerPrec);