[Mesa-dev] [PATCH] glsl: fix optimization of discard nested multiple levels

Kenneth Graunke kenneth at whitecape.org
Tue Jul 26 22:17:07 UTC 2016


On Tuesday, July 26, 2016 10:14:12 AM PDT Nicolai Hähnle wrote:
> From: Nicolai Hähnle <nicolai.haehnle at 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-stable at 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;
> 

Whoops, thanks for fixing this!

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160726/bd8a89b7/attachment-0001.sig>


More information about the mesa-dev mailing list