nak: Manually flush denorms for nir_op_fquantize2f16 pre-Volta
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30402>
This commit is contained in:
committed by
Marge Bot
parent
315e8d6faa
commit
7b84319ec4
@@ -1160,7 +1160,25 @@ impl<'a> ShaderFromNir<'a> {
|
||||
high: false,
|
||||
integer_rnd: false,
|
||||
});
|
||||
dst
|
||||
if b.sm() < 70 {
|
||||
// Pre-Volta, F2F.ftz doesn't flush denorms so we need to do
|
||||
// that manually
|
||||
let denorm = b.alloc_ssa(RegFile::Pred, 1);
|
||||
b.push_op(OpFSetP {
|
||||
dst: denorm.into(),
|
||||
set_op: PredSetOp::And,
|
||||
cmp_op: FloatCmpOp::OrdLt,
|
||||
srcs: [srcs[0].fabs(), 0x38800000.into()],
|
||||
accum: true.into(),
|
||||
ftz: false,
|
||||
});
|
||||
// Get the correctly signed zero
|
||||
let zero =
|
||||
b.lop2(LogicOp2::And, srcs[0], 0x80000000.into());
|
||||
b.sel(denorm.into(), zero.into(), dst.into())
|
||||
} else {
|
||||
dst
|
||||
}
|
||||
}
|
||||
nir_op_frcp => {
|
||||
assert!(alu.def.bit_size() == 32);
|
||||
|
||||
Reference in New Issue
Block a user