mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 07:18:17 +02:00
nak: Add tests for OpLop2 and OpLop3
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30381>
This commit is contained in:
parent
dc4ebfd562
commit
3353374287
2 changed files with 61 additions and 2 deletions
|
|
@ -625,6 +625,37 @@ fn test_op_isetp() {
|
|||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_op_lop2() {
|
||||
if RunSingleton::get().sm.sm() < 70 {
|
||||
let logic_ops =
|
||||
[LogicOp2::And, LogicOp2::Or, LogicOp2::Xor, LogicOp2::PassB];
|
||||
|
||||
for logic_op in logic_ops {
|
||||
let op = OpLop2 {
|
||||
dst: Dst::None,
|
||||
srcs: [0.into(), 0.into()],
|
||||
op: logic_op,
|
||||
};
|
||||
test_foldable_op(op);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_op_lop3() {
|
||||
if RunSingleton::get().sm.sm() >= 70 {
|
||||
for lut in 0..255 {
|
||||
let op = OpLop3 {
|
||||
dst: Dst::None,
|
||||
srcs: [0.into(), 0.into(), 0.into()],
|
||||
op: LogicOp3 { lut },
|
||||
};
|
||||
test_foldable_op(op);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_op_shf() {
|
||||
let sm = &RunSingleton::get().sm;
|
||||
|
|
|
|||
|
|
@ -3650,7 +3650,7 @@ impl DisplayOp for OpISetP {
|
|||
impl_display_for_op!(OpISetP);
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(SrcsAsSlice, DstsAsSlice)]
|
||||
#[derive(Clone, SrcsAsSlice, DstsAsSlice)]
|
||||
pub struct OpLop2 {
|
||||
#[dst_type(GPR)]
|
||||
pub dst: Dst,
|
||||
|
|
@ -3667,8 +3667,24 @@ impl DisplayOp for OpLop2 {
|
|||
}
|
||||
}
|
||||
|
||||
impl Foldable for OpLop2 {
|
||||
fn fold(&self, _sm: &dyn ShaderModel, f: &mut OpFoldData<'_>) {
|
||||
let srcs = [
|
||||
f.get_u32_src(self, &self.srcs[0]),
|
||||
f.get_u32_src(self, &self.srcs[1]),
|
||||
];
|
||||
let dst = match self.op {
|
||||
LogicOp2::And => srcs[0] & srcs[1],
|
||||
LogicOp2::Or => srcs[0] | srcs[1],
|
||||
LogicOp2::Xor => srcs[0] ^ srcs[1],
|
||||
LogicOp2::PassB => srcs[1],
|
||||
};
|
||||
f.set_u32_dst(self, &self.dst, dst);
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(SrcsAsSlice, DstsAsSlice)]
|
||||
#[derive(Clone, SrcsAsSlice, DstsAsSlice)]
|
||||
pub struct OpLop3 {
|
||||
#[dst_type(GPR)]
|
||||
pub dst: Dst,
|
||||
|
|
@ -3679,6 +3695,18 @@ pub struct OpLop3 {
|
|||
pub op: LogicOp3,
|
||||
}
|
||||
|
||||
impl Foldable for OpLop3 {
|
||||
fn fold(&self, _sm: &dyn ShaderModel, f: &mut OpFoldData<'_>) {
|
||||
let srcs = [
|
||||
f.get_u32_src(self, &self.srcs[0]),
|
||||
f.get_u32_src(self, &self.srcs[1]),
|
||||
f.get_u32_src(self, &self.srcs[2]),
|
||||
];
|
||||
let dst = self.op.eval(srcs[0], srcs[1], srcs[2]);
|
||||
f.set_u32_dst(self, &self.dst, dst);
|
||||
}
|
||||
}
|
||||
|
||||
impl DisplayOp for OpLop3 {
|
||||
fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue