[Piglit] [PATCH 1/4] Test intrastage interface block array matching rules.

Paul Berry stereotype441 at gmail.com
Wed Oct 30 22:27:56 CET 2013


Note: as of Mesa 5cb80f0, test "intrastage-interface-unnamed-array" is
known to fail.
---
 ...ge-interface-arrays-unmatched-sizes.shader_test | 42 +++++++++++++++++++
 .../intrastage-interface-named-array.shader_test   | 47 ++++++++++++++++++++++
 .../intrastage-interface-unnamed-array.shader_test | 47 ++++++++++++++++++++++
 3 files changed, 136 insertions(+)
 create mode 100644 tests/spec/glsl-1.50/linker/intrastage-interface-arrays-unmatched-sizes.shader_test
 create mode 100644 tests/spec/glsl-1.50/linker/intrastage-interface-named-array.shader_test
 create mode 100644 tests/spec/glsl-1.50/linker/intrastage-interface-unnamed-array.shader_test

diff --git a/tests/spec/glsl-1.50/linker/intrastage-interface-arrays-unmatched-sizes.shader_test b/tests/spec/glsl-1.50/linker/intrastage-interface-arrays-unmatched-sizes.shader_test
new file mode 100644
index 0000000..b1f60fc
--- /dev/null
+++ b/tests/spec/glsl-1.50/linker/intrastage-interface-arrays-unmatched-sizes.shader_test
@@ -0,0 +1,42 @@
+# From the GLSL 1.50 spec, section 4.3.7 (Interface Blocks):
+#
+#     Matched block names within an interface (as defined above) must
+#     match in terms of having the same number of declarations with
+#     the same sequence of types and the same sequence of member
+#     names, as well as having the same member-wise layout
+#     qualification (see next section). Furthermore, if a matching
+#     block is declared as an array, then the array sizes must also
+#     match (or follow array matching rules for the interface between
+#     a vertex and a geometry shader).
+#
+# This test verifies that a link error is generated if intrastage
+# array sizes don't match.
+
+[require]
+GLSL >= 1.50
+
+[vertex shader]
+out blk {
+  vec4 foo;
+} inst[2];
+
+void f()
+{
+  inst[1].foo = vec4(1.0);
+}
+
+[vertex shader]
+out blk {
+  vec4 foo;
+} inst[3];
+
+void f();
+
+void main()
+{
+  f();
+  inst[2].foo = vec4(1.0);
+}
+
+[test]
+link error
diff --git a/tests/spec/glsl-1.50/linker/intrastage-interface-named-array.shader_test b/tests/spec/glsl-1.50/linker/intrastage-interface-named-array.shader_test
new file mode 100644
index 0000000..a8ef627
--- /dev/null
+++ b/tests/spec/glsl-1.50/linker/intrastage-interface-named-array.shader_test
@@ -0,0 +1,47 @@
+# From the GLSL 1.50 spec, section 4.3.7 (Interface Blocks):
+#
+#     Matched block names within an interface (as defined above) must
+#     match in terms of having the same number of declarations with
+#     the same sequence of types and the same sequence of member
+#     names, as well as having the same member-wise layout
+#     qualification (see next section). Furthermore, if a matching
+#     block is declared as an array, then the array sizes must also
+#     match (or follow array matching rules for the interface between
+#     a vertex and a geometry shader).
+#
+# Although it's not explicitly stated, it's clear that when doing
+# intrastage linking, interface block arrays can only match other
+# interface block arrays.
+#
+# This test verifies that a link error occurs if we try to do
+# intrastage linking of a named interface block to an interface block
+# array.
+
+[require]
+GLSL >= 1.50
+
+[vertex shader]
+out blk {
+  vec4 foo;
+} inst;
+
+void f()
+{
+  inst.foo = vec4(1.0);
+}
+
+[vertex shader]
+out blk {
+  vec4 foo;
+} inst[3];
+
+void f();
+
+void main()
+{
+  f();
+  inst[2].foo = vec4(1.0);
+}
+
+[test]
+link error
diff --git a/tests/spec/glsl-1.50/linker/intrastage-interface-unnamed-array.shader_test b/tests/spec/glsl-1.50/linker/intrastage-interface-unnamed-array.shader_test
new file mode 100644
index 0000000..1dee998
--- /dev/null
+++ b/tests/spec/glsl-1.50/linker/intrastage-interface-unnamed-array.shader_test
@@ -0,0 +1,47 @@
+# From the GLSL 1.50 spec, section 4.3.7 (Interface Blocks):
+#
+#     Matched block names within an interface (as defined above) must
+#     match in terms of having the same number of declarations with
+#     the same sequence of types and the same sequence of member
+#     names, as well as having the same member-wise layout
+#     qualification (see next section). Furthermore, if a matching
+#     block is declared as an array, then the array sizes must also
+#     match (or follow array matching rules for the interface between
+#     a vertex and a geometry shader).
+#
+# Although it's not explicitly stated, it's clear that when doing
+# intrastage linking, interface block arrays can only match other
+# interface block arrays.
+#
+# This test verifies that a link error occurs if we try to do
+# intrastage linking of an unnamed interface block to an interface
+# block array.
+
+[require]
+GLSL >= 1.50
+
+[vertex shader]
+out blk {
+  vec4 foo;
+};
+
+void f()
+{
+  foo = vec4(1.0);
+}
+
+[vertex shader]
+out blk {
+  vec4 foo;
+} inst[3];
+
+void f();
+
+void main()
+{
+  f();
+  inst[2].foo = vec4(1.0);
+}
+
+[test]
+link error
-- 
1.8.4.2



More information about the Piglit mailing list