diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-23 05:49:33 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-23 20:49:33 +0800 |
| commit | 6437c38e0a3c2c1daf36cb5e543dc0b467fa4b15 (patch) | |
| tree | c117b964ada397d9cac01ff4759bcd16d35c7e20 /source/slang/slang-emit-cpp.cpp | |
| parent | cdd5e6666f98903d61118ada5cba51424fd1577c (diff) | |
Lower all ByteAddressBuffer uses for SPIRV. (#3143)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit-cpp.cpp')
| -rw-r--r-- | source/slang/slang-emit-cpp.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/source/slang/slang-emit-cpp.cpp b/source/slang/slang-emit-cpp.cpp index dee8e7197..0b01bdf4e 100644 --- a/source/slang/slang-emit-cpp.cpp +++ b/source/slang/slang-emit-cpp.cpp @@ -1192,6 +1192,40 @@ const UnownedStringSlice* CPPSourceEmitter::getVectorElementNames(IRVectorType* return getVectorElementNames(basicType->getBaseType(), elemCount); } +bool CPPSourceEmitter::tryEmitInstStmtImpl(IRInst* inst) +{ + switch (inst->getOp()) + { + case kIROp_StructuredBufferGetDimensions: + { + auto count = _generateUniqueName(UnownedStringSlice("_elementCount")); + auto stride = _generateUniqueName(UnownedStringSlice("_stride")); + + m_writer->emit("uint "); + m_writer->emit(count); + m_writer->emit(";\n"); + m_writer->emit("uint "); + m_writer->emit(stride); + m_writer->emit(";\n"); + emitOperand(inst->getOperand(0), leftSide(getInfo(EmitOp::General), getInfo(EmitOp::Postfix))); + m_writer->emit(".GetDimensions(&"); + m_writer->emit(count); + m_writer->emit(", &"); + m_writer->emit(stride); + m_writer->emit(");\n"); + emitInstResultDecl(inst); + m_writer->emit("uint2("); + m_writer->emit(count); + m_writer->emit(", "); + m_writer->emit(stride); + m_writer->emit(");\n"); + return true; + } + default: + return false; + } +} + bool CPPSourceEmitter::tryEmitInstExprImpl(IRInst* inst, const EmitOpInfo& inOuterPrec) { switch (inst->getOp()) |
