[Mesa-dev] [PATCH 1/7] i965: Add support for AVG instruction.

Anuj Phogat anuj.phogat at gmail.com
Thu Jul 19 13:40:48 PDT 2012


On Thu, Jul 12, 2012 at 10:43 AM, Paul Berry <stereotype441 at gmail.com> wrote:
>
> From the Ivy Bridge PRM, Vol4 Part3 p152:
>
>     "The avg instruction performs component-wise integer average of
>     src0 and src1 and stores the results in dst. An integer average
>     uses integer upward rounding. It is equivalent to increment one to
>     the addition of src0 and src1 and then apply an arithmetic right
>     shift to this intermediate value."
> ---
>  src/mesa/drivers/dri/i965/brw_eu.h      |    1 +
>  src/mesa/drivers/dri/i965/brw_eu_emit.c |   22 ++++++++++++++++++++++
>  2 files changed, 23 insertions(+), 0 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_eu.h
> b/src/mesa/drivers/dri/i965/brw_eu.h
> index f25b09d..233b94c 100644
> --- a/src/mesa/drivers/dri/i965/brw_eu.h
> +++ b/src/mesa/drivers/dri/i965/brw_eu.h
> @@ -861,6 +861,7 @@ ALU2(RSL)
>  ALU2(ASR)
>  ALU2(JMPI)
>  ALU2(ADD)
> +ALU2(AVG)
>  ALU2(MUL)
>  ALU1(FRC)
>  ALU1(RNDD)
> diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c
> b/src/mesa/drivers/dri/i965/brw_eu_emit.c
> index 8de872e..93e84ae 100644
> --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
> +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
> @@ -929,6 +929,28 @@ struct brw_instruction *brw_ADD(struct brw_compile
> *p,
>     return brw_alu2(p, BRW_OPCODE_ADD, dest, src0, src1);
>  }
>
> +struct brw_instruction *brw_AVG(struct brw_compile *p,
> +                                struct brw_reg dest,
> +                                struct brw_reg src0,
> +                                struct brw_reg src1)
> +{
> +   assert(dest.type == src0.type);
> +   assert(src0.type == src1.type);
> +   switch (src0.type) {
> +   case BRW_REGISTER_TYPE_B:
> +   case BRW_REGISTER_TYPE_UB:
> +   case BRW_REGISTER_TYPE_W:
> +   case BRW_REGISTER_TYPE_UW:
> +   case BRW_REGISTER_TYPE_D:
> +   case BRW_REGISTER_TYPE_UD:
> +      break;
> +   default:
> +      assert(!"Bad type for brw_AVG");
> +   }
> +
> +   return brw_alu2(p, BRW_OPCODE_AVG, dest, src0, src1);
> +}
> +
>  struct brw_instruction *brw_MUL(struct brw_compile *p,
>                                 struct brw_reg dest,
>                                 struct brw_reg src0,
> --
> 1.7.7.6
>
This patch is
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the mesa-dev mailing list