summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorkaizhangNV <149626564+kaizhangNV@users.noreply.github.com>2024-07-01 20:06:58 -0700
committerGitHub <noreply@github.com>2024-07-01 20:06:58 -0700
commitbd01bd3f4b8eecbfb924b8eb4090694e44e8166c (patch)
tree8a202bf964ed25d8809250cb46e06baa2d735a7a /source
parentfff79c311028cc8a5cff310a9c493b23af68eb0c (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.cpp3
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);