mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 10:50:10 +01:00
i965/nir/vec4: Implement various rounding functions
Adds NIR ALU operations: * nir_op_ftrunc * nir_op_fceil * nir_op_ffloor * nir_op_ffrac * nir_op_fround_even Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
parent
0ce159ec7f
commit
7553a51a68
1 changed files with 35 additions and 0 deletions
|
|
@ -812,6 +812,41 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
|
|||
break;
|
||||
}
|
||||
|
||||
case nir_op_ftrunc:
|
||||
inst = emit(RNDZ(dst, op[0]));
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
case nir_op_fceil: {
|
||||
src_reg tmp = src_reg(this, glsl_type::float_type);
|
||||
tmp.swizzle =
|
||||
brw_swizzle_for_size(instr->src[0].src.is_ssa ?
|
||||
instr->src[0].src.ssa->num_components :
|
||||
instr->src[0].src.reg.reg->num_components);
|
||||
|
||||
op[0].negate = !op[0].negate;
|
||||
emit(RNDD(dst_reg(tmp), op[0]));
|
||||
tmp.negate = true;
|
||||
inst = emit(MOV(dst, tmp));
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
}
|
||||
|
||||
case nir_op_ffloor:
|
||||
inst = emit(RNDD(dst, op[0]));
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
case nir_op_ffract:
|
||||
inst = emit(FRC(dst, op[0]));
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
case nir_op_fround_even:
|
||||
inst = emit(RNDE(dst, op[0]));
|
||||
inst->saturate = instr->dest.saturate;
|
||||
break;
|
||||
|
||||
default:
|
||||
unreachable("Unimplemented ALU operation");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue