ab21dfb25b
In some cases, the compiler decided to emit continue block first, which invalidated the expressions used by the condition. Parameters to functions can be evaluated in any order which caused "random" behavior.
53 lines
1010 B
GLSL
53 lines
1010 B
GLSL
#version 310 es
|
|
precision mediump float;
|
|
layout(location = 0) out int FragColor;
|
|
|
|
void main()
|
|
{
|
|
FragColor = 16;
|
|
|
|
// Basic loop variable.
|
|
for (int i = 0; i < 25; i++)
|
|
FragColor += 10;
|
|
|
|
// Multiple loop variables.
|
|
for (int i = 1, j = 4; i < 30; i++, j += 4)
|
|
FragColor += 11;
|
|
|
|
// A potential loop variables, but we access it outside the loop,
|
|
// so cannot be one.
|
|
int k = 0;
|
|
for (; k < 20; k++)
|
|
FragColor += 12;
|
|
k += 3;
|
|
FragColor += k;
|
|
|
|
// Potential loop variables, but the dominator is not trivial.
|
|
int l;
|
|
if (k == 40)
|
|
{
|
|
for (l = 0; l < 40; l++)
|
|
FragColor += 13;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
l = k;
|
|
FragColor += l;
|
|
}
|
|
|
|
// Vectors cannot be loop variables
|
|
for (ivec2 i = ivec2(0); i.x < 10; i.x += 4)
|
|
{
|
|
FragColor += i.y;
|
|
}
|
|
|
|
// Check that static expressions can be used before the loop header.
|
|
int m = 0;
|
|
m = k;
|
|
int o = m;
|
|
for (; m < 40; m++)
|
|
FragColor += m;
|
|
FragColor += o;
|
|
}
|