On Tue, Aug 13, 2013 at 4:47 PM, Kenneth Graunke <kenn...@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 <kenn...@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 <matts...@gmail.com>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to