On Fri, Feb 11, 2022 at 10:11 AM Giovanni Mascellani gmascellani@codeweavers.com wrote:
Signed-off-by: Giovanni Mascellani gmascellani@codeweavers.com Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Francisco Casas fcasas@codeweavers.com -- v2:
- Split to many individual tests
v5:
- Use 4294967296.0 instead of 4294967300.0 as float constant.
Makefile.am | 2 + tests/hlsl-operations.shader_test | 367 ++++++++++++++++++++++++++++++ 2 files changed, 369 insertions(+) create mode 100644 tests/hlsl-operations.shader_test
diff --git a/Makefile.am b/Makefile.am index 687b624c..491537f6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -83,6 +83,7 @@ vkd3d_shader_tests = \ tests/hlsl-nested-arrays.shader_test \ tests/hlsl-numeric-constructor-truncation.shader_test \ tests/hlsl-numeric-types.shader_test \
tests/hlsl-operations.shader_test \ tests/hlsl-return-implicit-conversion.shader_test \ tests/hlsl-return-void.shader_test \ tests/hlsl-shape.shader_test \
@@ -324,6 +325,7 @@ XFAIL_TESTS = \ tests/hlsl-nested-arrays.shader_test \ tests/hlsl-numeric-constructor-truncation.shader_test \ tests/hlsl-numeric-types.shader_test \
tests/hlsl-operations.shader_test \ tests/hlsl-return-implicit-conversion.shader_test \ tests/hlsl-return-void.shader_test \ tests/hlsl-shape.shader_test \
diff --git a/tests/hlsl-operations.shader_test b/tests/hlsl-operations.shader_test new file mode 100644 index 00000000..09846b18 --- /dev/null +++ b/tests/hlsl-operations.shader_test @@ -0,0 +1,367 @@
+[pixel shader] +float4 main() : SV_TARGET +{
- float x = 5.0;
- float y = 15.0;
- return float4(x + y, x - y, x * y, x / y);
+}
+[test] +draw quad +probe all rgba (20.0, -10.0, 75.0, 0.33333333)
+[pixel shader] +float4 main() : SV_TARGET +{
- float x = 5.0;
- float y = 15.0;
- return float4(x % y, +x, -x, y / x);
+}
+[test] +draw quad +probe all rgba (5.0, 5.0, -5.0, 3.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- float x = 5.0;
- float y = 15.0;
- return float4(x == y, x != y, x < y, x <= y);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- float x = 5.0;
- float y = 15.0;
- float zero = 0.0;
- return float4(x > y, x >= y, !x, !zero);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- float zero = 0.0;
- float one = 1.0;
- return float4(zero && zero, zero && one, one && zero, one && one);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- float zero = 0.0;
- float one = 1.0;
- return float4(zero || zero, zero || one, one || zero, one || one);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int x = 5;
- int y = 15;
- return float4(x + y, x - y, x * y, x / y);
+}
+[test] +draw quad +probe all rgba (20.0, -10.0, 75.0, 0.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int x = 5;
- int y = 15;
- return float4(x % y, +x, -x, y / x);
+}
+[test] +draw quad +probe all rgba (5.0, 5.0, -5.0, 3.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int x = 5;
- int y = 15;
- return float4(x == y, x != y, x < y, x <= y);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int x = 5;
- int y = 15;
- int zero = 0;
- return float4(x > y, x >= y, !x, !zero);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int x = 5;
- int y = 15;
- return float4(x >> y, y >> x, x << y, y << x);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 163840.0, 480.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int x = 5;
- int y = 15;
- return float4(x & y, x | y, x ^ y, ~x);
+}
+[test] +draw quad +probe all rgba (5.0, 15.0, 10.0, -6.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int zero = 0;
- int one = 1;
- return float4(zero && zero, zero && one, one && zero, one && one);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int zero = 0;
- int one = 1;
- return float4(zero || zero, zero || one, one || zero, one || one);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int zero = 0;
- int one = 1;
- return float4(zero & zero, zero & one, one & zero, one & one);
+}
I think it would be preferable to test some slightly more interesting values rather than just 0 and 1 here and in the bitwise OR, XOR test below (and again for the uint cases). Actually it's probably worth using different values for the logical AND / OR tests too. The current values have the unfortunate characteristic that the test would work if e.g. we emitted bitwise OR in place of logical OR or the other way around. Not that there is any immediate danger of that, just mentioning some ways to improve these tests further.
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int zero = 0;
- int one = 1;
- return float4(zero | zero, zero | one, one | zero, one | one);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- int zero = 0;
- int one = 1;
- return float4(zero ^ zero, zero ^ one, one ^ zero, one ^ one);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 0.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint x = 5;
- uint y = 15;
- return float4(x + y, x - y, x * y, x / y);
+}
+[test] +draw quad +probe all rgba (20.0, 4294967296.0, 75.0, 0.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint x = 5;
- uint y = 15;
- return float4(x % y, +x, -x, y / x);
+}
+[test] +draw quad +probe all rgba (5.0, 5.0, 4294967296.0, 3.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint x = 5;
- uint y = 15;
- return float4(x == y, x != y, x < y, x <= y);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint x = 5;
- uint y = 15;
- uint zero = 0;
- return float4(x > y, x >= y, !x, !zero);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint x = 5;
- uint y = 15;
- return float4(x >> y, y >> x, x << y, y << x);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 163840.0, 480.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint x = 5;
- uint y = 15;
- return float4(x & y, x | y, x ^ y, ~x);
+}
+[test] +draw quad +probe all rgba (5.0, 15.0, 10.0, 4294967296.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint zero = 0;
- uint one = 1;
- return float4(zero && zero, zero && one, one && zero, one && one);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint zero = 0;
- uint one = 1;
- return float4(zero || zero, zero || one, one || zero, one || one);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint zero = 0;
- uint one = 1;
- return float4(zero & zero, zero & one, one & zero, one & one);
+}
+[test] +draw quad +probe all rgba (0.0, 0.0, 0.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint zero = 0;
- uint one = 1;
- return float4(zero | zero, zero | one, one | zero, one | one);
+}
+[test] +draw quad +probe all rgba (0.0, 1.0, 1.0, 1.0)
+[pixel shader] +float4 main() : SV_TARGET +{
- uint zero = 0;
- uint one = 1;
- return float4(zero ^ zero, zero ^ one, one ^ zero, one ^ one);
+}
+[test] +draw quad
+probe all rgba (0.0, 1.0, 1.0, 0.0)
2.34.1