Module: Mesa Branch: main Commit: 45686ec0bac554697a4389774fb7b9f35b640801 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=45686ec0bac554697a4389774fb7b9f35b640801
Author: Faith Ekstrand <[email protected]> Date: Mon Dec 4 09:02:31 2023 -0600 nak: Replace OpBMov with OpBClear This is all we're using it for right now and an op that simply clears has far more obvious semantics than something which reads from and then clears its source. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26463> --- src/nouveau/compiler/nak_encode_sm70.rs | 29 +++----------- src/nouveau/compiler/nak_from_nir.rs | 12 ++---- src/nouveau/compiler/nak_ir.rs | 67 ++++----------------------------- src/nouveau/compiler/nak_legalize.rs | 2 +- 4 files changed, 18 insertions(+), 92 deletions(-) diff --git a/src/nouveau/compiler/nak_encode_sm70.rs b/src/nouveau/compiler/nak_encode_sm70.rs index 843760aefae..f625a27bfb3 100644 --- a/src/nouveau/compiler/nak_encode_sm70.rs +++ b/src/nouveau/compiler/nak_encode_sm70.rs @@ -1664,32 +1664,13 @@ impl SM70Instr { self.set_field(range, rel_offset); } - fn encode_bmov(&mut self, op: &OpBMov) { + fn encode_bclear(&mut self, op: &OpBClear) { self.set_opcode(0x355); - self.set_dst(op.dst); - let src = match op.src { - BMovSrc::Barrier(bar) => bar.idx(), - BMovSrc::TreadStateEnum0 => 0x10, - BMovSrc::TreadStateEnum1 => 0x11, - BMovSrc::TreadStateEnum2 => 0x12, - BMovSrc::TreadStateEnum3 => 0x13, - BMovSrc::TreadStateEnum4 => 0x14, - BMovSrc::TrapReturnPCLo => 0x15, - BMovSrc::TrapReturnPCHi => 0x16, - BMovSrc::TrapReturnMask => 0x17, - BMovSrc::MExited => 0x18, - BMovSrc::MKill => 0x19, - BMovSrc::MActive => 0x1a, - BMovSrc::MAtExit => 0x1b, - BMovSrc::OptStack => 0x1c, - BMovSrc::APICallDepth => 0x1d, - BMovSrc::AtExitPCLo => 0x1e, - BMovSrc::AtExitPCHi => 0x1f, - }; - self.set_field(24..29, src); + self.set_dst(Dst::None); + self.set_field(24..28, op.dst.idx()); - self.set_bit(84, op.clear); + self.set_bit(84, true); // .CLEAR } fn encode_break(&mut self, op: &OpBreak) { @@ -1927,7 +1908,7 @@ impl SM70Instr { Op::LdTram(op) => si.encode_ldtram(&op), Op::CCtl(op) => si.encode_cctl(&op), Op::MemBar(op) => si.encode_membar(&op), - Op::BMov(op) => si.encode_bmov(&op), + Op::BClear(op) => si.encode_bclear(&op), Op::Break(op) => si.encode_break(&op), Op::BSSy(op) => si.encode_bssy(&op, ip, labels), Op::BSync(op) => si.encode_bsync(&op), diff --git a/src/nouveau/compiler/nak_from_nir.rs b/src/nouveau/compiler/nak_from_nir.rs index d23b3f15b50..ba6bb0650d5 100644 --- a/src/nouveau/compiler/nak_from_nir.rs +++ b/src/nouveau/compiler/nak_from_nir.rs @@ -1627,10 +1627,8 @@ impl<'a> ShaderFromNir<'a> { let label = self.label_alloc.alloc(); let bar = self.bar_alloc.alloc(); - let bmov = b.push_op(OpBMov { - dst: Dst::None, - src: BMovSrc::Barrier(bar), - clear: true, + let bmov = b.push_op(OpBClear { + dst: bar, }); bmov.deps.yld = true; @@ -2542,10 +2540,8 @@ impl<'a> ShaderFromNir<'a> { let label = self.label_alloc.alloc(); let bar = self.bar_alloc.alloc(); - let bmov = b.push_op(OpBMov { - dst: Dst::None, - src: BMovSrc::Barrier(bar), - clear: true, + let bmov = b.push_op(OpBClear { + dst: bar, }); bmov.deps.yld = true; diff --git a/src/nouveau/compiler/nak_ir.rs b/src/nouveau/compiler/nak_ir.rs index e20f043fc61..230d817c7da 100644 --- a/src/nouveau/compiler/nak_ir.rs +++ b/src/nouveau/compiler/nak_ir.rs @@ -3601,69 +3601,18 @@ impl DisplayOp for OpMemBar { } impl_display_for_op!(OpMemBar); -#[allow(dead_code)] -pub enum BMovSrc { - Barrier(BarRef), - TreadStateEnum0, - TreadStateEnum1, - TreadStateEnum2, - TreadStateEnum3, - TreadStateEnum4, - TrapReturnPCLo, - TrapReturnPCHi, - TrapReturnMask, - MExited, - MKill, - MActive, - MAtExit, - OptStack, - APICallDepth, - AtExitPCLo, - AtExitPCHi, -} - -impl fmt::Display for BMovSrc { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - BMovSrc::Barrier(bar) => bar.fmt(f), - BMovSrc::TreadStateEnum0 => write!(f, "THREAD_STATE_ENUM.0"), - BMovSrc::TreadStateEnum1 => write!(f, "THREAD_STATE_ENUM.1"), - BMovSrc::TreadStateEnum2 => write!(f, "THREAD_STATE_ENUM.2"), - BMovSrc::TreadStateEnum3 => write!(f, "THREAD_STATE_ENUM.3"), - BMovSrc::TreadStateEnum4 => write!(f, "THREAD_STATE_ENUM.4"), - BMovSrc::TrapReturnPCLo => write!(f, "TRAP_RETURN_PC.LO"), - BMovSrc::TrapReturnPCHi => write!(f, "TRAP_RETURN_PC.HI"), - BMovSrc::TrapReturnMask => write!(f, "TRAP_RETURN_MASK"), - BMovSrc::MExited => write!(f, "MEXITED"), - BMovSrc::MKill => write!(f, "MKILL"), - BMovSrc::MActive => write!(f, "MACTIVE"), - BMovSrc::MAtExit => write!(f, "MATEXIT"), - BMovSrc::OptStack => write!(f, "OPT_STACK"), - BMovSrc::APICallDepth => write!(f, "API_CALL_DEPTH"), - BMovSrc::AtExitPCLo => write!(f, "ATEXIT_PC.LO"), - BMovSrc::AtExitPCHi => write!(f, "ATEXIT_PC.HI"), - } - } -} - #[repr(C)] #[derive(SrcsAsSlice, DstsAsSlice)] -pub struct OpBMov { - pub dst: Dst, - pub src: BMovSrc, - pub clear: bool, +pub struct OpBClear { + pub dst: BarRef, } -impl DisplayOp for OpBMov { +impl DisplayOp for OpBClear { fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "bmov.32")?; - if self.clear { - write!(f, ".clear")?; - } - write!(f, " {} {}", self.dst, self.src) + write!(f, "bclear") } } -impl_display_for_op!(OpBMov); +impl_display_for_op!(OpBClear); #[repr(C)] #[derive(SrcsAsSlice, DstsAsSlice)] @@ -4347,7 +4296,7 @@ pub enum Op { LdTram(OpLdTram), CCtl(OpCCtl), MemBar(OpMemBar), - BMov(OpBMov), + BClear(OpBClear), Break(OpBreak), BSSy(OpBSSy), BSync(OpBSync), @@ -4706,6 +4655,7 @@ impl Instr { | Op::MemBar(_) | Op::Kill(_) | Op::Nop(_) + | Op::BClear(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) @@ -4716,7 +4666,6 @@ impl Instr { | Op::FSOut(_) | Op::Out(_) | Op::OutFinal(_) => false, - Op::BMov(op) => !op.clear, _ => true, } } @@ -4786,7 +4735,7 @@ impl Instr { | Op::MemBar(_) => false, // Control-flow ops - Op::BMov(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => false, + Op::BClear(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => false, Op::Bra(_) | Op::Exit(_) => true, Op::WarpSync(_) => false, diff --git a/src/nouveau/compiler/nak_legalize.rs b/src/nouveau/compiler/nak_legalize.rs index c3a75f12edf..12cd51f5839 100644 --- a/src/nouveau/compiler/nak_legalize.rs +++ b/src/nouveau/compiler/nak_legalize.rs @@ -259,7 +259,7 @@ fn legalize_instr(b: &mut impl SSABuilder, instr: &mut Instr) { copy_src_if_not_reg(b, &mut op.handle, RegFile::GPR); } Op::Ldc(_) => (), // Nothing to do - Op::BMov(_) | Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => (), + Op::Break(_) | Op::BSSy(_) | Op::BSync(_) => (), Op::Vote(_) => (), // Nothing to do Op::Copy(_) => (), // Nothing to do _ => {
