diff options
| author | kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> | 2024-07-01 20:06:58 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-01 20:06:58 -0700 |
| commit | bd01bd3f4b8eecbfb924b8eb4090694e44e8166c (patch) | |
| tree | 8a202bf964ed25d8809250cb46e06baa2d735a7a /source | |
| parent | fff79c311028cc8a5cff310a9c493b23af68eb0c (diff) | |
Fix the type error in kIROp_RWStructuredBufferLoad (#4523)
* Fix the type error in kIROp_RWStructuredBufferLoad
In StructuredBuffer::Load(), we allow any type of integer
as the input. However, when emitting glsl code,
StructuredBuffer::Load(index)
will be translated to the subscript index of the buffer, e.g.
buffer[index], however, glsl doesn't allow 64bit integer as the
subscript.
So the easiest fix is to convert the index to uint when emitting
glsl.
* Add commit
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang-emit-glsl.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp index 7cf478c36..eea672938 100644 --- a/source/slang/slang-emit-glsl.cpp +++ b/source/slang/slang-emit-glsl.cpp @@ -2068,7 +2068,10 @@ bool GLSLSourceEmitter::tryEmitInstExprImpl(IRInst* inst, const EmitOpInfo& inOu emitOperand(inst->getOperand(0), leftSide(outerPrec, prec)); m_writer->emit("._data["); + // glsl only support int/uint as array index + m_writer->emit("uint("); emitOperand(inst->getOperand(1), getInfo(EmitOp::General)); + m_writer->emit(")"); m_writer->emit("]"); maybeCloseParens(needClose); |
