These tests cover code paths untested in DXIL, except for the last commit which is to catch any signed int resource issues.
From: Conor McCarthy cmccarthy@codeweavers.com
--- Makefile.am | 2 +- .../{max.shader_test => max-min.shader_test} | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) rename tests/hlsl/{max.shader_test => max-min.shader_test} (54%)
diff --git a/Makefile.am b/Makefile.am index 9e761ef32..84265a8e5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -137,7 +137,7 @@ vkd3d_shader_tests = \ tests/hlsl/math.shader_test \ tests/hlsl/matrix-indexing.shader_test \ tests/hlsl/matrix-semantics.shader_test \ - tests/hlsl/max.shader_test \ + tests/hlsl/max-min.shader_test \ tests/hlsl/minimum-precision.shader_test \ tests/hlsl/mul.shader_test \ tests/hlsl/multiple-rt.shader_test \ diff --git a/tests/hlsl/max.shader_test b/tests/hlsl/max-min.shader_test similarity index 54% rename from tests/hlsl/max.shader_test rename to tests/hlsl/max-min.shader_test index 09f4a882c..49b0eb987 100644 --- a/tests/hlsl/max.shader_test +++ b/tests/hlsl/max-min.shader_test @@ -52,3 +52,48 @@ float4 main() : sv_target max(a, b); return 0; } + + +[pixel shader] +uniform float2 u; + +float4 main() : sv_target +{ + return float4(min(u.x, u.y), min(2, 2.1), min(true, 2), min(-1, -2)); +} + +[test] +uniform 0 float4 0.7 -0.1 0.0 0.0 +draw quad +probe all rgba (-0.1, 2.0, 1.0, -2.0) + + +[require] +shader model >= 4.0 + +[pixel shader] +uniform uint2 u; + +uint4 main() : sv_target +{ + return uint4(max(u.x, u.y), min(true, u.y), max(1, 2), min(1, 2)); +} + +[test] +uniform 0 uint4 1 2 0 0 +draw quad +probe all rgbaui (2, 1, 2, 1) + + +[pixel shader todo] +uniform int2 u; + +int4 main() : sv_target +{ + return int4(max(u.x, u.y), min(u.x, u.y), max(-true, -2), min(-1, -2)); +} + +[test] +uniform 0 int4 -1 -2 0 0 +todo(sm<6) draw quad +probe all rgbai (-1, -2, -1, -2)
From: Conor McCarthy cmccarthy@codeweavers.com
--- tests/hlsl/uav-rwstructuredbuffer.shader_test | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+)
diff --git a/tests/hlsl/uav-rwstructuredbuffer.shader_test b/tests/hlsl/uav-rwstructuredbuffer.shader_test index 15026d06c..bcc96970e 100644 --- a/tests/hlsl/uav-rwstructuredbuffer.shader_test +++ b/tests/hlsl/uav-rwstructuredbuffer.shader_test @@ -156,3 +156,25 @@ float4 main() : sv_target1 todo(sm<6) draw quad probe uav 2 (0) rgbai (11, -12, 13, -14) probe uav 2 (1) rgbai (-15, 16, -17, 18) + +[uav 2] +stride 4 +size (buffer, 2) + +1 2 + +% Test scalar store +[pixel shader todo] +RWStructuredBuffer<uint> u : register(u2); + +float4 main() : sv_target1 +{ + u[0] = 11; + u[1] = 12; + return 0; +} + +[test] +todo(sm<6) draw quad +probe uav 2 (0) ri (11) +probe uav 2 (1) ri (12)
From: Conor McCarthy cmccarthy@codeweavers.com
--- tests/hlsl/uav-atomics.shader_test | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/tests/hlsl/uav-atomics.shader_test b/tests/hlsl/uav-atomics.shader_test index 549877eca..ae30e3184 100644 --- a/tests/hlsl/uav-atomics.shader_test +++ b/tests/hlsl/uav-atomics.shader_test @@ -3,9 +3,9 @@ shader model >= 5.0
[uav 1] format r32 uint -size (buffer, 7) +size (buffer, 8)
-0xd 5 6 0x10 4 4 7 +0xd 5 6 0x10 4 4 7 2
[compute shader todo] RWBuffer<uint> u : register(u1); @@ -15,6 +15,7 @@ uniform uint4 v; [numthreads(3, 1, 1)] void main() { + uint old; InterlockedAnd(u[0], v.x); InterlockedCompareStore(u[1], v.y, v.x); InterlockedAdd(u[2], v.x); @@ -22,6 +23,7 @@ void main() InterlockedMax(u[4], v.x); InterlockedMin(u[5], v.x); InterlockedXor(u[6], v.x); + InterlockedExchange(u[7], v.x, old); }
[test] @@ -34,6 +36,7 @@ probe uav 1 (3) rui (0x13) probe uav 1 (4) rui (4) probe uav 1 (5) rui (3) probe uav 1 (6) rui (4) +probe uav 1 (7) rui (3)
uniform 0 uint4 1 2 0 0 todo(sm<6) dispatch 2 1 1 @@ -44,6 +47,7 @@ probe uav 1 (3) rui (0x13) probe uav 1 (4) rui (4) probe uav 1 (5) rui (1) probe uav 1 (6) rui (4) +probe uav 1 (7) rui (1)
[uav 2]
From: Conor McCarthy cmccarthy@codeweavers.com
--- tests/hlsl/uav-atomics.shader_test | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)
diff --git a/tests/hlsl/uav-atomics.shader_test b/tests/hlsl/uav-atomics.shader_test index ae30e3184..e86011fd1 100644 --- a/tests/hlsl/uav-atomics.shader_test +++ b/tests/hlsl/uav-atomics.shader_test @@ -78,3 +78,41 @@ uniform 0 int4 -3 1 0 0 todo(sm<6) dispatch 1 1 1 probe uav 2 (0) ri (1) probe uav 2 (1) ri (-3) + + +[uav 1] +format r32 uint +size (2d, 8, 1) + +0xd 5 6 0x10 4 4 7 2 + +[compute shader todo] +RWTexture2D<uint> u : register(u1); + +uniform uint4 v; + + [numthreads(3, 1, 1)] +void main() +{ + uint old; + InterlockedAnd(u[uint2(0, 0)], v.x); + InterlockedCompareStore(u[uint2(1, 0)], v.y, v.x); + InterlockedAdd(u[uint2(2, 0)], v.x); + InterlockedOr(u[uint2(3, 0)], v.x); + InterlockedMax(u[uint2(4, 0)], v.x); + InterlockedMin(u[uint2(5, 0)], v.x); + InterlockedXor(u[uint2(6, 0)], v.x); + InterlockedExchange(u[uint2(7, 0)], v.x, old); +} + +[test] +uniform 0 uint4 3 5 0 0 +todo(sm<6) dispatch 1 1 1 +probe uav 1 (0) rui (1) +probe uav 1 (1) rui (3) +probe uav 1 (2) rui (15) +probe uav 1 (3) rui (0x13) +probe uav 1 (4) rui (4) +probe uav 1 (5) rui (3) +probe uav 1 (6) rui (4) +probe uav 1 (7) rui (3)
From: Conor McCarthy cmccarthy@codeweavers.com
--- tests/hlsl/uav-atomics.shader_test | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
diff --git a/tests/hlsl/uav-atomics.shader_test b/tests/hlsl/uav-atomics.shader_test index e86011fd1..c0f22dce5 100644 --- a/tests/hlsl/uav-atomics.shader_test +++ b/tests/hlsl/uav-atomics.shader_test @@ -116,3 +116,27 @@ probe uav 1 (4) rui (4) probe uav 1 (5) rui (3) probe uav 1 (6) rui (4) probe uav 1 (7) rui (3) + + +[compute shader todo] +RWTexture2D<int> u : register(u2); + +uniform int4 i; + + [numthreads(3, 1, 1)] +void main() +{ + InterlockedMax(u[uint2(0, 0)], i.x); + InterlockedMin(u[uint2(1, 0)], i.y); +} + +[test] +uniform 0 int4 1 -3 0 0 +todo(sm<6) dispatch 1 1 1 +probe uav 2 (0) ri (1) +probe uav 2 (1) ri (-3) + +uniform 0 int4 -3 1 0 0 +todo(sm<6) dispatch 1 1 1 +probe uav 2 (0) ri (1) +probe uav 2 (1) ri (-3)
This merge request was approved by Giovanni Mascellani.
Francisco Casas (@fcasas) commented about tests/hlsl/max-min.shader_test:
+draw quad +probe all rgbaui (2, 1, 2, 1)
+[pixel shader todo] +uniform int2 u;
+int4 main() : sv_target +{
- return int4(max(u.x, u.y), min(u.x, u.y), max(-true, -2), min(-1, -2));
+}
+[test] +uniform 0 int4 -1 -2 0 0 +todo(sm<6) draw quad +probe all rgbai (-1, -2, -1, -2)
Not that this is a problem of the MR, but note that we still are not testing min() with vectors and neither min() nor max() with matrices.
Francisco Casas (@fcasas) commented about tests/hlsl/uav-atomics.shader_test:
InterlockedMax(u[4], v.x); InterlockedMin(u[5], v.x); InterlockedXor(u[6], v.x);
- InterlockedExchange(u[7], v.x, old);
Can't we extend the RWBuffer to make it size 9, to store `old` in `u[8]` and check that it indeed retains the old value in `u[7]` ?
Same for the new test in the next commit.
If I am not mistaken, the commits should have the `tests:` prefix instead of the `tests/shader_runner:` prefix because they don't involve direct changes in the shader_runner.
Besides my couple of comments I think the MR is good.