[Piglit] [PATCH v5 3/3] arb_shader_precision: add manually written tests for a*b+c and fma()

Micah Fedke micah.fedke at collabora.co.uk
Fri Apr 3 14:00:15 PDT 2015


---
 .../fs-fma-float-float-float.shader_test           | 56 +++++++++++++++
 .../fs-manual-fma-float-float-float.shader_test    | 56 +++++++++++++++
 .../gs-fma-float-float-float.shader_test           | 80 ++++++++++++++++++++++
 .../gs-manual-fma-float-float-float.shader_test    | 80 ++++++++++++++++++++++
 .../vs-fma-float-float-float.shader_test           | 65 ++++++++++++++++++
 .../vs-manual-fma-float-float-float.shader_test    | 65 ++++++++++++++++++
 6 files changed, 402 insertions(+)
 create mode 100644 tests/spec/arb_shader_precision/fs-fma-float-float-float.shader_test
 create mode 100644 tests/spec/arb_shader_precision/fs-manual-fma-float-float-float.shader_test
 create mode 100644 tests/spec/arb_shader_precision/gs-fma-float-float-float.shader_test
 create mode 100644 tests/spec/arb_shader_precision/gs-manual-fma-float-float-float.shader_test
 create mode 100644 tests/spec/arb_shader_precision/vs-fma-float-float-float.shader_test
 create mode 100644 tests/spec/arb_shader_precision/vs-manual-fma-float-float-float.shader_test

diff --git a/tests/spec/arb_shader_precision/fs-fma-float-float-float.shader_test b/tests/spec/arb_shader_precision/fs-fma-float-float-float.shader_test
new file mode 100644
index 0000000..f8b186a
--- /dev/null
+++ b/tests/spec/arb_shader_precision/fs-fma-float-float-float.shader_test
@@ -0,0 +1,56 @@
+
+[require]
+GLSL >= 4.00
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_shader_precision : require
+uniform float arg0;
+uniform float arg1;
+uniform float arg2;
+uniform float expected_a;
+uniform float expected_b;
+
+void main()
+{
+  float result = fma(arg0, arg1, arg2);
+  gl_FragColor = result == expected_a || result == expected_b ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform float arg0  -2.99999993e-02
+uniform float arg1  -8.50000024e-01
+uniform float arg2  -2.54999995e-02
+uniform float expected_a  0.00000000e+00
+uniform float expected_b  6.22123464e-10
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.66999996e+00
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.00000036e+00
+uniform float expected_a  2.10220027e+00
+uniform float expected_b  2.10220051e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 1 0 0.0 1.0 0.0 1.0
+uniform float arg0  -2.99999993e-02
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.41949999e+00
+uniform float expected_a  1.39970005e+00
+uniform float expected_b  1.39970005e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 2 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.87000000e+00
+uniform float arg1  -2.99999993e-02
+uniform float arg2  1.56979990e+00
+uniform float expected_a  1.51369989e+00
+uniform float expected_b  1.51369989e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 3 0 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_shader_precision/fs-manual-fma-float-float-float.shader_test b/tests/spec/arb_shader_precision/fs-manual-fma-float-float-float.shader_test
new file mode 100644
index 0000000..e8ade84
--- /dev/null
+++ b/tests/spec/arb_shader_precision/fs-manual-fma-float-float-float.shader_test
@@ -0,0 +1,56 @@
+
+[require]
+GLSL >= 4.00
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_shader_precision : require
+uniform float arg0;
+uniform float arg1;
+uniform float arg2;
+uniform float expected_a;
+uniform float expected_b;
+
+void main()
+{
+  float result = arg0 * arg1 + arg2;
+  gl_FragColor = result == expected_a || result == expected_b ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform float arg0  -2.99999993e-02
+uniform float arg1  -8.50000024e-01
+uniform float arg2  -2.54999995e-02
+uniform float expected_a  0.00000000e+00
+uniform float expected_b  6.22123464e-10
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.66999996e+00
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.00000036e+00
+uniform float expected_a  2.10220027e+00
+uniform float expected_b  2.10220051e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 1 0 0.0 1.0 0.0 1.0
+uniform float arg0  -2.99999993e-02
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.41949999e+00
+uniform float expected_a  1.39970005e+00
+uniform float expected_b  1.39970005e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 2 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.87000000e+00
+uniform float arg1  -2.99999993e-02
+uniform float arg2  1.56979990e+00
+uniform float expected_a  1.51369989e+00
+uniform float expected_b  1.51369989e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 3 0 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_shader_precision/gs-fma-float-float-float.shader_test b/tests/spec/arb_shader_precision/gs-fma-float-float-float.shader_test
new file mode 100644
index 0000000..12fcb53
--- /dev/null
+++ b/tests/spec/arb_shader_precision/gs-fma-float-float-float.shader_test
@@ -0,0 +1,80 @@
+
+[require]
+GLSL >= 4.00
+
+[vertex shader]
+in vec4 piglit_vertex;
+flat out vec4 vertex_to_gs;
+void main()
+{
+     vertex_to_gs = piglit_vertex;
+}
+
+[geometry shader]
+#extension GL_ARB_shader_precision : require
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+flat in vec4 vertex_to_gs[3];
+flat out vec4 color;
+uniform float arg0;
+uniform float arg1;
+uniform float arg2;
+uniform float expected_a;
+uniform float expected_b;
+
+void main()
+{
+  vec4 tmp_color;
+  float result = fma(arg0, arg1, arg2);
+  tmp_color = result == expected_a || result == expected_b ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+  for (int i = 0; i < 3; i++) {
+    gl_Position = vertex_to_gs[i];
+    color = tmp_color;
+    EmitVertex();
+  }
+}
+
+[fragment shader]
+flat in vec4 color;
+
+void main()
+{
+  gl_FragColor = color;
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform float arg0  -2.99999993e-02
+uniform float arg1  -8.50000024e-01
+uniform float arg2  -2.54999995e-02
+uniform float expected_a  0.00000000e+00
+uniform float expected_b  6.22123464e-10
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.66999996e+00
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.00000036e+00
+uniform float expected_a  2.10220027e+00
+uniform float expected_b  2.10220051e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 1 0 0.0 1.0 0.0 1.0
+uniform float arg0  -2.99999993e-02
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.41949999e+00
+uniform float expected_a  1.39970005e+00
+uniform float expected_b  1.39970005e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 2 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.87000000e+00
+uniform float arg1  -2.99999993e-02
+uniform float arg2  1.56979990e+00
+uniform float expected_a  1.51369989e+00
+uniform float expected_b  1.51369989e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 3 0 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_shader_precision/gs-manual-fma-float-float-float.shader_test b/tests/spec/arb_shader_precision/gs-manual-fma-float-float-float.shader_test
new file mode 100644
index 0000000..eeebfc7
--- /dev/null
+++ b/tests/spec/arb_shader_precision/gs-manual-fma-float-float-float.shader_test
@@ -0,0 +1,80 @@
+
+[require]
+GLSL >= 4.00
+
+[vertex shader]
+in vec4 piglit_vertex;
+flat out vec4 vertex_to_gs;
+void main()
+{
+     vertex_to_gs = piglit_vertex;
+}
+
+[geometry shader]
+#extension GL_ARB_shader_precision : require
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+flat in vec4 vertex_to_gs[3];
+flat out vec4 color;
+uniform float arg0;
+uniform float arg1;
+uniform float arg2;
+uniform float expected_a;
+uniform float expected_b;
+
+void main()
+{
+  vec4 tmp_color;
+  float result = arg0 * arg1 + arg2;
+  tmp_color = result == expected_a || result == expected_b ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+  for (int i = 0; i < 3; i++) {
+    gl_Position = vertex_to_gs[i];
+    color = tmp_color;
+    EmitVertex();
+  }
+}
+
+[fragment shader]
+flat in vec4 color;
+
+void main()
+{
+  gl_FragColor = color;
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform float arg0  -2.99999993e-02
+uniform float arg1  -8.50000024e-01
+uniform float arg2  -2.54999995e-02
+uniform float expected_a  0.00000000e+00
+uniform float expected_b  6.22123464e-10
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.66999996e+00
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.00000036e+00
+uniform float expected_a  2.10220027e+00
+uniform float expected_b  2.10220051e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 1 0 0.0 1.0 0.0 1.0
+uniform float arg0  -2.99999993e-02
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.41949999e+00
+uniform float expected_a  1.39970005e+00
+uniform float expected_b  1.39970005e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 2 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.87000000e+00
+uniform float arg1  -2.99999993e-02
+uniform float arg2  1.56979990e+00
+uniform float expected_a  1.51369989e+00
+uniform float expected_b  1.51369989e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 3 0 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_shader_precision/vs-fma-float-float-float.shader_test b/tests/spec/arb_shader_precision/vs-fma-float-float-float.shader_test
new file mode 100644
index 0000000..6234ff4
--- /dev/null
+++ b/tests/spec/arb_shader_precision/vs-fma-float-float-float.shader_test
@@ -0,0 +1,65 @@
+
+[require]
+GLSL >= 4.00
+
+[vertex shader]
+#extension GL_ARB_shader_precision : require
+in vec4 piglit_vertex;
+flat out vec4 color;
+uniform float arg0;
+uniform float arg1;
+uniform float arg2;
+uniform float expected_a;
+uniform float expected_b;
+
+void main()
+{
+  gl_Position = piglit_vertex;
+  float result = fma(arg0, arg1, arg2);
+  color = result == expected_a || result == expected_b ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[fragment shader]
+flat in vec4 color;
+
+void main()
+{
+  gl_FragColor = color;
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform float arg0  -2.99999993e-02
+uniform float arg1  -8.50000024e-01
+uniform float arg2  -2.54999995e-02
+uniform float expected_a  0.00000000e+00
+uniform float expected_b  6.22123464e-10
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.66999996e+00
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.00000036e+00
+uniform float expected_a  2.10220027e+00
+uniform float expected_b  2.10220051e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 1 0 0.0 1.0 0.0 1.0
+uniform float arg0  -2.99999993e-02
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.41949999e+00
+uniform float expected_a  1.39970005e+00
+uniform float expected_b  1.39970005e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 2 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.87000000e+00
+uniform float arg1  -2.99999993e-02
+uniform float arg2  1.56979990e+00
+uniform float expected_a  1.51369989e+00
+uniform float expected_b  1.51369989e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 3 0 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_shader_precision/vs-manual-fma-float-float-float.shader_test b/tests/spec/arb_shader_precision/vs-manual-fma-float-float-float.shader_test
new file mode 100644
index 0000000..4ba2d02
--- /dev/null
+++ b/tests/spec/arb_shader_precision/vs-manual-fma-float-float-float.shader_test
@@ -0,0 +1,65 @@
+
+[require]
+GLSL >= 4.00
+
+[vertex shader]
+#extension GL_ARB_shader_precision : require
+in vec4 piglit_vertex;
+flat out vec4 color;
+uniform float arg0;
+uniform float arg1;
+uniform float arg2;
+uniform float expected_a;
+uniform float expected_b;
+
+void main()
+{
+  gl_Position = piglit_vertex;
+  float result = arg0 * arg1 + arg2;
+  color = result == expected_a || result == expected_b ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[fragment shader]
+flat in vec4 color;
+
+void main()
+{
+  gl_FragColor = color;
+}
+
+[vertex data]
+piglit_vertex/float/2
+-1.0 -1.0
+ 1.0 -1.0
+ 1.0  1.0
+-1.0  1.0
+
+[test]
+uniform float arg0  -2.99999993e-02
+uniform float arg1  -8.50000024e-01
+uniform float arg2  -2.54999995e-02
+uniform float expected_a  0.00000000e+00
+uniform float expected_b  6.22123464e-10
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 0 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.66999996e+00
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.00000036e+00
+uniform float expected_a  2.10220027e+00
+uniform float expected_b  2.10220051e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 1 0 0.0 1.0 0.0 1.0
+uniform float arg0  -2.99999993e-02
+uniform float arg1  6.60000026e-01
+uniform float arg2  1.41949999e+00
+uniform float expected_a  1.39970005e+00
+uniform float expected_b  1.39970005e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 2 0 0.0 1.0 0.0 1.0
+uniform float arg0  1.87000000e+00
+uniform float arg1  -2.99999993e-02
+uniform float arg2  1.56979990e+00
+uniform float expected_a  1.51369989e+00
+uniform float expected_b  1.51369989e+00
+draw arrays GL_TRIANGLE_FAN 0 4
+probe rgba 3 0 0.0 1.0 0.0 1.0
-- 
2.3.5



More information about the Piglit mailing list