nak: Implement nir_op_ufind_msb_rev

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26550>
This commit is contained in:
Faith Ekstrand
2023-12-06 08:15:00 -06:00
committed by Marge Bot
parent a3bceafed5
commit 9b68c77abb
2 changed files with 13 additions and 3 deletions

View File

@@ -136,6 +136,7 @@ fn nir_options(dev: &nv_device_info) -> nir_shader_compiler_options {
// We set .ftz on f32 by default so we can support fmulz whenever the client
// doesn't explicitly request denorms.
op.has_fmulz_no_denorms = true;
op.has_find_msb_rev = true;
op.has_pack_half_2x16_rtz = true;
op.max_unroll_iterations = 32;

View File

@@ -1015,13 +1015,22 @@ impl<'a> ShaderFromNir<'a> {
b.isetp(IntCmpType::I32, IntCmpOp::Eq, srcs[0], srcs[1])
}
}
nir_op_ifind_msb | nir_op_ufind_msb => {
nir_op_ifind_msb | nir_op_ifind_msb_rev | nir_op_ufind_msb
| nir_op_ufind_msb_rev => {
let dst = b.alloc_ssa(RegFile::GPR, 1);
b.push_op(OpFlo {
dst: dst.into(),
src: srcs[0],
signed: alu.op == nir_op_ifind_msb,
return_shift_amount: false,
signed: match alu.op {
nir_op_ifind_msb | nir_op_ifind_msb_rev => true,
nir_op_ufind_msb | nir_op_ufind_msb_rev => false,
_ => panic!("Not a find_msb op"),
},
return_shift_amount: match alu.op {
nir_op_ifind_msb | nir_op_ufind_msb => false,
nir_op_ifind_msb_rev | nir_op_ufind_msb_rev => true,
_ => panic!("Not a find_msb op"),
},
});
dst
}