glsl: Conditionalize atan2 math.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 19 Jan 2016 23:07:52 +0000 (15:07 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 23 Jan 2016 05:03:00 +0000 (21:03 -0800)
In the old hand-writen implementation of atan2, the calculation of
atan(y/x) was performed conditionally in the "then" block of the
outermost if statement.  I believe I accidentally lifted this out
into unconditional code when converting to IR builder.

For reference, the original hand-written IR is visible in commit
722eff674b832e2321f791c68358ef52d2a1ff25.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: Erik Faye-Lund <kusmabite@gmail.com>
src/glsl/builtin_functions.cpp

index f2e2165e8c3af85b555549bbafd57addf5bb3984..95e86df1cdd247f589956c799918e532280e68af 100644 (file)
@@ -3267,7 +3267,7 @@ builtin_builder::_atan2(const glsl_type *type)
       ir_factory outer_then(&outer_if->then_instructions, mem_ctx);
 
       /* Then...call atan(y/x) */
-      do_atan(body, glsl_type::float_type, r, div(y, x));
+      do_atan(outer_then, glsl_type::float_type, r, div(y, x));
 
       /*     ...and fix it up: */
       ir_if *inner_if = new(mem_ctx) ir_if(less(x, imm(0.0f)));