aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2013-03-11 14:36:13 -0700
committerJordan Justen <jordan.l.justen@intel.com>2013-03-22 21:09:37 -0700
commit5850e39c4b847ef06550bcee089d729c4dd8c03e (patch)
tree62d9ad99b8fe543d76a373b2ded814c67ec3c42e
parentc370a5f932267ebbc5118f5285eb74ba1f3b20fc (diff)
glsl-1.50: add more negative tests for interface block linking
A few tests to make sure that interface blocks are defined the same during intrastage and interstage linking. Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Stuart Abercrombie <sabercrombie@chromium.org>
-rw-r--r--tests/spec/glsl-1.50/linker/interface-blocks-multiple-vs-member-count-mismatch.shader_test35
-rw-r--r--tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-count-mismatch.shader_test34
-rw-r--r--tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-order-mismatch.shader_test35
3 files changed, 104 insertions, 0 deletions
diff --git a/tests/spec/glsl-1.50/linker/interface-blocks-multiple-vs-member-count-mismatch.shader_test b/tests/spec/glsl-1.50/linker/interface-blocks-multiple-vs-member-count-mismatch.shader_test
new file mode 100644
index 00000000..9b2990ac
--- /dev/null
+++ b/tests/spec/glsl-1.50/linker/interface-blocks-multiple-vs-member-count-mismatch.shader_test
@@ -0,0 +1,35 @@
+# Tests that a link error occurs when an interface block member's type
+# differs between the vertex and fragment shaders.
+#
+# GLSLangSpec.1.50.11, 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)."
+[require]
+GLSL >= 1.50
+
+[vertex shader]
+out block {
+ vec4 a;
+} vs1_block;
+
+void main()
+{
+ gl_Position = vec4(0.0);
+}
+
+[vertex shader]
+out block {
+ vec4 a;
+ vec4 b; // b is not present in VS #1 interface block
+} vs_block;
+
+[fragment shader]
+void main()
+{
+}
+
+[test]
+link error
+
diff --git a/tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-count-mismatch.shader_test b/tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-count-mismatch.shader_test
new file mode 100644
index 00000000..50a867da
--- /dev/null
+++ b/tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-count-mismatch.shader_test
@@ -0,0 +1,34 @@
+# Tests that a link error occurs when an interface block member's type
+# differs between the vertex and fragment shaders.
+#
+# GLSLangSpec.1.50.11, 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)."
+[require]
+GLSL >= 1.50
+
+[vertex shader]
+out block {
+ vec4 a;
+} vs_block;
+
+void main()
+{
+ gl_Position = vec4(0.0);
+}
+
+[fragment shader]
+in block {
+ vec4 a;
+ vec4 b; // b is not present in VS interface block
+} fs_block;
+
+void main()
+{
+}
+
+[test]
+link error
+
diff --git a/tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-order-mismatch.shader_test b/tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-order-mismatch.shader_test
new file mode 100644
index 00000000..3b33775b
--- /dev/null
+++ b/tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-order-mismatch.shader_test
@@ -0,0 +1,35 @@
+# Tests that a link error occurs when an interface block member's type
+# differs between the vertex and fragment shaders.
+#
+# GLSLangSpec.1.50.11, 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)."
+[require]
+GLSL >= 1.50
+
+[vertex shader]
+out block {
+ vec4 a;
+ vec4 b;
+} vs_block;
+
+void main()
+{
+ gl_Position = vec4(0.0);
+}
+
+[fragment shader]
+in block {
+ vec4 b; // b is the second member in the VS interface block
+ vec4 a;
+} fs_block;
+
+void main()
+{
+}
+
+[test]
+link error
+