mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 19:30:11 +01:00
i965: Mask out higher bits of the result of BRW_CMP producing a boolean.
When it says it sets the LSB, that's not just a hint as to where the result goes. Only the LSB is modified. Fixes 20 piglit cases.
This commit is contained in:
parent
4229a93cc7
commit
38d01c5b27
1 changed files with 6 additions and 0 deletions
|
|
@ -710,26 +710,32 @@ fs_visitor::visit(ir_expression *ir)
|
|||
case ir_binop_less:
|
||||
inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
|
||||
inst->conditional_mod = BRW_CONDITIONAL_L;
|
||||
emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
|
||||
break;
|
||||
case ir_binop_greater:
|
||||
inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
|
||||
inst->conditional_mod = BRW_CONDITIONAL_G;
|
||||
emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
|
||||
break;
|
||||
case ir_binop_lequal:
|
||||
inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
|
||||
inst->conditional_mod = BRW_CONDITIONAL_LE;
|
||||
emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
|
||||
break;
|
||||
case ir_binop_gequal:
|
||||
inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
|
||||
inst->conditional_mod = BRW_CONDITIONAL_GE;
|
||||
emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
|
||||
break;
|
||||
case ir_binop_equal:
|
||||
inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
|
||||
inst->conditional_mod = BRW_CONDITIONAL_Z;
|
||||
emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
|
||||
break;
|
||||
case ir_binop_nequal:
|
||||
inst = emit(fs_inst(BRW_OPCODE_CMP, this->result, op[0], op[1]));
|
||||
inst->conditional_mod = BRW_CONDITIONAL_NZ;
|
||||
emit(fs_inst(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)));
|
||||
break;
|
||||
|
||||
case ir_binop_logic_xor:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue