<div dir="ltr">On 19 December 2012 11:49, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 12/19/2012 08:30 AM, Paul Berry wrote:<br>
<br>
Reviewed-by: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com" target="_blank">ian.d.romanick@intel.com</a>><br>
<br>
Now for the bad news...<br>
<br>
In GLSL ES 3.00 and GLSL 1.50 this language changes to:<br>
<br>
    "They can only be float, floating-point vectors, matrices,<br>
    signed or unsigned integers or integer vectors, or arrays<br>
    or structures of any these"<br>
<br>
We should add at least GLSL ES 3.00 tests for structures. :(  I know that Mesa will fail these tests currently.</blockquote><div><br></div><div>Yeah, I spotted that.  But I think it may be a mistake (or at the very least a spec inconsistency), for the following reason: chapter 11 of the GLSL ES 3.00 spec ("Counting of Inputs and Outputs") specifies the order in which varyings should be packed according to their type, and it does not specify what to do about varyings of type struct.  This chapter would have to be extended in a non-trivial way to be consistent with GLSL ES 3.00 allowing varying structs.  Also, there are no GLES3 conformance tests that require varying structs.<br>
<br>Considering this inconsistency, as well as the fact that no conformant implementations of GLES3 have yet been released, I wonder if it would be worth trying to lobby the Khronos board to have this part of the spec changed.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
---<br>
  .../qualifiers/varying-bool-<u></u>prohibited.frag        | 20 +++++++++++++++++++<br>
  .../qualifiers/varying-bool-<u></u>prohibited.vert        | 21 ++++++++++++++++++++<br>
  .../qualifiers/varying-bvec2-<u></u>prohibited.frag       | 20 +++++++++++++++++++<br>
  .../qualifiers/varying-bvec2-<u></u>prohibited.vert       | 21 ++++++++++++++++++++<br>
  .../qualifiers/varying-bvec3-<u></u>prohibited.frag       | 20 +++++++++++++++++++<br>
  .../qualifiers/varying-bvec3-<u></u>prohibited.vert       | 21 ++++++++++++++++++++<br>
  .../qualifiers/varying-bvec4-<u></u>prohibited.frag       | 20 +++++++++++++++++++<br>
  .../qualifiers/varying-bvec4-<u></u>prohibited.vert       | 21 ++++++++++++++++++++<br>
  .../qualifiers/varying-struct-<u></u>prohibited.frag      | 21 ++++++++++++++++++++<br>
  .../qualifiers/varying-struct-<u></u>prohibited.vert      | 22 +++++++++++++++++++++<br>
  .../compiler/qualifiers/in-<u></u>bool-prohibited.frag    | 20 +++++++++++++++++++<br>
  .../compiler/qualifiers/in-<u></u>bvec2-prohibited.frag   | 20 +++++++++++++++++++<br>
  .../compiler/qualifiers/in-<u></u>bvec3-prohibited.frag   | 20 +++++++++++++++++++<br>
  .../compiler/qualifiers/in-<u></u>bvec4-prohibited.frag   | 20 +++++++++++++++++++<br>
  .../compiler/qualifiers/in-<u></u>struct-prohibited.frag  | 21 ++++++++++++++++++++<br>
  .../compiler/qualifiers/out-<u></u>bool-prohibited.vert   | 22 +++++++++++++++++++++<br>
  .../compiler/qualifiers/out-<u></u>bvec2-prohibited.vert  | 22 +++++++++++++++++++++<br>
  .../compiler/qualifiers/out-<u></u>bvec3-prohibited.vert  | 22 +++++++++++++++++++++<br>
  .../compiler/qualifiers/out-<u></u>bvec4-prohibited.vert  | 22 +++++++++++++++++++++<br>
  .../compiler/qualifiers/out-<u></u>struct-prohibited.vert | 23 ++++++++++++++++++++++<br>
  20 files changed, 419 insertions(+)<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bool-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bool-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bvec2-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bvec2-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bvec3-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bvec3-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bvec4-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-bvec4-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-struct-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.10/compiler/<u></u>qualifiers/varying-struct-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/in-bool-prohibited.<u></u>frag<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/in-bvec2-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/in-bvec3-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/in-bvec4-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/in-struct-<u></u>prohibited.frag<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/out-bool-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/out-bvec2-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/out-bvec3-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/out-bvec4-<u></u>prohibited.vert<br>
  create mode 100644 tests/spec/glsl-1.30/compiler/<u></u>qualifiers/out-struct-<u></u>prohibited.vert<br>
<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bool-prohibited.frag b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bool-prohibited.frag<br>
new file mode 100644<br>
index 0000000..665c4a0<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bool-prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bool can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bool foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo, 0.0, 0.0, 0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bool-prohibited.vert b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bool-prohibited.vert<br>
new file mode 100644<br>
index 0000000..34e5fde<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bool-prohibited.vert<br>
@@ -0,0 +1,21 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bool can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bool foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = true;<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec2-prohibited.frag b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec2-prohibited.frag<br>
new file mode 100644<br>
index 0000000..9833632<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec2-prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bvec2 can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bvec2 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo, 0.0, 0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec2-prohibited.vert b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec2-prohibited.vert<br>
new file mode 100644<br>
index 0000000..3560825<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec2-prohibited.vert<br>
@@ -0,0 +1,21 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bvec2 can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bvec2 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = bvec2(true, false);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec3-prohibited.frag b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec3-prohibited.frag<br>
new file mode 100644<br>
index 0000000..7835939<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec3-prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bvec3 can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bvec3 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo, 0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec3-prohibited.vert b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec3-prohibited.vert<br>
new file mode 100644<br>
index 0000000..de48f40<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec3-prohibited.vert<br>
@@ -0,0 +1,21 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bvec3 can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bvec3 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = bvec3(true, false, true);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec4-prohibited.frag b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec4-prohibited.frag<br>
new file mode 100644<br>
index 0000000..5ab3ad2<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec4-prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bvec4 can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bvec4 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec4-prohibited.vert b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec4-prohibited.vert<br>
new file mode 100644<br>
index 0000000..0306d38<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>bvec4-prohibited.vert<br>
@@ -0,0 +1,21 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a bvec4 can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+varying bvec4 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = bvec4(true, false, true, false);<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>struct-prohibited.frag b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>struct-prohibited.frag<br>
new file mode 100644<br>
index 0000000..9724195<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>struct-prohibited.frag<br>
@@ -0,0 +1,21 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a struct can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+struct S { vec4 v; };<br>
+varying S foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = foo.v;<br>
+}<br>
diff --git a/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>struct-prohibited.vert b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>struct-prohibited.vert<br>
new file mode 100644<br>
index 0000000..822995d<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.10/<u></u>compiler/qualifiers/varying-<u></u>struct-prohibited.vert<br>
@@ -0,0 +1,22 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.10<br>
+// [end config]<br>
+//<br>
+// Check that a struct can't be used as a varying in GLSL 1.10.<br>
+//<br>
+// From section 4.3.6 ("Varying") of the GLSL 1.10 spec:<br>
+//     The varying qualifier can be used only with the data types<br>
+//     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of<br>
+//     these. Structures cannot be varying.<br>
+<br>
+#version 110<br>
+<br>
+struct S { vec4 v; };<br>
+varying S foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo.v = vec4(0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bool-<u></u>prohibited.frag b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bool-<u></u>prohibited.frag<br>
new file mode 100644<br>
index 0000000..647b365<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bool-<u></u>prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bool can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.4 ("Inputs") of the GLSL 1.30 spec:<br>
+//     Fragment inputs can only be signed and unsigned integers and<br>
+//     integer vectors, float, floating-point vectors, matrices, or<br>
+//     arrays of these.  Structures cannot be input.<br>
+<br>
+#version 130<br>
+<br>
+flat in bool foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo, 0.0, 0.0, 0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec2-<u></u>prohibited.frag b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec2-<u></u>prohibited.frag<br>
new file mode 100644<br>
index 0000000..622c025<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec2-<u></u>prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bvec2 can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.4 ("Inputs") of the GLSL 1.30 spec:<br>
+//     Fragment inputs can only be signed and unsigned integers and<br>
+//     integer vectors, float, floating-point vectors, matrices, or<br>
+//     arrays of these.  Structures cannot be input.<br>
+<br>
+#version 130<br>
+<br>
+flat in bvec2 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo, 0.0, 0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec3-<u></u>prohibited.frag b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec3-<u></u>prohibited.frag<br>
new file mode 100644<br>
index 0000000..2cd8534<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec3-<u></u>prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bvec3 can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.4 ("Inputs") of the GLSL 1.30 spec:<br>
+//     Fragment inputs can only be signed and unsigned integers and<br>
+//     integer vectors, float, floating-point vectors, matrices, or<br>
+//     arrays of these.  Structures cannot be input.<br>
+<br>
+#version 130<br>
+<br>
+flat in bvec3 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo, 0.0);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec4-<u></u>prohibited.frag b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec4-<u></u>prohibited.frag<br>
new file mode 100644<br>
index 0000000..d9d8bd6<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-bvec4-<u></u>prohibited.frag<br>
@@ -0,0 +1,20 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bvec4 can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.4 ("Inputs") of the GLSL 1.30 spec:<br>
+//     Fragment inputs can only be signed and unsigned integers and<br>
+//     integer vectors, float, floating-point vectors, matrices, or<br>
+//     arrays of these.  Structures cannot be input.<br>
+<br>
+#version 130<br>
+<br>
+flat in bvec4 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = vec4(foo);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-struct-<u></u>prohibited.frag b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-struct-<u></u>prohibited.frag<br>
new file mode 100644<br>
index 0000000..6a41fdf<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/in-struct-<u></u>prohibited.frag<br>
@@ -0,0 +1,21 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a struct can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.4 ("Inputs") of the GLSL 1.30 spec:<br>
+//     Fragment inputs can only be signed and unsigned integers and<br>
+//     integer vectors, float, floating-point vectors, matrices, or<br>
+//     arrays of these.  Structures cannot be input.<br>
+<br>
+#version 130<br>
+<br>
+struct S { vec4 v; };<br>
+in S foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_FragColor = foo.v;<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bool-<u></u>prohibited.vert b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bool-<u></u>prohibited.vert<br>
new file mode 100644<br>
index 0000000..605de9f<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bool-<u></u>prohibited.vert<br>
@@ -0,0 +1,22 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bool can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.6 ("Outputs") of the GLSL 1.30 spec:<br>
+//     Vertex output variables ... can only be float, floating-point<br>
+//     vectors, matrices, signed or unsigned integers or integer<br>
+//     vectors, or arrays of any these. ... Structures cannot be<br>
+//     output.<br>
+<br>
+#version 130<br>
+<br>
+flat out bool foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = true;<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec2-<u></u>prohibited.vert b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec2-<u></u>prohibited.vert<br>
new file mode 100644<br>
index 0000000..4b03107<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec2-<u></u>prohibited.vert<br>
@@ -0,0 +1,22 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bvec2 can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.6 ("Outputs") of the GLSL 1.30 spec:<br>
+//     Vertex output variables ... can only be float, floating-point<br>
+//     vectors, matrices, signed or unsigned integers or integer<br>
+//     vectors, or arrays of any these. ... Structures cannot be<br>
+//     output.<br>
+<br>
+#version 130<br>
+<br>
+flat out bvec2 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = bvec2(true, false);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec3-<u></u>prohibited.vert b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec3-<u></u>prohibited.vert<br>
new file mode 100644<br>
index 0000000..9618aca<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec3-<u></u>prohibited.vert<br>
@@ -0,0 +1,22 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bvec3 can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.6 ("Outputs") of the GLSL 1.30 spec:<br>
+//     Vertex output variables ... can only be float, floating-point<br>
+//     vectors, matrices, signed or unsigned integers or integer<br>
+//     vectors, or arrays of any these. ... Structures cannot be<br>
+//     output.<br>
+<br>
+#version 130<br>
+<br>
+flat out bvec3 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = bvec3(true, false, true);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec4-<u></u>prohibited.vert b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec4-<u></u>prohibited.vert<br>
new file mode 100644<br>
index 0000000..a1f6ffa<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-bvec4-<u></u>prohibited.vert<br>
@@ -0,0 +1,22 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a bvec4 can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.6 ("Outputs") of the GLSL 1.30 spec:<br>
+//     Vertex output variables ... can only be float, floating-point<br>
+//     vectors, matrices, signed or unsigned integers or integer<br>
+//     vectors, or arrays of any these. ... Structures cannot be<br>
+//     output.<br>
+<br>
+#version 130<br>
+<br>
+flat out bvec4 foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo = bvec4(true, false, true, false);<br>
+}<br>
diff --git a/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-<u></u>struct-prohibited.vert b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-<u></u>struct-prohibited.vert<br>
new file mode 100644<br>
index 0000000..ced9024<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.30/<u></u>compiler/qualifiers/out-<u></u>struct-prohibited.vert<br>
@@ -0,0 +1,23 @@<br>
+// [config]<br>
+// expect_result: fail<br>
+// glsl_version: 1.30<br>
+// [end config]<br>
+//<br>
+// Check that a struct can't be used as a varying in GLSL 1.30.<br>
+//<br>
+// From section 4.3.6 ("Outputs") of the GLSL 1.30 spec:<br>
+//     Vertex output variables ... can only be float, floating-point<br>
+//     vectors, matrices, signed or unsigned integers or integer<br>
+//     vectors, or arrays of any these. ... Structures cannot be<br>
+//     output.<br>
+<br>
+#version 130<br>
+<br>
+struct S { vec4 v; };<br>
+out S foo;<br>
+<br>
+void main()<br>
+{<br>
+  gl_Position = vec4(0.0);<br>
+  foo.v = vec4(0.0);<br>
+}<br>
<br>
</blockquote>
<br>
</div></div></blockquote></div><br></div></div>