mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 21:40:08 +01:00
i965: Reverse the operands for INT DIV prior to Gen6.
Apparently on Gen4 and 5, the denominator comes first. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Tested-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
1d4f3ca8f0
commit
b9af592dfa
2 changed files with 30 additions and 4 deletions
|
|
@ -610,8 +610,21 @@ fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src0, fs_reg src1)
|
|||
|
||||
inst = emit(opcode, dst, src0, src1);
|
||||
} else {
|
||||
emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + 1, src1.type), src1);
|
||||
inst = emit(opcode, dst, src0, reg_null_f);
|
||||
/* From the Ironlake PRM, Volume 4, Part 1, Section 6.1.13
|
||||
* "Message Payload":
|
||||
*
|
||||
* "Operand0[7]. For the INT DIV functions, this operand is the
|
||||
* denominator."
|
||||
* ...
|
||||
* "Operand1[7]. For the INT DIV functions, this operand is the
|
||||
* numerator."
|
||||
*/
|
||||
bool is_int_div = opcode != SHADER_OPCODE_POW;
|
||||
fs_reg &op0 = is_int_div ? src1 : src0;
|
||||
fs_reg &op1 = is_int_div ? src0 : src1;
|
||||
|
||||
emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + 1, op1.type), op1);
|
||||
inst = emit(opcode, dst, op0, reg_null_f);
|
||||
|
||||
inst->base_mrf = base_mrf;
|
||||
inst->mlen = 2 * c->dispatch_width / 8;
|
||||
|
|
|
|||
|
|
@ -307,14 +307,27 @@ vec4_visitor::generate_math2_gen4(vec4_instruction *inst,
|
|||
struct brw_reg src0,
|
||||
struct brw_reg src1)
|
||||
{
|
||||
brw_MOV(p, retype(brw_message_reg(inst->base_mrf + 1), src1.type), src1);
|
||||
/* From the Ironlake PRM, Volume 4, Part 1, Section 6.1.13
|
||||
* "Message Payload":
|
||||
*
|
||||
* "Operand0[7]. For the INT DIV functions, this operand is the
|
||||
* denominator."
|
||||
* ...
|
||||
* "Operand1[7]. For the INT DIV functions, this operand is the
|
||||
* numerator."
|
||||
*/
|
||||
bool is_int_div = inst->opcode != SHADER_OPCODE_POW;
|
||||
struct brw_reg &op0 = is_int_div ? src1 : src0;
|
||||
struct brw_reg &op1 = is_int_div ? src0 : src1;
|
||||
|
||||
brw_MOV(p, retype(brw_message_reg(inst->base_mrf + 1), op1.type), op1);
|
||||
|
||||
brw_math(p,
|
||||
dst,
|
||||
brw_math_function(inst->opcode),
|
||||
BRW_MATH_SATURATE_NONE,
|
||||
inst->base_mrf,
|
||||
src0,
|
||||
op0,
|
||||
BRW_MATH_DATA_VECTOR,
|
||||
BRW_MATH_PRECISION_FULL);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue