[gles2] 18 else case will cause Exceeded max instructions
Submitted by Hai
Assigned to Eric Anholt @anholt
Description
System Environment:
Libdrm: (master)2.4.22-17-g1443bea488f6ad47cb4469c01b35aea0377822c0
Mesa: (master)c6ea4c0e
Xserver:
(server-1.9-branch)xorg-server-1.9.2.901-12-g65f2ab20b22914a142497057cc8919a357829a95
Xf86_video_intel:
(master)2.13.901-5-g0bb135c40e5ac1bf7593ec1d68d2815cbf47aa25
Cairo: (master)f238da5291cdb347daa0be64ecc393fc519c4ead
Kernel: (drm-intel-fixes) 1bb95834bbcdc969e477a9284cf96c17a4c2616f
Bug detailed description:
This is for opengles2 conformance test. If run on Pineview the reported error is: EGL_VERSION = 1.4 (DRI2) i915_program_error: Exceeded max instructions (687 out of 123)
Reproduce steps:
./gles2_shader_runner 1.shader_test -auto Following is the content of 1.shader_test
[require] GLES >= 2.0 ESSL >= 1.00
[vertex shader] attribute highp vec4 piglit_Position; varying vec4 texcoords;
void main() { gl_Position = piglit_Position; texcoords = (piglit_Position + 1.0) / 2.0; }
[fragment shader] varying vec4 texcoords;
void main() { int i = 0; float f[20]; vec4 color = vec4(0.0);
f[0] = 0.0;
f[1] = 0.1;
f[2] = 0.2;
f[3] = 0.3;
f[4] = 0.4;
f[5] = 0.5;
f[6] = 0.6;
f[7] = 0.7;
f[8] = 0.8;
f[9] = 0.9;
f[10] = 1.0;
f[11] = 1.1;
f[12] = 1.2;
f[13] = 1.3;
f[14] = 1.4;
f[15] = 1.5;
f[16] = 1.6;
f[17] = 1.7;
f[18] = 1.8;
f[19] = 1.9;
if (f[i] > f[i+1])
{
color.r = 0.01;
}
else if (f[i] > f[i+1])
{
color.r = 0.02;
}
else if (f[i] > f[i+1])
{
color.r = 0.03;
}
else if (f[i] > f[i+1])
{
color.r = 0.04;
}
else if (f[i] > f[i+1])
{
color.r = 0.05;
}
else if (f[i] > f[i+1])
{
color.r = 0.06;
}
else if (f[i] > f[i+1])
{
color.r = 0.07;
}
else if (f[i] > f[i+1])
{
color.r = 0.08;
}
else if (f[i] > f[i+1])
{
color.r = 0.09;
}
else if (f[i] > f[i+1])
{
color.r = 0.1;
}
else if (f[i] > f[i+1])
{
color.r = 0.11;
}
else if (f[i] > f[i+1])
{
color.r = 0.12;
}
else if (f[i] > f[i+1])
{
color.r = 0.13;
}
else if (f[i] > f[i+1])
{
color.r = 0.14;
}
else if (f[i] > f[i+1])
{
color.r = 0.15;
}
else if (f[i] > f[i+1])
{
color.r = 0.16;
}
else if (f[i] > f[i+1])
{
color.r = 0.17;
}
else if (f[i] > f[i+1])
{
color.r = 0.18;
}
else
{
color.r = 0.19;
}
gl_FragColor = color;
}
[test] draw rect -1 -1 2 2 relative probe rgb (0.25, 0.25) (0.19, 0.0, 0.0)