[Mesa-dev] [PATCH 4/4] i965/blorp: Emit MADs.

Ian Romanick idr at freedesktop.org
Thu Feb 19 15:35:55 PST 2015


Assuming that my assumption / recollection that blorp is only for GEN6+,
this patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 02/10/2015 11:10 AM, Matt Turner wrote:
> Low hanging fruit: cuts a couple of instructions.
> ---
>  src/mesa/drivers/dri/i965/brw_blorp_blit.cpp  | 6 ++----
>  src/mesa/drivers/dri/i965/brw_blorp_blit_eu.h | 9 +++++++++
>  2 files changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> index fc111ae..5c936cf 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
> @@ -1255,10 +1255,8 @@ brw_blorp_blit_program::translate_dst_to_src()
>     emit_mov(Xp_f, X);
>     emit_mov(Yp_f, Y);
>     /* Scale and offset */
> -   emit_mul(X_f, Xp_f, x_transform.multiplier);
> -   emit_mul(Y_f, Yp_f, y_transform.multiplier);
> -   emit_add(X_f, X_f, x_transform.offset);
> -   emit_add(Y_f, Y_f, y_transform.offset);
> +   emit_mad(X_f, x_transform.offset, Xp_f, x_transform.multiplier);
> +   emit_mad(Y_f, y_transform.offset, Yp_f, y_transform.multiplier);
>     if (key->blit_scaled && key->blend) {
>        /* Translate coordinates to lay out the samples in a rectangular  grid
>         * roughly corresponding to sample locations.
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.h b/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.h
> index bfad422..8e44eb4 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.h
> +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit_eu.h
> @@ -85,6 +85,15 @@ protected:
>           new (mem_ctx) fs_inst(BRW_OPCODE_LRP, 16, dst, src1, src2, src3));
>     }
>  
> +   inline void emit_mad(const struct brw_reg &dst,
> +                        const struct brw_reg &src1,
> +                        const struct brw_reg &src2,
> +                        const struct brw_reg &src3)
> +   {
> +      insts.push_tail(
> +         new (mem_ctx) fs_inst(BRW_OPCODE_MAD, 16, dst, src1, src2, src3));
> +   }
> +
>     inline void emit_min(const struct brw_reg& dst,
>                          const struct brw_reg& src1,
>                          const struct brw_reg& src2)
> 



More information about the mesa-dev mailing list