mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
nak: Add dnz bits to OpFMul and OpFFma
Also, while we're here, clean up the from_nir code a bit. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26572>
This commit is contained in:
parent
97a59ded43
commit
5bfb46a735
4 changed files with 17 additions and 10 deletions
|
|
@ -190,6 +190,7 @@ pub trait SSABuilder: Builder {
|
|||
saturate: false,
|
||||
rnd_mode: FRndMode::NearestEven,
|
||||
ftz: false,
|
||||
dnz: false,
|
||||
});
|
||||
dst
|
||||
}
|
||||
|
|
|
|||
|
|
@ -437,7 +437,7 @@ impl SM70Instr {
|
|||
ALUSrc::from_src(&op.srcs[1]),
|
||||
ALUSrc::from_src(&op.srcs[2]),
|
||||
);
|
||||
self.set_bit(76, false); /* TODO: DNZ */
|
||||
self.set_bit(76, op.dnz);
|
||||
self.set_bit(77, op.saturate);
|
||||
self.set_rnd_mode(78..80, op.rnd_mode);
|
||||
self.set_bit(80, op.ftz);
|
||||
|
|
@ -463,7 +463,7 @@ impl SM70Instr {
|
|||
ALUSrc::from_src(&op.srcs[1]),
|
||||
ALUSrc::from_src(&Src::new_zero()),
|
||||
);
|
||||
self.set_bit(76, false); /* TODO: DNZ */
|
||||
self.set_bit(76, op.dnz);
|
||||
self.set_bit(77, op.saturate);
|
||||
self.set_rnd_mode(78..80, op.rnd_mode);
|
||||
self.set_bit(80, op.ftz);
|
||||
|
|
|
|||
|
|
@ -707,14 +707,14 @@ impl<'a> ShaderFromNir<'a> {
|
|||
let ftype = FloatType::from_bits(alu.def.bit_size().into());
|
||||
assert!(alu.def.bit_size() == 32);
|
||||
let dst = b.alloc_ssa(RegFile::GPR, 1);
|
||||
let ffma = OpFFma {
|
||||
b.push_op(OpFFma {
|
||||
dst: dst.into(),
|
||||
srcs: [srcs[0], srcs[1], srcs[2]],
|
||||
saturate: self.try_saturate_alu_dst(&alu.def),
|
||||
rnd_mode: self.float_ctl[ftype].rnd_mode,
|
||||
ftz: self.float_ctl[ftype].ftz,
|
||||
};
|
||||
b.push_op(ffma);
|
||||
dnz: false,
|
||||
});
|
||||
dst
|
||||
}
|
||||
nir_op_flog2 => {
|
||||
|
|
@ -736,14 +736,14 @@ impl<'a> ShaderFromNir<'a> {
|
|||
let ftype = FloatType::from_bits(alu.def.bit_size().into());
|
||||
assert!(alu.def.bit_size() == 32);
|
||||
let dst = b.alloc_ssa(RegFile::GPR, 1);
|
||||
let fmul = OpFMul {
|
||||
b.push_op(OpFMul {
|
||||
dst: dst.into(),
|
||||
srcs: [srcs[0], srcs[1]],
|
||||
saturate: self.try_saturate_alu_dst(&alu.def),
|
||||
rnd_mode: self.float_ctl[ftype].rnd_mode,
|
||||
ftz: self.float_ctl[ftype].ftz,
|
||||
};
|
||||
b.push_op(fmul);
|
||||
dnz: false,
|
||||
});
|
||||
dst
|
||||
}
|
||||
nir_op_fquantize2f16 => {
|
||||
|
|
|
|||
|
|
@ -2213,6 +2213,7 @@ pub struct OpFFma {
|
|||
pub saturate: bool,
|
||||
pub rnd_mode: FRndMode,
|
||||
pub ftz: bool,
|
||||
pub dnz: bool,
|
||||
}
|
||||
|
||||
impl DisplayOp for OpFFma {
|
||||
|
|
@ -2224,7 +2225,9 @@ impl DisplayOp for OpFFma {
|
|||
if self.rnd_mode != FRndMode::NearestEven {
|
||||
write!(f, "{}", self.rnd_mode)?;
|
||||
}
|
||||
if self.ftz {
|
||||
if self.dnz {
|
||||
write!(f, ".dnz")?;
|
||||
} else if self.ftz {
|
||||
write!(f, ".ftz")?;
|
||||
}
|
||||
write!(f, " {} {} {}", self.srcs[0], self.srcs[1], self.srcs[2])
|
||||
|
|
@ -2269,6 +2272,7 @@ pub struct OpFMul {
|
|||
pub saturate: bool,
|
||||
pub rnd_mode: FRndMode,
|
||||
pub ftz: bool,
|
||||
pub dnz: bool,
|
||||
}
|
||||
|
||||
impl DisplayOp for OpFMul {
|
||||
|
|
@ -2280,7 +2284,9 @@ impl DisplayOp for OpFMul {
|
|||
if self.rnd_mode != FRndMode::NearestEven {
|
||||
write!(f, "{}", self.rnd_mode)?;
|
||||
}
|
||||
if self.ftz {
|
||||
if self.dnz {
|
||||
write!(f, ".dnz")?;
|
||||
} else if self.ftz {
|
||||
write!(f, ".ftz")?;
|
||||
}
|
||||
write!(f, " {} {}", self.srcs[0], self.srcs[1],)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue