[Piglit] [PATCH 10/11] arb_shader_subroutine: Add tests for calling through subroutine uniforms

Chris Forbes chrisf at ijw.co.nz
Sun Aug 10 04:07:01 PDT 2014


Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
---
 .../compiler/array-call-const-indexed.vert         | 23 ++++++++++++++++++
 .../array-call-dynamically-uniform-indexed.vert    | 27 ++++++++++++++++++++++
 .../compiler/call-param-mismatch.vert              | 19 +++++++++++++++
 .../compiler/direct-call.vert                      | 27 ++++++++++++++++++++++
 .../compiler/simple-call.vert                      | 23 ++++++++++++++++++
 5 files changed, 119 insertions(+)
 create mode 100644 tests/spec/arb_shader_subroutine/compiler/array-call-const-indexed.vert
 create mode 100644 tests/spec/arb_shader_subroutine/compiler/array-call-dynamically-uniform-indexed.vert
 create mode 100644 tests/spec/arb_shader_subroutine/compiler/call-param-mismatch.vert
 create mode 100644 tests/spec/arb_shader_subroutine/compiler/direct-call.vert
 create mode 100644 tests/spec/arb_shader_subroutine/compiler/simple-call.vert

diff --git a/tests/spec/arb_shader_subroutine/compiler/array-call-const-indexed.vert b/tests/spec/arb_shader_subroutine/compiler/array-call-const-indexed.vert
new file mode 100644
index 0000000..929f571
--- /dev/null
+++ b/tests/spec/arb_shader_subroutine/compiler/array-call-const-indexed.vert
@@ -0,0 +1,23 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.50
+// require_extensions: GL_ARB_shader_subroutine
+// [end config]
+
+#version 150
+#extension GL_ARB_shader_subroutine: require
+
+subroutine void func_type();
+
+/* A subroutine matching the above type */
+subroutine (func_type) void impl() {}
+
+/* An array of subroutine uniforms matching the above */
+subroutine uniform func_type f[4];
+
+/* Elements of an array of subroutine uniforms are callable
+ * as if they were any other function
+ */
+void foo() {
+	f[0]();
+}
diff --git a/tests/spec/arb_shader_subroutine/compiler/array-call-dynamically-uniform-indexed.vert b/tests/spec/arb_shader_subroutine/compiler/array-call-dynamically-uniform-indexed.vert
new file mode 100644
index 0000000..0f7c71d
--- /dev/null
+++ b/tests/spec/arb_shader_subroutine/compiler/array-call-dynamically-uniform-indexed.vert
@@ -0,0 +1,27 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.50
+// require_extensions: GL_ARB_shader_subroutine
+// [end config]
+
+#version 150
+#extension GL_ARB_shader_subroutine: require
+
+subroutine void func_type();
+
+subroutine (func_type) void impl() {}
+
+subroutine uniform func_type f[4];
+
+uniform int n;
+
+/* Arrays of subroutine uniforms may be indexed with
+ * dynamically uniform expressions. GLSL 4.00-4.30
+ * leave this underspecified as 'dynamically indexed'
+ * but GLSL 4.40 clarifies that the intent all along
+ * was to require the indexing expression to be
+ * dynamically uniform.
+ */
+void foo() {
+	f[n]();
+}
diff --git a/tests/spec/arb_shader_subroutine/compiler/call-param-mismatch.vert b/tests/spec/arb_shader_subroutine/compiler/call-param-mismatch.vert
new file mode 100644
index 0000000..870d0ca
--- /dev/null
+++ b/tests/spec/arb_shader_subroutine/compiler/call-param-mismatch.vert
@@ -0,0 +1,19 @@
+// [config]
+// expect_result: fail
+// glsl_version: 1.50
+// require_extensions: GL_ARB_shader_subroutine
+// [end config]
+
+#version 150
+#extension GL_ARB_shader_subroutine: require
+
+subroutine void func_type();
+
+subroutine (func_type) void impl() {}
+
+subroutine uniform func_type f;
+
+/* Call f() with a mismatched parameter list */
+void foo() {
+	f(42);
+}
diff --git a/tests/spec/arb_shader_subroutine/compiler/direct-call.vert b/tests/spec/arb_shader_subroutine/compiler/direct-call.vert
new file mode 100644
index 0000000..6d5f1d4
--- /dev/null
+++ b/tests/spec/arb_shader_subroutine/compiler/direct-call.vert
@@ -0,0 +1,27 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.50
+// require_extensions: GL_ARB_shader_subroutine
+// [end config]
+
+#version 150
+#extension GL_ARB_shader_subroutine: require
+
+/* The ARB_shader_subroutine spec says nothing to
+ * explicitly disallow calling subroutine implementations
+ * as normal functions.
+ *
+ * It seems reasonable that this would still work.
+ */
+
+subroutine void func_type();
+
+/* A subroutine matching the above type */
+subroutine (func_type) void impl() {}
+
+/* Call the function directly, rather than via
+ * a subroutine uniform.
+ */
+void foo() {
+	impl();
+}
diff --git a/tests/spec/arb_shader_subroutine/compiler/simple-call.vert b/tests/spec/arb_shader_subroutine/compiler/simple-call.vert
new file mode 100644
index 0000000..52dc538
--- /dev/null
+++ b/tests/spec/arb_shader_subroutine/compiler/simple-call.vert
@@ -0,0 +1,23 @@
+// [config]
+// expect_result: pass
+// glsl_version: 1.50
+// require_extensions: GL_ARB_shader_subroutine
+// [end config]
+
+#version 150
+#extension GL_ARB_shader_subroutine: require
+
+subroutine void func_type();
+
+/* A subroutine matching the above type */
+subroutine (func_type) void impl() {}
+
+/* A subroutine uniform for the above type */
+subroutine uniform func_type f;
+
+/* Subroutines are called via the uniform as
+ * if they were any other function
+ */
+void foo() {
+	f();
+}
-- 
2.0.4



More information about the Piglit mailing list