diff options
| author | Yong He <yonghe@outlook.com> | 2025-01-17 14:51:51 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-17 14:51:51 -0800 |
| commit | dc69d85f89e42eb2fe914e1105a8cbb68e9a8ca4 (patch) | |
| tree | 9de601a3e3a3d265a34beeb72c06fde0ae672a8a | |
| parent | d1a13a730406646029cedd018bb9806943209baa (diff) | |
Add groupshared atomic array test. (#6107)
* Add groupshared atomic array test.
* Fix test.
| -rw-r--r-- | tests/spirv/groupshared-array-atomic.slang | 19 | ||||
| -rw-r--r-- | tools/render-test/render-test-main.cpp | 7 |
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; } |
