[Piglit] [PATCH] arb_derivative_control: add some basic tests
Ilia Mirkin
imirkin at alum.mit.edu
Wed Aug 13 22:56:56 PDT 2014
Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---
tests/all.py | 9 +++++++
.../arb_derivative_control/compiler/define.frag | 29 ++++++++++++++++++++++
.../execution/dfdx-coarse.shader_test | 22 ++++++++++++++++
.../execution/dfdx-dfdy.shader_test | 22 ++++++++++++++++
.../execution/dfdx-fine.shader_test | 26 +++++++++++++++++++
.../execution/dfdy-coarse.shader_test | 22 ++++++++++++++++
.../execution/dfdy-fine.shader_test | 26 +++++++++++++++++++
7 files changed, 156 insertions(+)
create mode 100644 tests/spec/arb_derivative_control/compiler/define.frag
create mode 100644 tests/spec/arb_derivative_control/execution/dfdx-coarse.shader_test
create mode 100644 tests/spec/arb_derivative_control/execution/dfdx-dfdy.shader_test
create mode 100644 tests/spec/arb_derivative_control/execution/dfdx-fine.shader_test
create mode 100644 tests/spec/arb_derivative_control/execution/dfdy-coarse.shader_test
create mode 100644 tests/spec/arb_derivative_control/execution/dfdy-fine.shader_test
diff --git a/tests/all.py b/tests/all.py
index 4541654..0f69a66 100644
--- a/tests/all.py
+++ b/tests/all.py
@@ -4098,6 +4098,15 @@ arb_shader_atomic_counters['semantics'] = concurrent_test('arb_shader_atomic_cou
arb_shader_atomic_counters['unique-id'] = concurrent_test('arb_shader_atomic_counters-unique-id')
arb_shader_atomic_counters['unused-result'] = concurrent_test('arb_shader_atomic_counters-unused-result')
+arb_derivative_control = {}
+spec['ARB_derivative_control'] = arb_derivative_control
+add_shader_test_dir(arb_derivative_control,
+ os.path.join(testsDir, 'spec', 'arb_derivative_control'),
+ recursive=True)
+import_glsl_parser_tests(arb_derivative_control,
+ testsDir + '/spec/arb_derivative_control', [''])
+
+
profile.tests['hiz'] = hiz
profile.tests['fast_color_clear'] = fast_color_clear
profile.tests['glean'] = glean
diff --git a/tests/spec/arb_derivative_control/compiler/define.frag b/tests/spec/arb_derivative_control/compiler/define.frag
new file mode 100644
index 0000000..4e31dd7
--- /dev/null
+++ b/tests/spec/arb_derivative_control/compiler/define.frag
@@ -0,0 +1,29 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.50
+// require_extensions: GL_ARB_derivative_control
+// [end config]
+
+#version 150
+#extension GL_ARB_derivative_control: require
+
+#if !defined GL_ARB_derivative_control
+# error GL_ARB_derivative_control is not defined
+#elif GL_ARB_derivative_control != 1
+# error GL_ARB_derivative_control is not equal to 1
+#endif
+
+/* Make sure that the functions are defined */
+in vec4 val;
+out vec4 color;
+void main() {
+ color = dFdx(val);
+ color += dFdy(val);
+ color += fwidth(val);
+ color += dFdxCoarse(val);
+ color += dFdyCoarse(val);
+ color += fwidthCoarse(val);
+ color += dFdxFine(val);
+ color += dFdyFine(val);
+ color += fwidthFine(val);
+}
diff --git a/tests/spec/arb_derivative_control/execution/dfdx-coarse.shader_test b/tests/spec/arb_derivative_control/execution/dfdx-coarse.shader_test
new file mode 100644
index 0000000..b3205c2
--- /dev/null
+++ b/tests/spec/arb_derivative_control/execution/dfdx-coarse.shader_test
@@ -0,0 +1,22 @@
+[require]
+GLSL >= 1.50
+GL_ARB_derivative_control
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_derivative_control: require
+
+void main()
+{
+ float xy = gl_FragCoord.x * gl_FragCoord.y;
+ float dx = dFdxCoarse(xy);
+ if (distance(dx, gl_FragCoord.y) <= 1)
+ gl_FragColor = vec4(0, 1, 0, 1);
+ else
+ gl_FragColor = vec4(1, 0, 0, 1);
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_derivative_control/execution/dfdx-dfdy.shader_test b/tests/spec/arb_derivative_control/execution/dfdx-dfdy.shader_test
new file mode 100644
index 0000000..6f36dc0
--- /dev/null
+++ b/tests/spec/arb_derivative_control/execution/dfdx-dfdy.shader_test
@@ -0,0 +1,22 @@
+[require]
+GLSL >= 1.50
+GL_ARB_derivative_control
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_derivative_control: require
+
+void main()
+{
+ float xy = gl_FragCoord.x * gl_FragCoord.y;
+ float dxdy = dFdxFine(dFdyFine(xy));
+ if (dxdy == 1)
+ gl_FragColor = vec4(0, 1, 0, 1);
+ else
+ gl_FragColor = vec4(1, 0, 0, 1);
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_derivative_control/execution/dfdx-fine.shader_test b/tests/spec/arb_derivative_control/execution/dfdx-fine.shader_test
new file mode 100644
index 0000000..e0dbd9f
--- /dev/null
+++ b/tests/spec/arb_derivative_control/execution/dfdx-fine.shader_test
@@ -0,0 +1,26 @@
+[require]
+GLSL >= 1.50
+GL_ARB_derivative_control
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_derivative_control: require
+
+void main()
+{
+ float x = gl_FragCoord.x;
+ bool alt = bool(int(gl_FragCoord.y) % 2);
+ float altx = alt ? -x : x;
+ float dx = dFdxFine(altx);
+ // Alternating rows are now descending, so check the direction
+ // of the derivative based on the row we're in.
+ if (alt && dx >= 0 || !alt && dx <= 0)
+ gl_FragColor = vec4(1, 0, 0, 1);
+ else
+ gl_FragColor = vec4(0, 1, 0, 1);
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_derivative_control/execution/dfdy-coarse.shader_test b/tests/spec/arb_derivative_control/execution/dfdy-coarse.shader_test
new file mode 100644
index 0000000..f3a366d
--- /dev/null
+++ b/tests/spec/arb_derivative_control/execution/dfdy-coarse.shader_test
@@ -0,0 +1,22 @@
+[require]
+GLSL >= 1.50
+GL_ARB_derivative_control
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_derivative_control: require
+
+void main()
+{
+ float xy = gl_FragCoord.x * gl_FragCoord.y;
+ float dy = dFdyCoarse(xy);
+ if (distance(dy, gl_FragCoord.x) <= 1)
+ gl_FragColor = vec4(0, 1, 0, 1);
+ else
+ gl_FragColor = vec4(1, 0, 0, 1);
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_derivative_control/execution/dfdy-fine.shader_test b/tests/spec/arb_derivative_control/execution/dfdy-fine.shader_test
new file mode 100644
index 0000000..871826d
--- /dev/null
+++ b/tests/spec/arb_derivative_control/execution/dfdy-fine.shader_test
@@ -0,0 +1,26 @@
+[require]
+GLSL >= 1.50
+GL_ARB_derivative_control
+
+[vertex shader passthrough]
+
+[fragment shader]
+#extension GL_ARB_derivative_control: require
+
+void main()
+{
+ float y = gl_FragCoord.y;
+ bool alt = bool(int(gl_FragCoord.x) % 2);
+ float alty = alt ? -y : y;
+ float dy = dFdyFine(alty);
+ // Alternating columns are now descending, so check the direction
+ // of the derivative based on the row we're in.
+ if (alt && dy >= 0 || !alt && dy <= 0)
+ gl_FragColor = vec4(1, 0, 0, 1);
+ else
+ gl_FragColor = vec4(0, 1, 0, 1);
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
--
1.8.5.5
More information about the Piglit
mailing list