summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-glsl.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-08-23 05:49:33 -0700
committerGitHub <noreply@github.com>2023-08-23 20:49:33 +0800
commit6437c38e0a3c2c1daf36cb5e543dc0b467fa4b15 (patch)
treec117b964ada397d9cac01ff4759bcd16d35c7e20 /source/slang/slang-emit-glsl.cpp
parentcdd5e6666f98903d61118ada5cba51424fd1577c (diff)
Lower all ByteAddressBuffer uses for SPIRV. (#3143)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit-glsl.cpp')
-rw-r--r--source/slang/slang-emit-glsl.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp
index e1f74f70d..e40a5ceca 100644
--- a/source/slang/slang-emit-glsl.cpp
+++ b/source/slang/slang-emit-glsl.cpp
@@ -8,6 +8,7 @@
#include "slang-mangled-lexer.h"
#include "slang-legalize-types.h"
+#include "slang-ir-layout.h"
#include <assert.h>
@@ -2036,6 +2037,22 @@ bool GLSLSourceEmitter::tryEmitInstStmtImpl(IRInst* inst)
m_writer->emit(", -1);\n");
return true;
}
+ case kIROp_StructuredBufferGetDimensions:
+ {
+ emitInstResultDecl(inst);
+ m_writer->emit("uvec2(");
+ emitOperand(inst->getOperand(0), getInfo(EmitOp::General));
+ m_writer->emit("._data.length(), ");
+ auto elementType = as<IRHLSLStructuredBufferTypeBase>(inst->getOperand(0)->getDataType())->getElementType();
+ IRIntegerValue stride = 0;
+ if (auto sizeDecor = elementType->findDecoration<IRSizeAndAlignmentDecoration>())
+ {
+ stride = align(sizeDecor->getSize(), (int)sizeDecor->getAlignment());
+ }
+ m_writer->emit(stride);
+ m_writer->emit(");\n");
+ return true;
+ }
default:
return false;
}