[Mesa-dev] [PATCH] i965/fs: Fix Sandybridge regressions from SEL optimization.

Matt Turner mattst88 at gmail.com
Thu Aug 15 15:27:23 PDT 2013


On Tue, Aug 13, 2013 at 4:47 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> Sandybridge is the only platform that supports an IF instruction
> with an embedded comparison.  In this case, we need to emit a CMP
> to go along with the SEL.
>
> Fixes regressions in Piglit's glsl-fs-atan-3, fs-unpackHalf2x16,
> fs-faceforward-float-float-float, isinf-and-isnan fs_basic, and
> isinf-and-isnan fs_fbo.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> index a36c248..984b08a 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
> @@ -1911,10 +1911,19 @@ fs_visitor::try_replace_with_sel()
>           emit(MOV(src0, then_mov->src[0]));
>        }
>
> -      fs_inst *sel = emit(BRW_OPCODE_SEL, then_mov->dst, src0, else_mov->src[0]);
> -      sel->predicate = if_inst->predicate;
> -      sel->predicate_inverse = if_inst->predicate_inverse;
> -      sel->conditional_mod = if_inst->conditional_mod;
> +      fs_inst *sel;
> +      if (if_inst->conditional_mod) {
> +         /* Sandybridge-specific IF with embedded comparison */
> +         emit(CMP(reg_null_d, if_inst->src[0], if_inst->src[1],
> +                  if_inst->conditional_mod));
> +         sel = emit(BRW_OPCODE_SEL, then_mov->dst, src0, else_mov->src[0]);
> +         sel->predicate = BRW_PREDICATE_NORMAL;
> +      } else {
> +         /* Separate CMP and IF instructions */
> +         sel = emit(BRW_OPCODE_SEL, then_mov->dst, src0, else_mov->src[0]);
> +         sel->predicate = if_inst->predicate;
> +         sel->predicate_inverse = if_inst->predicate_inverse;
> +      }
>     }
>  }
>
> --
> 1.8.3.4

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list