summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-07-23 23:54:17 +0100
committerDave Airlie <airlied@gmail.com>2014-07-30 19:22:25 +1000
commitb2eb8197f2f28e9b0bf6f1f3d8a6e8b3b82871d4 (patch)
tree159de33b85ab417533f5d0038182bfc8642e2f9d
parent286b7d415f34df5c96a1abdd7685d8ee358cec8e (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>
-rw-r--r--tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-const-ldexp-double.shader_test39
-rw-r--r--tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4.shader_test72
-rw-r--r--tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-ldexp-dvec4.shader_test109
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.