aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2013-01-07 18:14:44 -0800
committerEric Anholt <eric@anholt.net>2013-01-09 11:57:30 -0800
commit4acbb6147f0964d18ecad34bdf842995750cd8a1 (patch)
tree6fafeeaf579bb58d2a66791ae7476a85f1da4844
parentd434f710a9463589acf7d639bd6a6a82edca156d (diff)
Test that loop unrolling properly infers loop bounds.
This patch introduces new vs and fs tests to provoke a bug in Mesa which caused loop bounds to be inferred incorrectly when the loop condition was expressed in an unusual way (e.g. "4 > i" instead of "i < 4"). Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--tests/spec/glsl-1.10/execution/fs-loop-bounds-unrolled.shader_test40
-rw-r--r--tests/spec/glsl-1.10/execution/vs-loop-bounds-unrolled.shader_test41
2 files changed, 81 insertions, 0 deletions
diff --git a/tests/spec/glsl-1.10/execution/fs-loop-bounds-unrolled.shader_test b/tests/spec/glsl-1.10/execution/fs-loop-bounds-unrolled.shader_test
new file mode 100644
index 00000000..40fa6b74
--- /dev/null
+++ b/tests/spec/glsl-1.10/execution/fs-loop-bounds-unrolled.shader_test
@@ -0,0 +1,40 @@
+# This test verifies that loop unrolling properly interprets a variety
+# of ways of specifying loop bounds.
+
+[vertex shader]
+void main()
+{
+ gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+void main()
+{
+ int sum;
+ int i;
+ bool failed = false;
+
+ sum = 0; for (i = 10; i < 14; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; i <= 13; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; 14 > i; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; 13 >= i; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; i != 14; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; 14 != i; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; i == 10; i++) sum += i; if (sum != 10) failed = true;
+ sum = 0; for (i = 10; 10 == i; i++) sum += i; if (sum != 10) failed = true;
+
+ sum = 0; for (i = 13; i > 9; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; i >= 10; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; 9 < i; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; 10 <= i; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; i != 9; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; 9 != i; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; i == 13; i--) sum += i; if (sum != 13) failed = true;
+ sum = 0; for (i = 13; 13 == i; i--) sum += i; if (sum != 13) failed = true;
+
+ gl_FragColor = failed ? vec4(1.0, 0.0, 0.0, 1.0) : vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0
diff --git a/tests/spec/glsl-1.10/execution/vs-loop-bounds-unrolled.shader_test b/tests/spec/glsl-1.10/execution/vs-loop-bounds-unrolled.shader_test
new file mode 100644
index 00000000..c9d47f3d
--- /dev/null
+++ b/tests/spec/glsl-1.10/execution/vs-loop-bounds-unrolled.shader_test
@@ -0,0 +1,41 @@
+# This test contains a variety of loops that are likely to be unrolled
+# by the implementation, and verifies that they all execute correctly.
+
+[vertex shader]
+void main()
+{
+ gl_Position = gl_Vertex;
+ int sum;
+ int i;
+ bool failed = false;
+
+ sum = 0; for (i = 10; i < 14; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; i <= 13; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; 14 > i; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; 13 >= i; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; i != 14; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; 14 != i; i++) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 10; i == 10; i++) sum += i; if (sum != 10) failed = true;
+ sum = 0; for (i = 10; 10 == i; i++) sum += i; if (sum != 10) failed = true;
+
+ sum = 0; for (i = 13; i > 9; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; i >= 10; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; 9 < i; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; 10 <= i; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; i != 9; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; 9 != i; i--) sum += i; if (sum != 46) failed = true;
+ sum = 0; for (i = 13; i == 13; i--) sum += i; if (sum != 13) failed = true;
+ sum = 0; for (i = 13; 13 == i; i--) sum += i; if (sum != 13) failed = true;
+
+ gl_FrontColor = failed ? vec4(1.0, 0.0, 0.0, 1.0) : vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+[fragment shader]
+void main()
+{
+ gl_FragColor = gl_Color;
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgba 0.0 1.0 0.0 1.0