Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105670
---
 ...vs-loop-complex-unroll-nested-break.shader_test | 48 ++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 
tests/spec/glsl-1.10/execution/vs-loop-complex-unroll-nested-break.shader_test

diff --git 
a/tests/spec/glsl-1.10/execution/vs-loop-complex-unroll-nested-break.shader_test
 
b/tests/spec/glsl-1.10/execution/vs-loop-complex-unroll-nested-break.shader_test
new file mode 100644
index 000000000..42721ca79
--- /dev/null
+++ 
b/tests/spec/glsl-1.10/execution/vs-loop-complex-unroll-nested-break.shader_test
@@ -0,0 +1,48 @@
+# This tests for a bug in loop unrolling where we were detecting 2 breaks in
+# the loop but only found a single terminator (exit condition). The result was
+# we were attempting to do a complex unroll but failing half way through the
+# unroll process. As a result we ended up creating an infinite loop.
+[require]
+GLSL >= 1.10
+
+[vertex shader]
+uniform int loop_break;
+
+void main()
+{
+  gl_Position = gl_Vertex;
+
+  vec4 colour;
+  int j = 0;
+  for (int i = 0; i < 4; i++) {
+
+     colour = vec4(0.0, 1.0, 0.0, 1.0);
+
+     if (i >= 2) {
+        j++; // we use this so the if doesn't get reduced to a series of bcsel
+        if (loop_break == 1 || j == loop_break) {
+           colour = vec4(1.0, 0.0, 0.0, 1.0);
+           break;
+        }
+     }
+  }
+
+  gl_FrontColor = colour;
+}
+
+[fragment shader]
+void main()
+{
+  gl_FragColor = gl_Color;
+}
+
+[test]
+clear color 0.5 0.5 0.5 0.5
+
+uniform int loop_break 0
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
+
+uniform int loop_break 1
+draw rect -1 -1 2 2
+probe all rgba 1.0 0.0 0.0 1.0
-- 
2.14.3

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to