From 5850e39c4b847ef06550bcee089d729c4dd8c03e Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Mon, 11 Mar 2013 14:36:13 -0700 Subject: 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 Reviewed-by: Stuart Abercrombie --- ...s-multiple-vs-member-count-mismatch.shader_test | 35 ++++++++++++++++++++++ ...-blocks-vs-fs-member-count-mismatch.shader_test | 34 +++++++++++++++++++++ ...-blocks-vs-fs-member-order-mismatch.shader_test | 35 ++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 tests/spec/glsl-1.50/linker/interface-blocks-multiple-vs-member-count-mismatch.shader_test create mode 100644 tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-count-mismatch.shader_test create mode 100644 tests/spec/glsl-1.50/linker/interface-blocks-vs-fs-member-order-mismatch.shader_test 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 + -- cgit v1.2.1