Commit 55a612c3 authored by Timothy Arceri's avatar Timothy Arceri

glsl-1.10: test for crash in loop analysis

This test for a crash in Mesa seen in an Assasins Creed Odyssey shader.
Reviewed-by: Andres Gomez's avatarAndres Gomez <agomez@igalia.com>
parent 9966894d
# This tests unrolling of a loop with a single exit point but where the
# exact trip count is unknown, only the max iteration count (4) is known.
#
# Here we test all possible outcomes for the loop and also add some
# unreachable code to make sure it is not accessible after unrolling.
[require]
GLSL >= 1.10
[vertex shader]
uniform int loop_count;
uniform int loop_count2;
void main()
{
gl_Position = gl_Vertex;
vec4 colour = vec4(1.0, 1.0, 1.0, 1.0);
int i = 0;
int j = 0;
int x = 0;
/* Here we add a second && and put the known limit i < 4 in parentheses in
* order to trigger a Mesa bug seen in a Assasins Creed Odyssey shader
*/
while (x < loop_count && (i < 4 && j < loop_count2)) {
if (x == 0 && i == 0)
colour = vec4(0.0, 0.25, 0.0, 1.0);
if (x == 2 && i == 1 && j == 4)
colour = vec4(0.0, 0.5, 0.0, 1.0);
if (x == 4 && i == 2 && j == 8)
colour = vec4(0.0, 0.75, 0.0, 1.0);
if (x == 6 && i == 3 && j == 12)
colour = vec4(0.0, 1.0, 0.0, 1.0);
/* This should be unreachable */
if (x >= 8 || i >= 4)
colour = vec4(1.0, 0.0, 0.0, 1.0);
i++;
x+=2;
j+=4;
}
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_count 0
uniform int loop_count2 16
draw rect -1 -1 2 2
probe all rgba 1.0 1.0 1.0 1.0
uniform int loop_count 2
uniform int loop_count2 16
draw rect -1 -1 2 2
probe all rgba 0.0 0.25 0.0 1.0
uniform int loop_count 4
uniform int loop_count2 16
draw rect -1 -1 2 2
probe all rgba 0.0 0.5 0.0 1.0
uniform int loop_count 6
uniform int loop_count2 16
draw rect -1 -1 2 2
probe all rgba 0.0 0.75 0.0 1.0
uniform int loop_count 8
uniform int loop_count2 16
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform int loop_count 10
uniform int loop_count2 16
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment