# [Piglit] [PATCH 2/3] arb_gpu_shader5: add interpolateAtSample tests with input in an array

Nicolai Hähnle nhaehnle at gmail.com
Fri Jun 16 20:34:31 UTC 2017

```From: Nicolai Hähnle <nicolai.haehnle at amd.com>

---
2 files changed, 135 insertions(+)

new file mode 100644
index 0000000..0aac1ab
--- /dev/null
@@ -0,0 +1,59 @@
+# From Section 8.13.2 (Interpolation Functions) of the GLSL 4.50 spec:
+#
+#   "Arrayed inputs can be indexed with general (nonuniform) integer
+#    expressions."
+#
+
+[require]
+GLSL >= 1.50
+
+in vec4 piglit_vertex;
+
+out vec3 a[2];
+
+void main()
+{
+   gl_Position = piglit_vertex;
+
+   a[0] = piglit_vertex.xyz;
+   a[1] = piglit_vertex.zxy;
+}
+
+
+in vec3 a[2];
+
+out vec4 color;
+
+void main()
+{
+   ivec2 coord = ivec2(gl_FragCoord.xy);
+   int index =
+      /* Generate a pattern where some quads have alternating index on the X-axis,
+       * some on the Y-axis, and some on both or none. */
+      ((coord.x >> 1) & (coord.x)) ^
+      ((coord.y >> 1) & (coord.y)) ^
+      /* Flip the overall orientation of the alternating index within quads. */
+      (coord.x >> 2) ^ (coord.y >> 2);
+
+   index = index & 1;
+
+   /* There is no multi-sampling, so these should be the same. */
+   vec3 delta = a[index] - interpolateAtSample(a[index], 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
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
new file mode 100644
index 0000000..8d18cf3
--- /dev/null
@@ -0,0 +1,76 @@
+[require]
+GLSL >= 1.50
+GL_ARB_arrays_of_arrays
+
+#extension GL_ARB_arrays_of_arrays : enable
+
+in vec4 piglit_vertex;
+
+out vec3 a[2][2];
+
+void main()
+{
+   gl_Position = piglit_vertex;
+
+   a[0][0] = piglit_vertex.xyz;
+   a[0][1] = piglit_vertex.zxy;
+   a[1][0] = piglit_vertex.xzy;
+   a[1][1] = piglit_vertex.zyx;
+}
+
+#extension GL_ARB_arrays_of_arrays : enable
+
+in vec3 a[2][2];
+
+uniform int u_idx;
+
+out vec4 color;
+
+void main()
+{
+   /* There is no multi-sampling, so these should be the same. */
+   vec3 delta = a[u_idx / 2][u_idx % 2] - interpolateAtSample(a[u_idx / 2][u_idx % 2], 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
+
+clear color 0.0 0.0 0.0 0.0
+clear
+
+uniform int u_idx 2
+
+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 3
+
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
--
2.9.3

```