diff options
author | Paul Berry <stereotype441@gmail.com> | 2013-01-07 18:14:44 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2013-01-09 11:57:30 -0800 |
commit | 4acbb6147f0964d18ecad34bdf842995750cd8a1 (patch) | |
tree | 6fafeeaf579bb58d2a66791ae7476a85f1da4844 | |
parent | d434f710a9463589acf7d639bd6a6a82edca156d (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_test | 40 | ||||
-rw-r--r-- | tests/spec/glsl-1.10/execution/vs-loop-bounds-unrolled.shader_test | 41 |
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 |