[01/15] arb_gpu_shader5: add interpolateAt* tests with input in a struct

Submitted by Marek Olšák on March 26, 2018, 11:32 p.m.

Details

Message ID 20180326233255.18529-1-maraeo@gmail.com
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in Piglit

Not browsing as part of any series.

Commit Message

Marek Olšák March 26, 2018, 11:32 p.m.
From: Nicolai Hähnle <nicolai.haehnle@amd.com>

The fact that this should be allowed was clarified in GLSL 4.60.
---
 .../fs-interpolateAtCentroid-struct.shader_test    | 59 ++++++++++++++++++++
 .../fs-interpolateAtOffset-struct.shader_test      | 63 ++++++++++++++++++++++
 .../fs-interpolateAtSample-struct.shader_test      | 59 ++++++++++++++++++++
 3 files changed, 181 insertions(+)
 create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.shader_test
 create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.shader_test
 create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-struct.shader_test

Patch hide | download patch | download mbox

diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.shader_test
new file mode 100644
index 000000000..081ba2b10
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-struct.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 {
+   vec3 a;
+   vec2 b; /* second variable to test that varying packing doesn't break anything */
+};
+
+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 {
+   vec3 a;
+   vec2 b;
+};
+
+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
diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.shader_test
new file mode 100644
index 000000000..93a507daf
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-struct.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 {
+   vec3 a;
+   vec2 b; /* second variable to test that varying packing doesn't break anything */
+};
+
+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 {
+   vec3 a;
+   vec2 b;
+};
+
+in S vs2ps;
+
+uniform vec2 u_offset;
+
+out vec4 color;
+
+void main()
+{
+   /* u_offset is always 0, so these should be the same. */
+   vec3 delta = vs2ps.a - interpolateAtOffset(vs2ps.a, u_offset);
+
+   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
+
+uniform vec2 u_offset 0 0
+
+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-interpolateAtSample-struct.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-struct.shader_test
new file mode 100644
index 000000000..4bb07e8a5
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-struct.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 {
+   vec3 a;
+   vec2 b; /* second variable to test that varying packing doesn't break anything */
+};
+
+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 {
+   vec3 a;
+   vec2 b;
+};
+
+in S vs2ps;
+
+out vec4 color;
+
+void main()
+{
+   /* There is no multi-sampling, so these should be the same. */
+   vec3 delta = vs2ps.a - interpolateAtSample(vs2ps.a, 0);
+
+   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