mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
i965: Add support for AVG instruction.
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."
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
This commit is contained in:
parent
9544e44262
commit
6a27506181
2 changed files with 23 additions and 0 deletions
|
|
@ -861,6 +861,7 @@ ALU2(RSL)
|
|||
ALU2(ASR)
|
||||
ALU2(JMPI)
|
||||
ALU2(ADD)
|
||||
ALU2(AVG)
|
||||
ALU2(MUL)
|
||||
ALU1(FRC)
|
||||
ALU1(RNDD)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue