summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-02-01 13:26:03 -0800
committerGitHub <noreply@github.com>2024-02-01 13:26:03 -0800
commitf370947c63bca707b9cfde7b18e67298f5fbace3 (patch)
tree1180cdb722529c8157f673fc68a2d45f00b5e827 /tests
parenta2d2018a8be41aecd2c1810db8556e0c07595fb9 (diff)
FP16 atomics for RWByteAddresBuffer, fp32 atomics for images. (#3536)
* FP16 atomics for RWByteAddresBuffer, fp32 atomics for images. * Fix spelling. * Add overload. * Fix test failures. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/hlsl-intrinsic/byte-address-buffer/byte-address-half-atomics.slang34
-rw-r--r--tests/hlsl-intrinsic/texture/float-atomics.slang35
-rw-r--r--tests/language-feature/spirv-asm/too-many-operands.slang9
3 files changed, 71 insertions, 7 deletions
diff --git a/tests/hlsl-intrinsic/byte-address-buffer/byte-address-half-atomics.slang b/tests/hlsl-intrinsic/byte-address-buffer/byte-address-half-atomics.slang
new file mode 100644
index 000000000..a89c7c3fa
--- /dev/null
+++ b/tests/hlsl-intrinsic/byte-address-buffer/byte-address-half-atomics.slang
@@ -0,0 +1,34 @@
+// byte-address-half-atomics.slang
+// test the atomics on half types.
+
+// Disabled because our current driver doesn't support half atomics yet.
+//DISABLED_TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -compute -profile cs_6_2 -render-features half -shaderobj
+
+//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry computeMain -stage compute
+//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry computeMain -stage compute -emit-spirv-directly
+
+//TEST_INPUT:set tmpBuffer = ubuffer(data=[0 0 0 0], stride=4)
+RWByteAddressBuffer tmpBuffer;
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<float> outputBuffer;
+
+[numthreads(1, 1, 1)]
+void computeMain(int3 dispatchThreadID : SV_DispatchThreadID)
+{
+ half originalValue;
+
+ // SPIRV: OpAtomicFAddEXT
+
+ tmpBuffer.InterlockedAddF16(0, 1.0h, originalValue);
+ tmpBuffer.InterlockedAddF16(2, 2.0h, originalValue);
+
+ half2 v = tmpBuffer.Load<half2>(0);
+
+ // CHECK: 1.0
+ outputBuffer[0] = v.x;
+ // CHECK: 2.0
+ outputBuffer[1] = v.y;
+ // CHECK: 0.0
+ outputBuffer[3] = originalValue;
+}
diff --git a/tests/hlsl-intrinsic/texture/float-atomics.slang b/tests/hlsl-intrinsic/texture/float-atomics.slang
new file mode 100644
index 000000000..4e7405f3d
--- /dev/null
+++ b/tests/hlsl-intrinsic/texture/float-atomics.slang
@@ -0,0 +1,35 @@
+// gather-texture2darray.slang
+
+//TEST(compute, vulkan):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -compute -shaderobj -output-using-type -emit-spirv-directly -render-feature hardware-device
+//TEST(compute):SIMPLE(filecheck=HLSL):-target hlsl -profile cs_6_6 -entry computeMain
+
+// Test atomics on a RWTexture2D<float>.
+
+//TEST_INPUT: set t = RWTexture2D(format=R32_FLOAT, size=4, content = zero, mipMaps = 1)
+[format("r32f")]
+RWTexture2D<float> t;
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer
+RWStructuredBuffer<float> outputBuffer;
+
+[shader("compute")]
+[numthreads(1, 1, 1)]
+void computeMain(uint3 tid : SV_DispatchThreadID)
+{
+ float originalValue;
+ // HLSL: {{.*}}originalValue{{.*}} = NvInterlockedAddFp32({{.*}}t{{.*}}, {{.*}}, {{.*}}1.0{{.*}});
+ // HLSL: {{.*}}originalValue{{.*}} = NvInterlockedAddFp32({{.*}}t{{.*}}, {{.*}}, {{.*}}2.0{{.*}});
+ // HLSL: {{.*}}originalValue{{.*}} = NvInterlockedAddFp32({{.*}}t{{.*}}, {{.*}}, {{.*}}3.0{{.*}});
+ t.InterlockedAddF32(uint2(0, 0), 1.0, originalValue);
+ t.InterlockedAddF32(uint2(1, 0), 2.0, originalValue);
+ t.InterlockedAddF32(uint2(1, 1), 3.0, originalValue);
+ // CHECK: 1.0
+ outputBuffer[0] = t[uint2(0, 0)];
+ // CHECK: 2.0
+ outputBuffer[1] = t[uint2(1, 0)];
+ // CHECK: 3.0
+ outputBuffer[2] = t[uint2(1, 1)];
+ // CHECK: 0.0
+ outputBuffer[3] = originalValue;
+
+}
diff --git a/tests/language-feature/spirv-asm/too-many-operands.slang b/tests/language-feature/spirv-asm/too-many-operands.slang
index 38cd456ad..15c86d4e6 100644
--- a/tests/language-feature/spirv-asm/too-many-operands.slang
+++ b/tests/language-feature/spirv-asm/too-many-operands.slang
@@ -15,12 +15,7 @@ void foo(const int constParam)
%b
%c
%d
- %e
- // CHECK: too-many-operands.slang([[#@LINE-1]]): warning {{.*}}: too many operands for OpLoad (expected max 4), did you forget a semicolon?
- %f;
-
- %r : $$int = OpIAdd %r %r // oops, I forgot the semicolon
- OpNop
- // CHECK: too-many-operands.slang([[#@LINE-1]]): warning {{.*}}: too many operands for OpIAdd (expected max 4), did you forget a semicolon?
+ // CHECK: too-many-operands.slang([[#@LINE+1]]): warning {{.*}}: too many operands for OpLoad
+ %r : $$int = OpIAdd %r %r
};
}