diff options
| author | Yong He <yonghe@outlook.com> | 2024-02-05 22:36:02 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-05 22:36:02 -0800 |
| commit | 23c65b873f8002b74d60f61cacb3614da60e078d (patch) | |
| tree | 9629ffeed059cd67e70d5a98427922697ba46543 /source/slang/slang-emit-glsl.cpp | |
| parent | af035fb6da2a19ccc647515e9b1edf35777f8c89 (diff) | |
Add per-buffer data layout control. (#3551)
* Add per-buffer data layout control.
Fixes #3534.
* Fixes.
* Robustness.
* Update test.
* Fix.
Diffstat (limited to 'source/slang/slang-emit-glsl.cpp')
| -rw-r--r-- | source/slang/slang-emit-glsl.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp index 248b803f4..bae34b6fa 100644 --- a/source/slang/slang-emit-glsl.cpp +++ b/source/slang/slang-emit-glsl.cpp @@ -122,7 +122,28 @@ void GLSLSourceEmitter::_emitGLSLStructuredBuffer(IRGlobalParam* varDecl, IRHLSL _requireGLSLVersion(430); m_writer->emit("layout("); - m_writer->emit(getTargetReq()->getForceGLSLScalarBufferLayout() ? "scalar" : "std430"); + auto layoutTypeOp = structuredBufferType->getDataLayout() + ? structuredBufferType->getDataLayout()->getOp() + : kIROp_DefaultBufferLayoutType; + switch (layoutTypeOp) + { + case kIROp_DefaultBufferLayoutType: + m_writer->emit(getTargetReq()->getForceGLSLScalarBufferLayout() ? "scalar" : "std430"); + break; + case kIROp_Std430BufferLayoutType: + m_writer->emit("std430"); + break; + case kIROp_Std140BufferLayoutType: + m_writer->emit("std140"); + break; + case kIROp_ScalarBufferLayoutType: + _requireGLSLExtension(toSlice("GL_EXT_scalar_block_layout")); + m_writer->emit("scalar"); + break; + default: + m_writer->emit("std430"); + break; + } bool isReadOnly = (as<IRHLSLStructuredBufferType>(structuredBufferType) != nullptr); auto layout = getVarLayout(varDecl); |
