diff --git a/src/nouveau/compiler/nak_builder.rs b/src/nouveau/compiler/nak_builder.rs index 27211f72f90..b492ce8a3d3 100644 --- a/src/nouveau/compiler/nak_builder.rs +++ b/src/nouveau/compiler/nak_builder.rs @@ -49,7 +49,7 @@ pub trait Builder { } } - fn prmt_to(&mut self, dst: Dst, x: Src, y: Src, sel: [u8;4]) { + fn prmt_to(&mut self, dst: Dst, x: Src, y: Src, sel: [u8; 4]) { if sel == [0, 1, 2, 3] { self.copy_to(dst, x); } else if sel == [4, 5, 6, 7] { @@ -227,13 +227,13 @@ pub trait SSABuilder: Builder { dst } - fn prmt(&mut self, x: Src, y: Src, sel: [u8;4]) -> SSARef { + fn prmt(&mut self, x: Src, y: Src, sel: [u8; 4]) -> SSARef { let dst = self.alloc_ssa(RegFile::GPR, 1); self.prmt_to(dst.into(), x, y, sel); dst } - fn prmt4(&mut self, src: [Src;4], sel: [u8;4]) -> SSARef { + fn prmt4(&mut self, src: [Src; 4], sel: [u8; 4]) -> SSARef { let max_sel = *sel.iter().max().unwrap(); if max_sel < 8 { self.prmt(src[0], src[1], sel) diff --git a/src/nouveau/compiler/nak_from_nir.rs b/src/nouveau/compiler/nak_from_nir.rs index 71ef1f30be3..bd68fdd98e3 100644 --- a/src/nouveau/compiler/nak_from_nir.rs +++ b/src/nouveau/compiler/nak_from_nir.rs @@ -251,10 +251,8 @@ impl<'a> ShaderFromNir<'a> { 16 => (vec[usize::from(c / 2)].into(), (c * 2) % 4), 32 => (vec[usize::from(c)].into(), 0), 64 => { - let comps = [ - vec[usize::from(c) * 2 + 0], - vec[usize::from(c) * 2 + 1], - ]; + let comps = + [vec[usize::from(c) * 2 + 0], vec[usize::from(c) * 2 + 1]]; (comps.into(), 0) } _ => panic!("Unsupported bit size: {}", def.bit_size), @@ -314,8 +312,12 @@ impl<'a> ShaderFromNir<'a> { | nir_op_pack_32_4x8_split | nir_op_pack_32_2x16_split | nir_op_pack_64_2x32_split - | nir_op_vec2 | nir_op_vec3 | nir_op_vec4 - | nir_op_vec5 | nir_op_vec8 | nir_op_vec16 => { + | nir_op_vec2 + | nir_op_vec3 + | nir_op_vec4 + | nir_op_vec5 + | nir_op_vec8 + | nir_op_vec16 => { let src_bit_size = alu.get_src(0).src.bit_size(); let bits = alu.def.num_components * alu.def.bit_size; @@ -483,9 +485,7 @@ impl<'a> ShaderFromNir<'a> { }); dst } - nir_op_extract_u8 - | nir_op_extract_i8 - | nir_op_extract_u16 + nir_op_extract_u8 | nir_op_extract_i8 | nir_op_extract_u16 | nir_op_extract_i16 => { let src1 = alu.get_src(1); let elem = src1.src.comp_as_uint(src1.swizzle[0]).unwrap(); @@ -741,8 +741,8 @@ impl<'a> ShaderFromNir<'a> { let mut prmt = [0_u8; 8]; match alu.op { - nir_op_i2i8 | nir_op_i2i16 - | nir_op_i2i32 | nir_op_i2i64 => { + nir_op_i2i8 | nir_op_i2i16 | nir_op_i2i32 + | nir_op_i2i64 => { let sign = ((src_bits / 8) - 1) | 0x8; for i in 0..8 { if i < (src_bits / 8) { @@ -752,8 +752,8 @@ impl<'a> ShaderFromNir<'a> { } } } - nir_op_u2u8 | nir_op_u2u16 - | nir_op_u2u32 | nir_op_u2u64 => { + nir_op_u2u8 | nir_op_u2u16 | nir_op_u2u32 + | nir_op_u2u64 => { for i in 0..8 { if i < (src_bits / 8) { prmt[usize::from(i)] = i; @@ -2325,40 +2325,51 @@ impl<'a> ShaderFromNir<'a> { let mut dst = Vec::new(); match load_const.def.bit_size { - 1 => for c in 0..load_const.def.num_components { - let imm_b1 = unsafe { values[usize::from(c)].b }; - dst.push(b.copy(imm_b1.into())[0]); - } - 8 => for dw in 0..load_const.def.num_components.div_ceil(4) { - let mut imm_u32 = 0; - for b in 0..4 { - let c = dw * 4 + b; - if c < load_const.def.num_components { - let imm_u8 = unsafe { values[usize::from(c)].u8_ }; - imm_u32 |= u32::from(imm_u8) << b * 8; - } + 1 => { + for c in 0..load_const.def.num_components { + let imm_b1 = unsafe { values[usize::from(c)].b }; + dst.push(b.copy(imm_b1.into())[0]); } - dst.push(b.copy(imm_u32.into())[0]); } - 16 => for dw in 0..load_const.def.num_components.div_ceil(2) { - let mut imm_u32 = 0; - for w in 0..2 { - let c = dw * 2 + w; - if c < load_const.def.num_components { - let imm_u16 = unsafe { values[usize::from(c)].u16_ }; - imm_u32 |= u32::from(imm_u16) << w * 16; + 8 => { + for dw in 0..load_const.def.num_components.div_ceil(4) { + let mut imm_u32 = 0; + for b in 0..4 { + let c = dw * 4 + b; + if c < load_const.def.num_components { + let imm_u8 = unsafe { values[usize::from(c)].u8_ }; + imm_u32 |= u32::from(imm_u8) << b * 8; + } } + dst.push(b.copy(imm_u32.into())[0]); } - dst.push(b.copy(imm_u32.into())[0]); } - 32 => for c in 0..load_const.def.num_components { - let imm_u32 = unsafe { values[usize::from(c)].u32_ }; - dst.push(b.copy(imm_u32.into())[0]); + 16 => { + for dw in 0..load_const.def.num_components.div_ceil(2) { + let mut imm_u32 = 0; + for w in 0..2 { + let c = dw * 2 + w; + if c < load_const.def.num_components { + let imm_u16 = + unsafe { values[usize::from(c)].u16_ }; + imm_u32 |= u32::from(imm_u16) << w * 16; + } + } + dst.push(b.copy(imm_u32.into())[0]); + } } - 64 => for c in 0..load_const.def.num_components { - let imm_u64 = unsafe { values[c as usize].u64_ }; - dst.push(b.copy((imm_u64 as u32).into())[0]); - dst.push(b.copy(((imm_u64 >> 32) as u32).into())[0]); + 32 => { + for c in 0..load_const.def.num_components { + let imm_u32 = unsafe { values[usize::from(c)].u32_ }; + dst.push(b.copy(imm_u32.into())[0]); + } + } + 64 => { + for c in 0..load_const.def.num_components { + let imm_u64 = unsafe { values[c as usize].u64_ }; + dst.push(b.copy((imm_u64 as u32).into())[0]); + dst.push(b.copy(((imm_u64 >> 32) as u32).into())[0]); + } } _ => panic!("Unknown bit size: {}", load_const.def.bit_size), } diff --git a/src/nouveau/compiler/nak_legalize.rs b/src/nouveau/compiler/nak_legalize.rs index 5393167d991..c3a75f12edf 100644 --- a/src/nouveau/compiler/nak_legalize.rs +++ b/src/nouveau/compiler/nak_legalize.rs @@ -194,11 +194,7 @@ fn legalize_instr(b: &mut impl SSABuilder, instr: &mut Instr) { copy_src_if_not_reg(b, &mut op.low, RegFile::GPR); copy_src_if_not_reg(b, &mut op.high, RegFile::GPR); } - Op::F2F(_) - | Op::F2I(_) - | Op::I2F(_) - | Op::Mov(_) - | Op::FRnd(_) => (), + Op::F2F(_) | Op::F2I(_) | Op::I2F(_) | Op::Mov(_) | Op::FRnd(_) => (), Op::Prmt(op) => { copy_src_if_not_reg(b, &mut op.srcs[0], RegFile::GPR); copy_src_if_not_reg(b, &mut op.srcs[1], RegFile::GPR);