[Piglit] [PATCH 4/6] arb_gpu_shader_fp64: add frexp/ldexp tests

Ilia Mirkin imirkin at alum.mit.edu
Wed Jul 23 16:07:04 PDT 2014


On Wed, Jul 23, 2014 at 6:56 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> These are special cases the generator can't handle,
> ported from the float equivalents with DBL special cases.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  .../built-in-functions/fs-frexp-dvec4.shader_test  |  72 ++++++++++++++
>  .../built-in-functions/fs-ldexp-dvec4.shader_test  | 109 +++++++++++++++++++++
>  2 files changed, 181 insertions(+)
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4.shader_test
>  create mode 100644 tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test
>
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4.shader_test
> new file mode 100644
> index 0000000..601a311
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4.shader_test
> @@ -0,0 +1,72 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader]
> +in vec4 vertex;
> +
> +void main() {
> +       gl_Position = vertex;
> +}
> +
> +[fragment shader]
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +
> +out vec4 color;
> +
> +uniform dvec4 given_doub;
> +uniform dvec4 expected_mantissa;
> +uniform ivec4 expected_exponent;
> +
> +void main()
> +{
> +       /* Green if both pass. */
> +       color = vec4(0.0, 1.0, 0.0, 1.0);
> +
> +       ivec4 exponent;
> +       dvec4 mantissa;
> +
> +       mantissa = frexp(given_doub, exponent);
> +
> +       if (mantissa != expected_mantissa) {
> +               color.r = 1.0;
> +       }
> +
> +       if (exponent != expected_exponent) {
> +               color.b = 1.0;
> +       }
> +}
> +
> +[vertex data]
> +vertex/float/2
> +-1.0 -1.0
> + 1.0 -1.0
> + 1.0  1.0
> +-1.0  1.0
> +
> +[test]
> +uniform dvec4 given_doub 0.0 -0.0 0.5 -0.5
> +uniform dvec4 expected_mantissa 0.0 -0.0 0.5 -0.5
> +uniform ivec4 expected_exponent 0 0 0 0
> +#draw arrays GL_TRIANGLE_FAN 0 4
> +#probe rgba 0 0 0.0 1.0 0.0 1.0
> +
> +uniform dvec4 given_doub 0.49 1.0 25.0 100
> +uniform dvec4 expected_mantissa 0.98 0.5 0.78125 0.78125
> +uniform ivec4 expected_exponent -1 1 5 7
> +#draw arrays GL_TRIANGLE_FAN 0 4
> +#probe rgba 1 0 0.0 1.0 0.0 1.0
> +
> +# Test FLT_MIN/MAX in doubles
> +uniform dvec4 given_doub 1.1754943508222875e-38 -1.1754943508222875e-38 3.4028234699999998e+38 -3.4028234699999998e+38
> +uniform dvec4 expected_mantissa 0.5 -0.5 0.99999994145762339 -0.99999994145762339
> +uniform ivec4 expected_exponent -125 -125 128 128
> +#draw arrays GL_TRIANGLE_FAN 0 4
> +#probe rgba 2 0 0.0 1.0 0.0 1.0
> +
> +# Test DBL_MIN/MAX
> +uniform dvec4 given_doub 2.2250738585072014e-308 -2.2250738585072014e-308 1.7976931348623157e+308 -1.7976931348623157e+308
> +uniform dvec4 expected_mantissa 0.5 -0.5 0.99999999999999989 -0.99999999999999989
> +uniform ivec4 expected_exponent -1021 -1021 1024 1024
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 3 0 0.0 1.0 0.0 1.0
> \ No newline at end of file
> diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test
> new file mode 100644
> index 0000000..c0e60b9
> --- /dev/null
> +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test
> @@ -0,0 +1,109 @@
> +[require]
> +GLSL >= 1.50
> +GL_ARB_gpu_shader_fp64
> +
> +[vertex shader]
> +#version 130
> +in vec4 vertex;
> +
> +void main() {
> +       gl_Position = vertex;
> +}
> +
> +[fragment shader]
> +#version 150
> +#extension GL_ARB_gpu_shader_fp64 : enable
> +
> +out vec4 color;
> +
> +uniform dvec4 expected_double;
> +uniform dvec4 given_double;
> +uniform ivec4 given_exponent;
> +
> +void main()
> +{
> +       int i;
> +       dvec4 result;
> +       /* Green if both pass. */

And by "green" you of course mean "black", and by "both" you mean "all"?

> +       color = vec4(0.0, 0.0, 0.0, 0.0);
> +
> +       /* Compare the results after going through floatBitsToInt() allows us

unpackDouble2x32

> +        * to distinguish -0.0f from 0.0f.
> +        */
> +       result = ldexp(given_double, given_exponent);
> +       for (i = 0; i < 4; i++) {
> +               if (unpackDouble2x32(expected_double[i]) !=
> +                   unpackDouble2x32(result[i])) {
> +                       color[i] = 1.0;
> +               }
> +       }
> +}
> +
> +[vertex data]
> +vertex/float/2
> +-1.0 -1.0
> + 1.0 -1.0
> + 1.0  1.0
> +-1.0  1.0
> +
> +[test]
> +# Basic tests with exponent = 0.
> +uniform dvec4 expected_double 0.0 -0.0 0.5 -0.5
> +uniform dvec4 given_double 0.0 -0.0 0.5 -0.5
> +uniform ivec4 given_exponent 0 0 0 0
> +#draw arrays GL_TRIANGLE_FAN 0 4
> +#probe rgba 0 0 0.0 0.0 0.0 0.0
> +
> +# Basic tests.
> +uniform dvec4 expected_double 0.49 1.0 25.0 100
> +uniform dvec4 given_double 0.98 0.5 0.78125 0.78125
> +uniform ivec4 given_exponent -1 1 5 7
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 1 0 0.0 0.0 0.0 0.0
> +
> +# Test generating FLT_MIN (1.1754944e-38) and FLT_MAX (3.40282347e38).
> +uniform dvec4 expected_double 1.1754943508222875e-38 -1.1754943508222875e-38 3.4028234699999998e+38 -3.4028234699999998e+38
> +uniform dvec4 given_double 0.5 -0.5 0.99999994145762339 -0.99999994145762339
> +uniform ivec4 given_exponent -125 -125 128 128
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 2 0 0.0 0.0 0.0 0.0
> +
> +# Test FLT_MIN (1.1754944e-38) and FLT_MAX (3.40282347e38) as inputs.
> +uniform dvec4 expected_double 0.5 -0.5 0.99999994145762339 -0.99999994145762339
> +uniform dvec4 given_double 1.1754943508222875e-38 -1.1754943508222875e-38 3.4028234699999998e+38 -3.4028234699999998e+38
> +uniform ivec4 given_exponent 125 125 -128 -128
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 3 0 0.0 0.0 0.0 0.0
> +
> +# Test DBL_MIN (2.2250738585072014E-308) and DBL_MAX (1.7976931348623157E+308)
> +uniform dvec4 expected_double 2.2250738585072014e-308 -2.2250738585072014e-308 1.7976931348623157e+308 -1.7976931348623157e+308
> +uniform dvec4 given_double 0.5 -0.5 0.99999999999999989 -0.99999999999999989
> +uniform ivec4 given_exponent -1021 -1021 1024 1024
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 4 0 0.0 0.0 0.0 0.0
> +
> +# Test DBL_MIN (2.2250738585072014E-308) and DBL_MAX (1.7976931348623157E+308) as inputs.
> +uniform dvec4 expected_double 0.5 -0.5 0.99999999999999989 -0.99999999999999989
> +uniform dvec4 given_double 2.2250738585072014E-308 -2.2250738585072014E-308 1.7976931348623157E+308 -1.7976931348623157E+308
> +uniform ivec4 given_exponent 1021 1021 -1024 -1024
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 5 0 0.0 0.0 0.0 0.0
> +
> +# Test underflow generates zero with sign of x.
> +uniform dvec4 expected_double 0.0 -0.0 0.0 -0.0
> +uniform dvec4 given_double 0.0 -0.0 0.5 -0.5
> +uniform ivec4 given_exponent -1028 -1028 -1028 -1028
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 6 0 0.0 0.0 0.0 0.0
> +
> +uniform dvec4 expected_double 0.0 -0.0 0.0 -0.0
> +uniform dvec4 given_double 2.2250738585072014E-308 -2.2250738585072014E-308 1.7976931348623157E+308 -1.7976931348623157E+308
> +# For the FLT_MAX case -255 comes from (-127 + -127 + -1).
> +#   ldexp(FLT_MAX, -127)           = 0x1.fffffep+0 (1.999999881)
> +#   ldexp(FLT_MAX, -127 - 127)     = 0x1p-126 (epsilon above FLT_MIN)
> +#   ldexp(FLT_MAX, -127 - 127 - 1) = 0.0
> +uniform ivec4 given_exponent -1 -1 -2048 -2048
> +draw arrays GL_TRIANGLE_FAN 0 4
> +probe rgba 7 0 0.0 0.0 0.0 0.0
> +
> +# Overflow is undefined according to the GLSL spec, so nothing to test.
> --
> 1.8.5.3
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list