<div dir="ltr">On 16 July 2013 08:49, Nicholas Mack <span dir="ltr"><<a href="mailto:nichmack@gmail.com" target="_blank">nichmack@gmail.com</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">
---<br>
 .../varying-struct-basic-vs-fs.shader_test         | 121 +++++++++++++++++++++<br>
 1 file changed, 121 insertions(+)<br>
 create mode 100644 tests/spec/glsl-1.50/execution/varying-struct-basic-vs-fs.shader_test<br></blockquote><div><br></div><div>This series is:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
diff --git a/tests/spec/glsl-1.50/execution/varying-struct-basic-vs-fs.shader_test b/tests/spec/glsl-1.50/execution/varying-struct-basic-vs-fs.shader_test<br>
new file mode 100644<br>
index 0000000..b10bb69<br>
--- /dev/null<br>
+++ b/tests/spec/glsl-1.50/execution/varying-struct-basic-vs-fs.shader_test<br>
@@ -0,0 +1,121 @@<br>
+# Test that varying structs work properly.<br>
+#<br>
+# From the GLSL 1.50 specification, section 4.3.4 ("Input Variables"):<br>
+#<br>
+#     Fragment inputs can only be signed and unsigned integers and<br>
+#     integer vectors, float, floating-point vectors, matrices, or<br>
+#     arrays or structures of these.<br>
+#<br>
+# And from section 4.3.6 ("Output Variables"):<br>
+#<br>
+#     Vertex output variables ... can only be float, floating-point<br>
+#     vectors, matrices, signed or unsigned integers or integer<br>
+#     vectors, or arrays or structures of any these.<br>
+#<br>
+# This test verifies basic functionality of varying structs using a<br>
+# varying struct containing a variety of types.<br>
+<br>
+[require]<br>
+GL >= 3.2<br>
+GLSL >= 1.50<br>
+<br>
+[vertex shader]<br>
+#version 150<br>
+<br>
+uniform float ref;<br>
+<br>
+in vec4 vertex;<br>
+struct Foo<br>
+{<br>
+       mat4 a;<br>
+       mat3 b;<br>
+       mat2 c;<br>
+       vec4 d;<br>
+       vec3 e;<br>
+       vec2 f;<br>
+       float g;<br>
+};<br>
+out Foo foo;<br>
+<br>
+void main()<br>
+{<br>
+       gl_Position = vertex;<br>
+<br>
+       foo.a = mat4(ref,        ref +  1.0, ref +  2.0, ref +  3.0,<br>
+                    ref +  4.0, ref +  5.0, ref +  6.0, ref +  7.0,<br>
+                    ref +  8.0, ref +  9.0, ref + 10.0, ref + 11.0,<br>
+                    ref + 12.0, ref + 13.0, ref + 14.0, ref + 15.0);<br>
+<br>
+       foo.b = mat3(ref + 16.0, ref + 17.0, ref + 18.0,<br>
+                    ref + 19.0, ref + 20.0, ref + 21.0,<br>
+                    ref + 22.0, ref + 23.0, ref + 24.0);<br>
+<br>
+       foo.c = mat2(ref + 25.0, ref + 26.0,<br>
+                    ref + 27.0, ref + 28.0);<br>
+<br>
+       foo.d = vec4(ref + 29.0, ref + 30.0, ref + 31.0, ref + 32.0);<br>
+       foo.e = vec3(ref + 33.0, ref + 34.0, ref + 35.0);<br>
+       foo.f = vec2(ref + 36.0, ref + 37.0);<br>
+       foo.g = ref + 38.0;<br>
+}<br>
+<br>
+[fragment shader]<br>
+#version 150<br>
+<br>
+uniform float ref;<br>
+<br>
+struct Foo<br>
+{<br>
+       mat4 a;<br>
+       mat3 b;<br>
+       mat2 c;<br>
+       vec4 d;<br>
+       vec3 e;<br>
+       vec2 f;<br>
+       float g;<br>
+};<br>
+in Foo foo;<br>
+out vec4 color;<br>
+<br>
+#define CHECK(value, expected) \<br>
+       if (distance(value, expected) > 0.00001) \<br>
+               failed = true<br>
+<br>
+void main()<br>
+{<br>
+       bool failed = false;<br>
+<br>
+       CHECK(foo.a[0], vec4(ref,        ref +  1.0, ref +  2.0, ref +  3.0));<br>
+       CHECK(foo.a[1], vec4(ref +  4.0, ref +  5.0, ref +  6.0, ref +  7.0));<br>
+       CHECK(foo.a[2], vec4(ref +  8.0, ref +  9.0, ref + 10.0, ref + 11.0));<br>
+       CHECK(foo.a[3], vec4(ref + 12.0, ref + 13.0, ref + 14.0, ref + 15.0));<br>
+<br>
+       CHECK(foo.b[0], vec3(ref + 16.0, ref + 17.0, ref + 18.0));<br>
+       CHECK(foo.b[1], vec3(ref + 19.0, ref + 20.0, ref + 21.0));<br>
+       CHECK(foo.b[2], vec3(ref + 22.0, ref + 23.0, ref + 24.0));<br>
+<br>
+       CHECK(foo.c[0], vec2(ref + 25.0, ref + 26.0));<br>
+       CHECK(foo.c[1], vec2(ref + 27.0, ref + 28.0));<br>
+<br>
+       CHECK(foo.d, vec4(ref + 29.0, ref + 30.0, ref + 31.0, ref + 32.0));<br>
+       CHECK(foo.e, vec3(ref + 33.0, ref + 34.0, ref + 35.0));<br>
+       CHECK(foo.f, vec2(ref + 36.0, ref + 37.0));<br>
+       CHECK(foo.g, ref + 38.0);<br>
+<br>
+       if (failed)<br>
+               color = vec4(1.0, 0.0, 0.0, 1.0);<br>
+       else<br>
+               color = vec4(0.0, 1.0, 0.0, 1.0);<br>
+}<br>
+<br>
+[vertex data]<br>
+vertex/float/2<br>
+-1.0 -1.0<br>
+ 1.0 -1.0<br>
+ 1.0  1.0<br>
+-1.0  1.0<br>
+<br>
+[test]<br>
+uniform float ref 137.035999074<br>
+draw arrays GL_TRIANGLE_FAN 0 4<br>
+probe all rgba 0.0 1.0 0.0 1.0<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.3.1<br>
<br>
_______________________________________________<br>
Piglit mailing list<br>
<a href="mailto:Piglit@lists.freedesktop.org">Piglit@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/piglit" target="_blank">http://lists.freedesktop.org/mailman/listinfo/piglit</a><br>
</font></span></blockquote></div><br></div></div>