summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMukund Keshava <mkeshava@nvidia.com>2025-05-16 21:00:53 +0530
committerGitHub <noreply@github.com>2025-05-16 18:30:53 +0300
commit1fd7b2296d8360c245a0c732e7f842876533f92a (patch)
tree942ea20a3713f98280008d76fbba6a85a5ad6062
parentb39ec87cccaadebbb9325dd2adb8c0b13b364805 (diff)
Fix RWStructuredBuffer emission (#7139)
Fixes #7127
-rw-r--r--source/slang/slang-emit-cpp.cpp3
-rw-r--r--tests/cuda/compile-to-cuda.slang15
2 files changed, 14 insertions, 4 deletions
diff --git a/source/slang/slang-emit-cpp.cpp b/source/slang/slang-emit-cpp.cpp
index bfc021677..6f97a11da 100644
--- a/source/slang/slang-emit-cpp.cpp
+++ b/source/slang/slang-emit-cpp.cpp
@@ -1547,9 +1547,10 @@ bool CPPSourceEmitter::tryEmitInstExprImpl(IRInst* inst, const EmitOpInfo& inOut
auto base = inst->getOperand(0);
auto outerPrec = getInfo(EmitOp::General);
emitOperand(base, outerPrec);
+ m_writer->emit(")");
m_writer->emit("[");
emitOperand(inst->getOperand(1), EmitOpInfo());
- m_writer->emit("]))");
+ m_writer->emit("])");
return true;
}
case kIROp_swizzle:
diff --git a/tests/cuda/compile-to-cuda.slang b/tests/cuda/compile-to-cuda.slang
index d7399d469..f383bbd22 100644
--- a/tests/cuda/compile-to-cuda.slang
+++ b/tests/cuda/compile-to-cuda.slang
@@ -2,14 +2,23 @@
//DISABLE_TEST(compute):COMPARE_COMPUTE:-cpu -compute
//TEST(compute):COMPARE_COMPUTE:-cuda -compute
-//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer
+//TEST_INPUT:ubuffer(data=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer
RWStructuredBuffer<int> outputBuffer : register(u0);
+[shader("compute")]
[numthreads(4, 1, 1)]
void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
{
- int tid = int(dispatchThreadID.x);
-
+ int tid = int(dispatchThreadID.x);
+ for(;;)
+ {
+ if(outputBuffer[0] == 1)
+ {
+ // This is just a statement to trigger bug #7127
+ outputBuffer[0] = tid;
+ break;
+ }
+ }
outputBuffer[tid * 4] = tid;
outputBuffer[tid * 4 + 1] = tid + 1;
outputBuffer[tid * 4 + 2] = tid + 2;