[Piglit] [PATCH] glsl-1.20: vector function inout self assignment tests

Timothy Arceri t_arceri at yahoo.com.au
Tue Nov 3 16:09:54 PST 2015


From: Timothy Arceri <timothy.arceri at collabora.com>

vs-array-inout-self-assignment-vec2: Tests for nir assert.

vs-array-inout-self-assignment-vec2-swizzle: Test that the assignment
is not optimised out if it involves a swizzle.

Cc: Ilia Mirkin <imirkin at alum.mit.edu>
---
 ...-inout-self-assignment-vec2-swizzle.shader_test | 44 +++++++++++++++++++
 ...vs-array-inout-self-assignment-vec2.shader_test | 49 ++++++++++++++++++++++
 2 files changed, 93 insertions(+)
 create mode 100644 tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2-swizzle.shader_test
 create mode 100644 tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2.shader_test

diff --git a/tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2-swizzle.shader_test b/tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2-swizzle.shader_test
new file mode 100644
index 0000000..5ca4030
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2-swizzle.shader_test
@@ -0,0 +1,44 @@
+// Tests to make sure we don't optimise out an assignment that involves an
+// array element being swizzled then assigned back to the same element.
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 120
+varying vec4 color;
+
+void array_mod(inout vec2 b[2])
+{
+  b[0] = vec2(2.0);
+  b[1] = b[1].yx;
+}
+
+void main()
+{
+  vec2 a[2];
+
+  a[0] = vec2(1.0);
+  a[1] = vec2(1.0, 2.0);
+  array_mod(a);
+
+  if (a[0] == vec2(2.0) && a[1] == vec2(2.0, 1.0)) {
+    color = vec4(0, 1, 0, 1);
+  } else {
+    color = vec4(1, 0, 0, 1);
+  }
+
+  gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+#version 120
+varying vec4 color;
+
+void main()
+{
+  gl_FragColor = color;
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgb 0 1 0
diff --git a/tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2.shader_test b/tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2.shader_test
new file mode 100644
index 0000000..65bd10e
--- /dev/null
+++ b/tests/spec/glsl-1.20/execution/vs-array-inout-self-assignment-vec2.shader_test
@@ -0,0 +1,49 @@
+// Tests a scenario in Mesa with function inout parameters which only
+// seems to appear when an assignment is done to an array element followed by
+// an assignment to another element where the element is assigned to itself.
+//
+// The result is we end up with an assignment in the IR where the lhs and rhs
+// are referencing the same variable. This ends up tripping an assert,
+// presumably the assignment should just be detected and optimised out. 
+[require]
+GLSL >= 1.20
+
+[vertex shader]
+#version 120
+varying vec4 color;
+
+void array_mod(inout vec2 b[2])
+{
+  b[0] = vec2(2.0);
+  b[1] = b[1].xy;
+}
+
+void main()
+{
+  vec2 a[2];
+
+  a[0] = vec2(1.0);
+  a[1] = vec2(1.0, 2.0);
+  array_mod(a);
+
+  if (a[0] == vec2(2.0) && a[1] == vec2(1.0, 2.0)) {
+    color = vec4(0, 1, 0, 1);
+  } else {
+    color = vec4(1, 0, 0, 1);
+  }
+
+  gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+#version 120
+varying vec4 color;
+
+void main()
+{
+  gl_FragColor = color;
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgb 0 1 0
-- 
2.4.3



More information about the Piglit mailing list