[Piglit] [PATCH 1/3] arb_gpu_shader5: add execution tests for interpolateAt* with input in an interface block
Nicolai Hähnle
nhaehnle at gmail.com
Fri Jun 16 20:34:30 UTC 2017
From: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
...s-interpolateAtCentroid-block-array.shader_test | 73 +++++++++++++++++++++
.../fs-interpolateAtCentroid-block.shader_test | 62 ++++++++++++++++++
.../fs-interpolateAtOffset-block-array.shader_test | 75 ++++++++++++++++++++++
.../fs-interpolateAtOffset-block.shader_test | 66 +++++++++++++++++++
.../fs-interpolateAtSample-block-array.shader_test | 75 ++++++++++++++++++++++
.../fs-interpolateAtSample-block.shader_test | 62 ++++++++++++++++++
6 files changed, 413 insertions(+)
create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block-array.shader_test
create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block.shader_test
create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-block-array.shader_test
create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-block.shader_test
create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-block-array.shader_test
create mode 100644 tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-block.shader_test
diff --git a/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block-array.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block-array.shader_test
new file mode 100644
index 0000000..f245bee
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block-array.shader_test
@@ -0,0 +1,73 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+# "For all of the interpolation functions, interpolant must be an input
+# variable or an element of an input variable declared as an array."
+#
+# From Section 4.3.9 (Interface Blocks) of the GLSL 4.50 spec:
+#
+# "Input, output, uniform, and buffer variable declarations can be grouped
+# into named interface blocks to provide coarser granularity backing than
+# is achievable with individual declarations."
+#
+# So the members of an input interface block should still be considered as
+# input variables and therefore acceptable as interpolants.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+out VS2PS {
+ vec3 a[2];
+} vs2ps;
+
+void main()
+{
+ gl_Position = piglit_vertex;
+
+ vs2ps.a[0] = piglit_vertex.xyz;
+ vs2ps.a[1] = piglit_vertex.zxy;
+}
+
+[fragment shader]
+#extension GL_ARB_gpu_shader5 : enable
+
+in VS2PS {
+ vec3 a[2];
+} vs2ps;
+
+uniform int u_idx;
+
+out vec4 color;
+
+void main()
+{
+ /* All pixels are fully covered, so these should be the same. */
+ vec3 delta = vs2ps.a[u_idx] - interpolateAtCentroid(vs2ps.a[u_idx]);
+
+ if (delta != vec3(0.0)) {
+ color = vec4(1.0, delta.x + 0.5, delta.y + 0.5, delta.z + 0.5);
+ } else {
+ color = vec4(0.0, 1.0, 0.0, 1.0);
+ }
+}
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform int u_idx 0
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform int u_idx 1
+
+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-block.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block.shader_test
new file mode 100644
index 0000000..79b4064
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtCentroid-block.shader_test
@@ -0,0 +1,62 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+# "For all of the interpolation functions, interpolant must be an input
+# variable or an element of an input variable declared as an array."
+#
+# From Section 4.3.9 (Interface Blocks) of the GLSL 4.50 spec:
+#
+# "Input, output, uniform, and buffer variable declarations can be grouped
+# into named interface blocks to provide coarser granularity backing than
+# is achievable with individual declarations."
+#
+# So the members of an input interface block should still be considered as
+# input variables and therefore acceptable as interpolants.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+out VS2PS {
+ vec3 a;
+ vec2 b; /* second variable to test that varying packing doesn't break anything */
+} 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
+
+in VS2PS {
+ vec3 a;
+ vec2 b;
+} 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-block-array.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-block-array.shader_test
new file mode 100644
index 0000000..367304f
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-block-array.shader_test
@@ -0,0 +1,75 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+# "For all of the interpolation functions, interpolant must be an input
+# variable or an element of an input variable declared as an array."
+#
+# From Section 4.3.9 (Interface Blocks) of the GLSL 4.50 spec:
+#
+# "Input, output, uniform, and buffer variable declarations can be grouped
+# into named interface blocks to provide coarser granularity backing than
+# is achievable with individual declarations."
+#
+# So the members of an input interface block should still be considered as
+# input variables and therefore acceptable as interpolants.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+out VS2PS {
+ vec3 a[2];
+} vs2ps;
+
+void main()
+{
+ gl_Position = piglit_vertex;
+
+ vs2ps.a[0] = piglit_vertex.xyz;
+ vs2ps.a[1] = piglit_vertex.zxy;
+}
+
+[fragment shader]
+#extension GL_ARB_gpu_shader5 : enable
+
+in VS2PS {
+ vec3 a[2];
+} vs2ps;
+
+uniform int u_idx;
+uniform vec2 u_offset;
+
+out vec4 color;
+
+void main()
+{
+ /* u_offset is always 0, so these should be the same. */
+ vec3 delta = vs2ps.a[u_idx] - interpolateAtOffset(vs2ps.a[u_idx], 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(0.0, 1.0, 0.0, 1.0);
+ }
+}
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform vec2 u_offset 0 0
+uniform int u_idx 0
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform int u_idx 1
+
+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-block.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-block.shader_test
new file mode 100644
index 0000000..dc34e8a
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtOffset-block.shader_test
@@ -0,0 +1,66 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+# "For all of the interpolation functions, interpolant must be an input
+# variable or an element of an input variable declared as an array."
+#
+# From Section 4.3.9 (Interface Blocks) of the GLSL 4.50 spec:
+#
+# "Input, output, uniform, and buffer variable declarations can be grouped
+# into named interface blocks to provide coarser granularity backing than
+# is achievable with individual declarations."
+#
+# So the members of an input interface block should still be considered as
+# input variables and therefore acceptable as interpolants.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+out VS2PS {
+ vec3 a;
+ vec2 b; /* second variable to test that varying packing doesn't break anything */
+} 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
+
+in VS2PS {
+ vec3 a;
+ vec2 b;
+} 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-block-array.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-block-array.shader_test
new file mode 100644
index 0000000..621cefb
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-block-array.shader_test
@@ -0,0 +1,75 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+# "For all of the interpolation functions, interpolant must be an input
+# variable or an element of an input variable declared as an array."
+#
+# From Section 4.3.9 (Interface Blocks) of the GLSL 4.50 spec:
+#
+# "Input, output, uniform, and buffer variable declarations can be grouped
+# into named interface blocks to provide coarser granularity backing than
+# is achievable with individual declarations."
+#
+# So the members of an input interface block should still be considered as
+# input variables and therefore acceptable as interpolants.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+out VS2PS {
+ vec3 a[2];
+} vs2ps;
+
+void main()
+{
+ gl_Position = piglit_vertex;
+
+ vs2ps.a[0] = piglit_vertex.xyz;
+ vs2ps.a[1] = piglit_vertex.zxy;
+}
+
+[fragment shader]
+#extension GL_ARB_gpu_shader5 : enable
+
+in VS2PS {
+ vec3 a[2];
+} vs2ps;
+
+uniform int u_idx;
+
+out vec4 color;
+
+void main()
+{
+ /* There is no multi-sampling, so these should be the same. */
+ vec3 delta = vs2ps.a[u_idx] - interpolateAtSample(vs2ps.a[u_idx], 0);
+
+ delta.yz = vec2(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(0.0, 1.0, 0.0, 1.0);
+ }
+}
+
+[test]
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform int u_idx 0
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform int u_idx 1
+
+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-block.shader_test b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-block.shader_test
new file mode 100644
index 0000000..3b8e78c
--- /dev/null
+++ b/tests/spec/arb_gpu_shader5/execution/built-in-functions/fs-interpolateAtSample-block.shader_test
@@ -0,0 +1,62 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+# "For all of the interpolation functions, interpolant must be an input
+# variable or an element of an input variable declared as an array."
+#
+# From Section 4.3.9 (Interface Blocks) of the GLSL 4.50 spec:
+#
+# "Input, output, uniform, and buffer variable declarations can be grouped
+# into named interface blocks to provide coarser granularity backing than
+# is achievable with individual declarations."
+#
+# So the members of an input interface block should still be considered as
+# input variables and therefore acceptable as interpolants.
+
+[require]
+GLSL >= 1.50
+GL_ARB_gpu_shader5
+
+[vertex shader]
+in vec4 piglit_vertex;
+
+out VS2PS {
+ vec3 a;
+ vec2 b; /* second variable to test that varying packing doesn't break anything */
+} 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
+
+in VS2PS {
+ vec3 a;
+ vec2 b;
+} 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
--
2.9.3
More information about the Piglit
mailing list