summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-01-17 14:51:51 -0800
committerGitHub <noreply@github.com>2025-01-17 14:51:51 -0800
commitdc69d85f89e42eb2fe914e1105a8cbb68e9a8ca4 (patch)
tree9de601a3e3a3d265a34beeb72c06fde0ae672a8a
parentd1a13a730406646029cedd018bb9806943209baa (diff)
Add groupshared atomic array test. (#6107)
* Add groupshared atomic array test. * Fix test.
-rw-r--r--tests/spirv/groupshared-array-atomic.slang19
-rw-r--r--tools/render-test/render-test-main.cpp7
2 files changed, 25 insertions, 1 deletions
diff --git a/tests/spirv/groupshared-array-atomic.slang b/tests/spirv/groupshared-array-atomic.slang
new file mode 100644
index 000000000..242996dfa
--- /dev/null
+++ b/tests/spirv/groupshared-array-atomic.slang
@@ -0,0 +1,19 @@
+//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -vk -emit-spirv-directly
+groupshared Atomic<uint> values[10];
+
+//TEST_INPUT: set outputAddr = out ubuffer(data=[0 0 0 0], stride=4)
+uniform uint64_t outputAddr;
+
+[numthreads(4,1,1)]
+void computeMain(int i : SV_DispatchThreadID)
+{
+ uint* output = (uint*)(outputAddr);
+ values[i] = 0;
+ values[i] += 1;
+ output[i] = values[i].load();
+
+ // CHECK: 1
+ // CHECK: 1
+ // CHECK: 1
+ // CHECK: 1
+} \ No newline at end of file
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index 812a753e3..648e5a4bd 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -226,13 +226,18 @@ struct AssignValsFromLayoutContext
device,
bufferResource));
- if (dstCursor.getTypeLayout()->getType()->getKind() == slang::TypeReflection::Kind::Pointer)
+ if ((dstCursor.getTypeLayout()->getType()->getKind() ==
+ slang::TypeReflection::Kind::Scalar &&
+ dstCursor.getTypeLayout()->getType()->getScalarType() ==
+ slang::TypeReflection::ScalarType::UInt64) ||
+ dstCursor.getTypeLayout()->getType()->getKind() == slang::TypeReflection::Kind::Pointer)
{
// dstCursor is pointer to an ordinary uniform data field,
// we should write bufferResource as a pointer.
uint64_t addr = bufferResource->getDeviceAddress();
dstCursor.setData(&addr, sizeof(addr));
resourceContext.resources.add(ComPtr<IResource>(bufferResource.get()));
+ maybeAddOutput(dstCursor, srcVal, bufferResource);
return SLANG_OK;
}