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(),

Reply via email to