From: Nicolai Hähnle <nicolai.haeh...@amd.com> 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: mesa-sta...@lists.freedesktop.org --- 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 1ca8803..a27bead 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.head; - 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; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev