mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-24 09:30:29 +01:00
i965/vec4/nir: implement double comparisons
v2: - Added newline before if() (Matt) Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
8a3ba03339
commit
8cdbbbd2cf
1 changed files with 19 additions and 3 deletions
|
|
@ -1394,10 +1394,26 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||
case nir_op_flt:
|
||||
case nir_op_fge:
|
||||
case nir_op_feq:
|
||||
case nir_op_fne:
|
||||
emit(CMP(dst, op[0], op[1],
|
||||
brw_conditional_for_nir_comparison(instr->op)));
|
||||
case nir_op_fne: {
|
||||
enum brw_conditional_mod conditional_mod =
|
||||
brw_conditional_for_nir_comparison(instr->op);
|
||||
|
||||
if (nir_src_bit_size(instr->src[0].src) < 64) {
|
||||
emit(CMP(dst, op[0], op[1], conditional_mod));
|
||||
} else {
|
||||
/* Produce a 32-bit boolean result from the DF comparison by selecting
|
||||
* only the low 32-bit in each DF produced. Do this in a temporary
|
||||
* so we can then move from there to the result using align16 again
|
||||
* to honor the original writemask.
|
||||
*/
|
||||
dst_reg temp = dst_reg(this, glsl_type::dvec4_type);
|
||||
emit(CMP(temp, op[0], op[1], conditional_mod));
|
||||
dst_reg result = dst_reg(this, glsl_type::bvec4_type);
|
||||
emit(VEC4_OPCODE_PICK_LOW_32BIT, result, src_reg(temp));
|
||||
emit(MOV(dst, src_reg(result)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_op_ball_iequal2:
|
||||
case nir_op_ball_iequal3:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue