summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Arceri <tarceri@itsqueeze.com>2019-01-22 16:32:26 +1100
committerTimothy Arceri <tarceri@itsqueeze.com>2019-01-23 12:00:31 +1100
commit466ff1f14f4930cbd75b92908dbb0248a7328cda (patch)
tree1fb7605651a815b91bc2dc954f53746f6c224133
parentb379410dc3f75fe355b8518d453963e8a7ad8ea5 (diff)
arb_gpu_shader5: add more variants of the struct interpolateAt tests
-rw-r--r--tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-array-of-structs.shader_test63
-rw-r--r--tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct2.shader_test59
2 files changed, 122 insertions, 0 deletions
diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-array-of-structs.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-array-of-structs.shader_test
new file mode 100644
index 000000000..ba958f3e3
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-array-of-structs.shader_test
@@ -0,0 +1,63 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.60 spec:
+#
+# "For all of the interpolation functions, interpolant must be an l-value
+# from an in declaration; this can include a variable, a block or
+# structure member, an array element, or some combination of these."
+#
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+struct S {
+ float b; /* second variable to test that varying packing doesn't break anything */
+ vec3 a;
+};
+
+out S vs2ps[2];
+
+void main()
+{
+ gl_Position = piglit_vertex;
+
+ vs2ps[0].a.xy = piglit_vertex.xy;
+ vs2ps[1].a.z = piglit_vertex.z;
+ vs2ps[0].b = 0.0;
+ vs2ps[1].b = 1.0;
+}
+
+[fragment shader]
+#extension GL_ARB_gpu_shader5 : enable
+
+struct S {
+ float b;
+ vec3 a;
+};
+
+in S vs2ps[2];
+
+out vec4 color;
+
+void main()
+{
+ /* All pixels are fully covered, so these should be the same. */
+ vec3 tmp = vs2ps[0].a - interpolateAtCentroid(vs2ps[0].a);
+ vec3 tmp2 = vs2ps[1].a - interpolateAtCentroid(vs2ps[1].a);
+ vec3 delta = vec3(tmp.xy, tmp2.z);
+
+ if (delta != vec3(0.0)) {
+ color = vec4(1.0, delta.x + 0.5, delta.y + 0.5, delta.z + 0.5);
+ } else {
+ color = vec4(vs2ps[0].b, vs2ps[1].b, 0.0, 1.0);
+ }
+}
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct2.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct2.shader_test
new file mode 100644
index 000000000..afc1e33ca
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct2.shader_test
@@ -0,0 +1,59 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.60 spec:
+#
+# "For all of the interpolation functions, interpolant must be an l-value
+# from an in declaration; this can include a variable, a block or
+# structure member, an array element, or some combination of these."
+#
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+struct S {
+ vec2 b; /* second variable to test that varying packing doesn't break anything */
+ vec3 a;
+};
+
+out S vs2ps;
+
+void main()
+{
+ gl_Position = piglit_vertex;
+
+ vs2ps.a = piglit_vertex.xyz;
+ vs2ps.b = vec2(0.0, 1.0);
+}
+
+[fragment shader]
+#extension GL_ARB_gpu_shader5 : enable
+
+struct S {
+ vec2 b;
+ vec3 a;
+};
+
+in S vs2ps;
+
+out vec4 color;
+
+void main()
+{
+ /* All pixels are fully covered, so these should be the same. */
+ vec3 delta = vs2ps.a - interpolateAtCentroid(vs2ps.a);
+
+ if (delta != vec3(0.0)) {
+ color = vec4(1.0, delta.x + 0.5, delta.y + 0.5, delta.z + 0.5);
+ } else {
+ color = vec4(vs2ps.b.x, vs2ps.b.y, 0.0, 1.0);
+ }
+}
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0