[Piglit] [PATCH] arb_gpu_shader_fp64: add glsl algebraic tests

Ilia Mirkin imirkin at alum.mit.edu
Fri Feb 13 06:17:29 PST 2015


On Fri, Feb 13, 2015 at 7:32 AM, Tapani Pälli <tapani.palli at intel.com> wrote:
> add tests for add, csel, div, mul, neg operations
>
> v2: correct alpha values (Chris Forbes),
>     + changes to use distance and tolerance in the tests and
>     making sure that all calculation and comparison happens in doubles
>
> All tests pass on Nvidia GeForce 660 (binary driver version 331.38)
>
> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
> ---
>  .../glsl-algebraic-add-double.shader_test          | 29 ++++++++++++++++++++++
>  .../glsl-algebraic-csel-double.shader_test         | 20 +++++++++++++++
>  .../glsl-algebraic-div-double.shader_test          | 29 ++++++++++++++++++++++
>  .../glsl-algebraic-mul-double.shader_test          | 29 ++++++++++++++++++++++
>  .../glsl-algebraic-neg-double.shader_test          | 20 +++++++++++++++
>  .../glsl-algebraic-sub-double.shader_test          | 29 ++++++++++++++++++++++
>  6 files changed, 156 insertions(+)
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-add-double.shader_test
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-csel-double.shader_test
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-div-double.shader_test
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-mul-double.shader_test
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-neg-double.shader_test
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-sub-double.shader_test
>
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-add-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-add-double.shader_test
> new file mode 100644
> index 0000000..19d3af4
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-add-double.shader_test
> @@ -0,0 +1,29 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +uniform dvec4 a;
> +uniform dvec4 b;
> +uniform dvec4 expected;
> +const double tolerance = 1.0000000000000002e-05;

That should probably be LF.

> +void main()
> +{
> +       dvec4 result = dvec4(a + b);

Why the dvec4? Also, what does this test add that the existing
generated tests don't have? (e.g. fs-op-add-dvec4-dvec4)

> +
> +       if (distance(expected, result) < tolerance)
> +               gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
> +       else
> +               gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
> +}
> +
> +[test]
> +uniform dvec4 a 0.2 0.8 0.1 0.0
> +uniform dvec4 b 0.3 0.2 0.7 1.0
> +uniform dvec4 expected 0.5 1.0 0.8 1.0
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 1.0 0.0 1.0
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-csel-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-csel-double.shader_test
> new file mode 100644
> index 0000000..e8bf9f8
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-csel-double.shader_test
> @@ -0,0 +1,20 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +void main()
> +{
> +       const double small = 1.0lf;
> +       const double big = 2.0lf;
> +       double val = (big > small) ? 1.0lf : 0.0lf;
> +       gl_FragColor = vec4(val, 0.0, val, 1.0);
> +}
> +
> +[test]
> +draw rect -1 -1 2 2
> +probe all rgb 1.0 0 1.0

Usually we do green for success... how about

vec4(0, val, 0, 1)

> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-div-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-div-double.shader_test
> new file mode 100644
> index 0000000..df27a8c
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-div-double.shader_test
> @@ -0,0 +1,29 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +uniform dvec4 a;
> +uniform dvec4 b;
> +uniform dvec4 expected;
> +const double tolerance = 1.0000000000000002e-05;

lf

> +void main()
> +{
> +       dvec4 result = dvec4(a / b);

Why dvec? Also same question about this vs fs-op-div-dvec4-dvec4.

> +
> +       if (distance(expected, result) < tolerance)
> +               gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
> +       else
> +               gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
> +}
> +
> +[test]
> +uniform dvec4 a 1.0 0.6 1.0 1.0
> +uniform dvec4 b 2.0 3.0 4.0 1.0
> +uniform dvec4 expected 0.5 0.2 0.25 1.0
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 1.0 0.0 1.0
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-mul-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-mul-double.shader_test
> new file mode 100644
> index 0000000..d425670
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-mul-double.shader_test
> @@ -0,0 +1,29 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +uniform dvec4 a;
> +uniform dvec4 b;
> +uniform dvec4 expected;
> +const double tolerance = 1.0000000000000002e-05;
> +void main()
> +{
> +       dvec4 result = dvec4(a * b);

fs-op-mult-dvec4-dvec4?

> +
> +       if (distance(expected, result) < tolerance)
> +               gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
> +       else
> +               gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
> +}
> +
> +[test]
> +uniform dvec4 a 2.0 1.0 1.0 1.0
> +uniform dvec4 b 0.5 0.2 0.7 1.0
> +uniform dvec4 expected 1.0 0.2 0.7 1.0
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 1.0 0.0 1.0
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-neg-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-neg-double.shader_test
> new file mode 100644
> index 0000000..3dc6c13
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-neg-double.shader_test
> @@ -0,0 +1,20 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +uniform vec4 color;
> +void main()
> +{
> +       dvec4 dcolor = color;

Make more sense to just make color a dvec4... but I guess this works either way.

> +       gl_FragColor = vec4(-dcolor);
> +}
> +
> +[test]
> +uniform vec4 color 1.0 -1.0 0.0 0.0
> +draw rect -1 -1 2 2
> +probe rgb 1 1 0.0 1.0 0.0
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-sub-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-sub-double.shader_test
> new file mode 100644
> index 0000000..e9c5ffb
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/glsl-algebraic-sub-double.shader_test
> @@ -0,0 +1,29 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader passthrough]
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +uniform dvec4 a;
> +uniform dvec4 b;
> +uniform dvec4 expected;
> +const double tolerance = 1.0000000000000002e-05;
> +void main()
> +{
> +       dvec4 result = dvec4(a - b);

fs-op-sub-dvec4-dvec4

> +
> +       if (distance(expected, result) < tolerance)
> +               gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
> +       else
> +               gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
> +}
> +
> +[test]
> +uniform dvec4 a 0.3 0.8 0.9 1.0
> +uniform dvec4 b 0.2 0.2 0.1 0.0
> +uniform dvec4 expected 0.1 0.6 0.8 1.0
> +draw rect -1 -1 2 2
> +probe all rgba 0.0 1.0 0.0 1.0
> --
> 2.1.0
>


More information about the Piglit mailing list