[PATCH vkd3d v5 2/6] tests: Test a number of simple HLSL operations.

Matteo Bruni matteo.mystral at gmail.com
Fri Feb 11 14:06:33 CST 2022


On Fri, Feb 11, 2022 at 10:11 AM Giovanni Mascellani
<gmascellani at codeweavers.com> wrote:
>
> Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
> Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
> Signed-off-by: Francisco Casas <fcasas at 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
>
>



More information about the wine-devel mailing list