From a9ea4630d472016eb2f7568e1da105f3e58c9ae1 Mon Sep 17 00:00:00 2001 From: Mel Henning Date: Mon, 1 Sep 2025 20:11:17 -0400 Subject: [PATCH] nak: Make BindlessSSA store [SSAValue; 2] This reduces the size of ir::Src from 40 bytes down to 32 bytes. This makes the size of ir::Op fall from 272 bytes down to 232 bytes, meaning we save 40 bytes per instruction. Reviewed-by: Mary Guillemard Part-of: --- src/nouveau/compiler/nak/from_nir.rs | 2 +- src/nouveau/compiler/nak/ir.rs | 8 ++++---- src/nouveau/compiler/nak/legalize.rs | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/nouveau/compiler/nak/from_nir.rs b/src/nouveau/compiler/nak/from_nir.rs index 6409d34376e..fb0f8d76218 100644 --- a/src/nouveau/compiler/nak/from_nir.rs +++ b/src/nouveau/compiler/nak/from_nir.rs @@ -3343,7 +3343,7 @@ impl<'a> ShaderFromNir<'a> { let (off, off_imm) = self.get_cbuf_addr_offset(&srcs[1]); let cb = CBufRef { - buf: CBuf::BindlessSSA(handle), + buf: CBuf::BindlessSSA(handle[..].try_into().unwrap()), offset: off_imm, }; diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index 566edf4e468..afa8a3637b1 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -535,7 +535,7 @@ pub enum CBuf { Binding(u8), #[allow(dead_code)] - BindlessSSA(SSARef), + BindlessSSA([SSAValue; 2]), #[allow(dead_code)] BindlessUGPR(RegRef), @@ -545,7 +545,7 @@ impl fmt::Display for CBuf { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { CBuf::Binding(idx) => write!(f, "c[{:#x}]", idx), - CBuf::BindlessSSA(v) => write!(f, "cx[{}]", v), + CBuf::BindlessSSA(v) => write!(f, "cx[{{{}, {}}}]", v[0], v[1]), CBuf::BindlessUGPR(r) => write!(f, "cx[{}]", r), } } @@ -683,7 +683,7 @@ impl SrcRef { | SrcRef::Reg(_) => &[], SrcRef::CBuf(cb) => match &cb.buf { CBuf::Binding(_) | CBuf::BindlessUGPR(_) => &[], - CBuf::BindlessSSA(ssa) => ssa.deref(), + CBuf::BindlessSSA(ssa) => &ssa[..], }, SrcRef::SSA(ssa) => ssa.deref(), } @@ -699,7 +699,7 @@ impl SrcRef { | SrcRef::Reg(_) => &mut [], SrcRef::CBuf(cb) => match &mut cb.buf { CBuf::Binding(_) | CBuf::BindlessUGPR(_) => &mut [], - CBuf::BindlessSSA(ssa) => ssa.deref_mut(), + CBuf::BindlessSSA(ssa) => &mut ssa[..], }, SrcRef::SSA(ssa) => ssa.deref_mut(), } diff --git a/src/nouveau/compiler/nak/legalize.rs b/src/nouveau/compiler/nak/legalize.rs index b9216f0d6fb..c06f10e92da 100644 --- a/src/nouveau/compiler/nak/legalize.rs +++ b/src/nouveau/compiler/nak/legalize.rs @@ -452,7 +452,7 @@ fn legalize_instr( SrcRef::CBuf(CBufRef { buf: CBuf::BindlessSSA(handle), .. - }) => assert!(pinned.contains(handle)), + }) => assert!(pinned.contains(&SSARef::new(handle))), _ => (), } }