From: Conor McCarthy cmccarthy@codeweavers.com
--- Makefile.am | 1 + tests/hlsl/uav-atomics.shader_test | 76 ++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 tests/hlsl/uav-atomics.shader_test
diff --git a/Makefile.am b/Makefile.am index d9db8eec3..5dc11e9c6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -196,6 +196,7 @@ vkd3d_shader_tests = \ tests/hlsl/trigonometry.shader_test \ tests/hlsl/trunc.shader_test \ tests/hlsl/type-names.shader_test \ + tests/hlsl/uav-atomics.shader_test \ tests/hlsl/uav-load.shader_test \ tests/hlsl/uav-out-param.shader_test \ tests/hlsl/uav-rwbuffer.shader_test \ diff --git a/tests/hlsl/uav-atomics.shader_test b/tests/hlsl/uav-atomics.shader_test new file mode 100644 index 000000000..a68420d40 --- /dev/null +++ b/tests/hlsl/uav-atomics.shader_test @@ -0,0 +1,76 @@ +[require] +shader model >= 5.0 + +[buffer uav 1] +format r32 uint +size (7, 1) + +0xd 5 6 0x10 4 4 7 + +[compute shader todo] +RWBuffer<uint> u : register(u1); + +uniform uint4 v; + + [numthreads(3, 1, 1)] +void main() +{ + InterlockedAnd(u[0], v.x); + InterlockedCompareStore(u[1], v.y, v.x); + InterlockedAdd(u[2], v.x); + InterlockedOr(u[3], v.x); + InterlockedMax(u[4], v.x); + InterlockedMin(u[5], v.x); + InterlockedXor(u[6], v.x); +} + +[test] +uniform 0 uint4 3 5 0 0 +todo dispatch 1 1 1 +probe buffer uav 1 (0, 0) rui (1) +probe buffer uav 1 (1, 0) rui (3) +probe buffer uav 1 (2, 0) rui (15) +probe buffer uav 1 (3, 0) rui (0x13) +probe buffer uav 1 (4, 0) rui (4) +probe buffer uav 1 (5, 0) rui (3) +probe buffer uav 1 (6, 0) rui (4) + +uniform 0 uint4 1 2 0 0 +todo dispatch 2 1 1 +probe buffer uav 1 (0, 0) rui (1) +probe buffer uav 1 (1, 0) rui (3) +probe buffer uav 1 (2, 0) rui (21) +probe buffer uav 1 (3, 0) rui (0x13) +probe buffer uav 1 (4, 0) rui (4) +probe buffer uav 1 (5, 0) rui (1) +probe buffer uav 1 (6, 0) rui (4) + + +[buffer uav 2] +format r32 sint +size (2, 1) + +-3 1 + +[compute shader todo] +RWBuffer<int> u : register(u2); + +uniform int4 i; + + [numthreads(3, 1, 1)] +void main() +{ + InterlockedMax(u[0], i.x); + InterlockedMin(u[1], i.y); +} + +[test] +uniform 0 int4 1 -3 0 0 +todo dispatch 1 1 1 +probe buffer uav 2 (0, 0) ri (1) +probe buffer uav 2 (1, 0) ri (-3) + +uniform 0 int4 -3 1 0 0 +todo dispatch 1 1 1 +probe buffer uav 2 (0, 0) ri (1) +probe buffer uav 2 (1, 0) ri (-3)