These tests cover code paths untested in DXIL, except for the last commit which is to catch any signed int resource issues.
-- v3: tests/hlsl: Add tests for texture UAV signed atomics. tests/hlsl: Add tests for texture UAV atomics. tests/hlsl: Add a test for UAV InterlockedExchange(). tests/hlsl: Add a test for a structured UAV scalar store. tests/hlsl: Add tests for min() and integer max().
From: Conor McCarthy cmccarthy@codeweavers.com
--- Makefile.am | 2 +- tests/hlsl/max-min.shader_test | 115 +++++++++++++++++++++++++++++++++ tests/hlsl/max.shader_test | 54 ---------------- 3 files changed, 116 insertions(+), 55 deletions(-) create mode 100644 tests/hlsl/max-min.shader_test delete mode 100644 tests/hlsl/max.shader_test
diff --git a/Makefile.am b/Makefile.am index f823cbc85..d49187000 100644 --- a/Makefile.am +++ b/Makefile.am @@ -147,7 +147,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-min.shader_test b/tests/hlsl/max-min.shader_test new file mode 100644 index 000000000..fd228a54b --- /dev/null +++ b/tests/hlsl/max-min.shader_test @@ -0,0 +1,115 @@ +[pixel shader] +uniform float2 u; + +float4 main() : sv_target +{ + return float4(max(u.x, u.y), max(2, 2.1), max(true, 2), max(-1, -1)); +} + +[test] +uniform 0 float4 0.7 -0.1 0.0 0.0 +todo(glsl) draw quad +probe all rgba (0.7, 2.1, 2.0, -1.0) + + +[pixel shader] +uniform float4 u; + +float4 main() : sv_target +{ + float3 a = float3(-0.1, 0.2, 0.3); + + return float4(max(u.xy, u.zw), max(a, u.xy)); +} + +[test] +uniform 0 float4 0.7 -0.1 0.4 0.8 +todo(glsl) draw quad +probe all rgba (0.7, 0.8, 0.7, 0.2) + + +[pixel shader] +float4 main() : sv_target +{ + float2x3 a = {1, 2, 3, 4, 5, 6}; + float3x2 b = {6, 5, 4, 3, 2, 1}; + + float2x2 r = max(a, b); + return float4(r); +} + +[test] +todo(glsl) draw quad +probe all rgba (6.0, 5.0, 4.0, 5.0) + + +[pixel shader fail] +float4 main() : sv_target +{ + float2x2 a = {1, 2, 3, 4}; + float4 b = {4, 3, 2, 1}; + + 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 +todo(glsl) draw quad +probe all rgba (-0.1, 2.0, 1.0, -2.0) + + +[pixel shader] +uniform float4 u; + +float4 main() : sv_target +{ + float3 a = float3(-0.2, 0.2, 0.3); + + return float4(min(u.xy, u.zw), min(a, u.xy)); +} + +[test] +uniform 0 float4 0.7 -0.1 0.4 0.8 +todo(glsl) draw quad +probe all rgba (0.4, -0.1, -0.2, -0.1) + + +[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 +todo(glsl) 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) diff --git a/tests/hlsl/max.shader_test b/tests/hlsl/max.shader_test deleted file mode 100644 index 67aa69046..000000000 --- a/tests/hlsl/max.shader_test +++ /dev/null @@ -1,54 +0,0 @@ -[pixel shader] -uniform float2 u; - -float4 main() : sv_target -{ - return float4(max(u.x, u.y), max(2, 2.1), max(true, 2), max(-1, -1)); -} - -[test] -uniform 0 float4 0.7 -0.1 0.0 0.0 -todo(glsl) draw quad -probe all rgba (0.7, 2.1, 2.0, -1.0) - - -[pixel shader] -uniform float4 u; - -float4 main() : sv_target -{ - float3 a = float3(-0.1, 0.2, 0.3); - - return float4(max(u.xy, u.zw), max(a, u.xy)); -} - -[test] -uniform 0 float4 0.7 -0.1 0.4 0.8 -todo(glsl) draw quad -probe all rgba (0.7, 0.8, 0.7, 0.2) - - -[pixel shader] -float4 main() : sv_target -{ - float2x3 a = {1, 2, 3, 4, 5, 6}; - float3x2 b = {6, 5, 4, 3, 2, 1}; - - float2x2 r = max(a, b); - return float4(r); -} - -[test] -todo(glsl) draw quad -probe all rgba (6.0, 5.0, 4.0, 5.0) - - -[pixel shader fail] -float4 main() : sv_target -{ - float2x2 a = {1, 2, 3, 4}; - float4 b = {4, 3, 2, 1}; - - max(a, b); - return 0; -}
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 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/tests/hlsl/uav-atomics.shader_test b/tests/hlsl/uav-atomics.shader_test index 549877eca..1acb1adda 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, 9)
-0xd 5 6 0x10 4 4 7 +0xd 5 6 0x10 4 4 7 2 0
[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,8 @@ void main() InterlockedMax(u[4], v.x); InterlockedMin(u[5], v.x); InterlockedXor(u[6], v.x); + InterlockedExchange(u[7], v.x, old); + InterlockedAdd(u[8], old == 2); }
[test] @@ -34,6 +37,8 @@ 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) +probe uav 1 (8) rui (1)
uniform 0 uint4 1 2 0 0 todo(sm<6) dispatch 2 1 1 @@ -44,6 +49,8 @@ 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) +probe uav 1 (8) 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 1acb1adda..31477fcc8 100644 --- a/tests/hlsl/uav-atomics.shader_test +++ b/tests/hlsl/uav-atomics.shader_test @@ -81,3 +81,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 31477fcc8..f34cb80f1 100644 --- a/tests/hlsl/uav-atomics.shader_test +++ b/tests/hlsl/uav-atomics.shader_test @@ -119,3 +119,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)
Added vector `min()` but will leave the matrix tests for later.