summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-emit-glsl.cpp3
-rw-r--r--tests/compute/byte-address-buffer-array.slang6
2 files changed, 6 insertions, 3 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);
diff --git a/tests/compute/byte-address-buffer-array.slang b/tests/compute/byte-address-buffer-array.slang
index 1a23821a1..4ac4a612a 100644
--- a/tests/compute/byte-address-buffer-array.slang
+++ b/tests/compute/byte-address-buffer-array.slang
@@ -26,10 +26,10 @@ void computeMain(uint3 threadId : SV_DispatchThreadID)
// CHECK1: {{.*}}[0] = {{.*}}.data_0[0];
// CHECK1: {{.*}}[1] = {{.*}}.data_0[1];
// CHECK1: vec4 {{.*}}[2];
- // CHECK1: unpackStorage_0(buffer_0._data[0], {{.*}});
+ // CHECK1: unpackStorage_0(buffer_0._data[uint(0)], {{.*}});
// CHECK1: vec4 {{.*}}[2] = buffer_0._data[0] = packStorage_0({{.*}});
- // CHECK1: vec4 {{.*}} = buffer_2._data[1];
- // CHECK1: vec4 {{.*}} = buffer_2._data[1] = vec4(buffer_1._data[1], buffer_1._data[2], buffer_1._data[3], buffer_1._data[4]);
+ // CHECK1: vec4 {{.*}} = buffer_2._data[uint(1)];
+ // CHECK1: vec4 {{.*}} = buffer_2._data[1] = vec4(buffer_1._data[uint(1)], buffer_1._data[uint(2)], buffer_1._data[uint(3)], buffer_1._data[uint(4)]);
// CHECK2: float4 {{.*}}[int(2)] = (buffer_0).Load<float4 [int(2)] >(int(0));
// CHECK2: buffer_0.Store(int(0),{{.*}});