diff options
author | Dave Airlie <airlied@redhat.com> | 2014-07-23 23:54:17 +0100 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2014-07-30 19:22:25 +1000 |
commit | b2eb8197f2f28e9b0bf6f1f3d8a6e8b3b82871d4 (patch) | |
tree | 159de33b85ab417533f5d0038182bfc8642e2f9d | |
parent | 286b7d415f34df5c96a1abdd7685d8ee358cec8e (diff) |
arb_gpu_shader_fp64: add frexp/ldexp tests (v2)
These are special cases the generator can't handle,
ported from the float equivalents with DBL special cases.
v2: add const ldexp test.
Acked-by: Ilia Mirkin <imirkin@alum.mit.edu>
Signed-off-by: Dave Airlie <airlied@redhat.com>
3 files changed, 220 insertions, 0 deletions
diff --git a/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-const-ldexp-double.shader_test b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-const-ldexp-double.shader_test new file mode 100644 index 000000000..d3257be05 --- /dev/null +++ b/tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-const-ldexp-double.shader_test @@ -0,0 +1,39 @@ +[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 + +#define STATIC_ASSERT(cond) { float array[(cond) ? -1 : 1]; } + +out vec4 color; + +void main() +{ + color = vec4(0.0, 1.0, 0.0, 1.0); + + /* Compare the results after going through unpackDouble2x32() allows us + * to distinguish -0.0f from 0.0f. + */ + STATIC_ASSERT(unpackDouble2x32(-0.5lf) != + unpackDouble2x32(ldexp(-0.5lf, 0))); +} + +[vertex data] +vertex/float/2 +-1.0 -1.0 + 1.0 -1.0 + 1.0 1.0 +-1.0 1.0 + +[test] +draw arrays GL_TRIANGLE_FAN 0 4 +probe all rgba 0.0 1.0 0.0 1.0 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 000000000..601a31141 --- /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 000000000..c0e60b97b --- /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. */ + color = vec4(0.0, 0.0, 0.0, 0.0); + + /* Compare the results after going through floatBitsToInt() allows us + * 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. |