glsl: Avoid excessive loop unrolling.
authorMathias Fröhlich <Mathias.Froehlich@gmx.net>
Wed, 25 Jan 2012 16:35:01 +0000 (17:35 +0100)
committerMathias Fröhlich <Mathias.Froehlich@gmx.net>
Thu, 9 Feb 2012 20:23:16 +0000 (21:23 +0100)
commit67007080b716c7e51039a381f407ababd68230f7
tree07726358e0b898b5558eb9b6bc0b997c0d96cd14
parentea228d97f811092b9ffcb90565184a7a8f089477
glsl: Avoid excessive loop unrolling.

Avoid unrollong loops that are either nested loops or
where the loop body times the unroll count is huge.

The change is far from being perfect but it extends the
loop unrolling decision heuristic by some additional
safeguard. In particular this cuts down compilation of
a shader precomputing atmospheric scattering integral
tables containing two nesting levels in a loop from
something way beyond some minutes (I never waited for
it to finish) to some fractions of a second.

This fixes piglit tests glsl-fs-unroll-explosion and
glsl-vs-unroll-explosion on r600g.

Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
src/glsl/loop_unroll.cpp