Module: Mesa Branch: main Commit: 26c2566606713ae6d9285c06e0cb908b314707d4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=26c2566606713ae6d9285c06e0cb908b314707d4
Author: Faith Ekstrand <[email protected]> Date: Fri Dec 15 11:50:58 2023 -0600 nak: Plumb shader model into instruction latency queries Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26716> --- src/nouveau/compiler/nak/calc_instr_deps.rs | 16 ++++++++-------- src/nouveau/compiler/nak/ir.rs | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/nouveau/compiler/nak/calc_instr_deps.rs b/src/nouveau/compiler/nak/calc_instr_deps.rs index 0c3d90248a5..53edd834166 100644 --- a/src/nouveau/compiler/nak/calc_instr_deps.rs +++ b/src/nouveau/compiler/nak/calc_instr_deps.rs @@ -362,7 +362,7 @@ impl BarAlloc { } } -fn assign_barriers(f: &mut Function) { +fn assign_barriers(f: &mut Function, sm: u8) { let mut uses = RegTracker::new_with(&|| RegUse::None); let mut deps = DepGraph::new(); @@ -380,7 +380,7 @@ fn assign_barriers(f: &mut Function) { waits.extend_from_slice(u.deps()); }); - if instr.has_fixed_latency() { + if instr.has_fixed_latency(sm) { // Delays will cover us here. We just need to make sure // that we wait on any uses that we consume. uses.for_each_instr_src_mut(instr, |u| { @@ -437,7 +437,7 @@ fn assign_barriers(f: &mut Function) { instr.deps.set_yield(true); } - if instr.has_fixed_latency() { + if instr.has_fixed_latency(sm) { continue; } @@ -464,7 +464,7 @@ fn assign_barriers(f: &mut Function) { } } -fn calc_delays(f: &mut Function) { +fn calc_delays(f: &mut Function, sm: u8) { for b in f.blocks.iter_mut().rev() { let mut cycle = 0_u32; let mut ready = RegTracker::new(0_u32); @@ -478,10 +478,10 @@ fn calc_delays(f: &mut Function) { if let Some(bar) = instr.deps.wr_bar() { min_start = max(min_start, bars_ready[usize::from(bar)] + 2); } - if instr.has_fixed_latency() { + if instr.has_fixed_latency(sm) { for (idx, dst) in instr.dsts().iter().enumerate() { if let Dst::Reg(reg) = dst { - let latency = instr.get_dst_latency(idx); + let latency = instr.get_dst_latency(sm, idx); for c in &ready[*reg] { min_start = max(min_start, *c + latency); } @@ -542,8 +542,8 @@ impl Shader { self.assign_deps_serial(); } else { for f in &mut self.functions { - assign_barriers(f); - calc_delays(f); + assign_barriers(f, self.info.sm); + calc_delays(f, self.info.sm); } } } diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index 7b95f05e007..c004d1627e3 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -5034,7 +5034,7 @@ impl Instr { } } - pub fn has_fixed_latency(&self) -> bool { + pub fn has_fixed_latency(&self, _sm: u8) -> bool { match &self.op { // Float ALU Op::FAdd(_) @@ -5142,8 +5142,8 @@ impl Instr { } } - pub fn get_dst_latency(&self, dst_idx: usize) -> u32 { - debug_assert!(self.has_fixed_latency()); + pub fn get_dst_latency(&self, sm: u8, dst_idx: usize) -> u32 { + debug_assert!(self.has_fixed_latency(sm)); let file = match self.dsts()[dst_idx] { Dst::None => return 0, Dst::SSA(vec) => vec.file(),
