glsl: Fix depth unbalancing problem in if-statement flattening
authorIan Romanick <ian.d.romanick@intel.com>
Thu, 2 Jun 2011 19:42:48 +0000 (12:42 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 27 Jun 2011 21:00:14 +0000 (14:00 -0700)
commitd2c6cef18aa37d197eb323a0795969d271d02819
treead23380797bed3c7c589d7e89a7d4db1b55425d6
parentc191c87c81deafd3c8e2ea48251c8e0a1cc65253
glsl: Fix depth unbalancing problem in if-statement flattening

Previously, if max_depth were 1, the following code would see the
first if-statement (correctly) not get flattened, but the second
if-statement would (incorrectly) get flattened:

void main()
{
    if (a)
        gl_Position = vec4(0);

    if (b)
        gl_Position = vec4(1);
}

This is because the visit_leave(ir_if*) method would not decrement the
depth before returning on the first if-statement.

NOTE: This is a candidate for the 7.10 and 7.11 branches.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/lower_if_to_cond_assign.cpp