Module: Mesa Branch: master Commit: 21556d86fc74d91ab58a7496a876ad33e0f950df URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=21556d86fc74d91ab58a7496a876ad33e0f950df
Author: Nicolai Hähnle <[email protected]> Date: Tue Jul 26 10:04:57 2016 +0200 glsl: fix optimization of discard nested multiple levels The order of optimizations can lead to the conditional discard optimization being applied twice to the same discard statement. In this case, we must ensure that both conditions are applied. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96762 Cc: [email protected] Tested-by: Kai Wasserbäch <[email protected]> Reviewed-by: Tapani Pälli <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]> --- src/compiler/glsl/opt_conditional_discard.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/opt_conditional_discard.cpp b/src/compiler/glsl/opt_conditional_discard.cpp index 03665c3..6d8a234 100644 --- a/src/compiler/glsl/opt_conditional_discard.cpp +++ b/src/compiler/glsl/opt_conditional_discard.cpp @@ -72,7 +72,14 @@ opt_conditional_discard_visitor::visit_leave(ir_if *ir) /* Move the condition and replace the ir_if with the ir_discard. */ ir_discard *discard = (ir_discard *) ir->then_instructions.get_head_raw(); - discard->condition = ir->condition; + if (!discard->condition) + discard->condition = ir->condition; + else { + void *ctx = ralloc_parent(ir); + discard->condition = new(ctx) ir_expression(ir_binop_logic_and, + ir->condition, + discard->condition); + } ir->replace_with(discard); progress = true; _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
