From 970b3e0e71590b127d30c4bfe0bbd8c3fecff17e Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 10 Jul 2024 15:09:34 -0500 Subject: [PATCH] nak: Add a legalize() method to ShaderModel Part-of: --- src/nouveau/compiler/nak/ir.rs | 2 ++ src/nouveau/compiler/nak/legalize.rs | 13 +++---------- src/nouveau/compiler/nak/sm50.rs | 8 ++++---- src/nouveau/compiler/nak/sm70.rs | 8 ++++---- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/nouveau/compiler/nak/ir.rs b/src/nouveau/compiler/nak/ir.rs index f8cd24a6b69..475c6262153 100644 --- a/src/nouveau/compiler/nak/ir.rs +++ b/src/nouveau/compiler/nak/ir.rs @@ -8,6 +8,7 @@ use bitview::BitMutView; pub use crate::builder::{Builder, InstrBuilder, SSABuilder, SSAInstrBuilder}; use crate::cfg::CFG; +use crate::legalize::LegalizeBuilder; use crate::sph::{OutputTopology, PixelImap}; use nak_ir_proc::*; use std::cmp::{max, min}; @@ -6252,6 +6253,7 @@ pub trait ShaderModel { fn op_can_be_uniform(&self, op: &Op) -> bool; + fn legalize_op(&self, b: &mut LegalizeBuilder, op: &mut Op); fn encode_shader(&self, s: &Shader<'_>) -> Vec; } diff --git a/src/nouveau/compiler/nak/legalize.rs b/src/nouveau/compiler/nak/legalize.rs index 92083163ccb..3d07f87eb06 100644 --- a/src/nouveau/compiler/nak/legalize.rs +++ b/src/nouveau/compiler/nak/legalize.rs @@ -4,8 +4,6 @@ use crate::api::{GetDebugFlags, DEBUG}; use crate::ir::*; use crate::liveness::{BlockLiveness, Liveness, SimpleLiveness}; -use crate::sm50::legalize_sm50_instr; -use crate::sm70::legalize_sm70_instr; use std::collections::{HashMap, HashSet}; @@ -284,6 +282,7 @@ pub trait LegalizeBuildHelpers: SSABuilder { impl LegalizeBuildHelpers for LegalizeBuilder<'_> {} fn legalize_instr( + sm: &dyn ShaderModel, b: &mut LegalizeBuilder, bl: &impl BlockLiveness, block_uniform: bool, @@ -367,13 +366,7 @@ fn legalize_instr( _ => (), } - if b.sm() >= 70 { - legalize_sm70_instr(b, instr); - } else if b.sm() >= 50 { - legalize_sm50_instr(b, instr); - } else { - panic!("Unknown shader model SM{}", b.sm()); - } + sm.legalize_op(b, &mut instr.op); let mut vec_src_map: HashMap = HashMap::new(); let mut vec_comps = HashSet::new(); @@ -433,7 +426,7 @@ impl Shader<'_> { } let mut b = SSAInstrBuilder::new(sm, &mut f.ssa_alloc); - legalize_instr(&mut b, bl, bu, &pinned, ip, &mut instr); + legalize_instr(sm, &mut b, bl, bu, &pinned, ip, &mut instr); b.push_instr(instr); instrs.append(&mut b.as_vec()); } diff --git a/src/nouveau/compiler/nak/sm50.rs b/src/nouveau/compiler/nak/sm50.rs index 3a7c4a74465..73e7d9f5fa5 100644 --- a/src/nouveau/compiler/nak/sm50.rs +++ b/src/nouveau/compiler/nak/sm50.rs @@ -42,6 +42,10 @@ impl ShaderModel for ShaderModel50 { false } + fn legalize_op(&self, b: &mut LegalizeBuilder, op: &mut Op) { + as_sm50_op_mut(op).legalize(b); + } + fn encode_shader(&self, s: &Shader<'_>) -> Vec { encode_sm50_shader(self, s) } @@ -2800,7 +2804,3 @@ fn encode_sm50_shader(sm: &ShaderModel50, s: &Shader<'_>) -> Vec { encoded } - -pub fn legalize_sm50_instr(b: &mut LegalizeBuilder, instr: &mut Instr) { - as_sm50_op_mut(&mut instr.op).legalize(b); -} diff --git a/src/nouveau/compiler/nak/sm70.rs b/src/nouveau/compiler/nak/sm70.rs index 629732fd819..11d00d68048 100644 --- a/src/nouveau/compiler/nak/sm70.rs +++ b/src/nouveau/compiler/nak/sm70.rs @@ -96,6 +96,10 @@ impl ShaderModel for ShaderModel70 { } } + fn legalize_op(&self, b: &mut LegalizeBuilder, op: &mut Op) { + as_sm70_op_mut(op).legalize(b); + } + fn encode_shader(&self, s: &Shader<'_>) -> Vec { encode_sm70_shader(self, s) } @@ -3460,7 +3464,3 @@ fn encode_sm70_shader(sm: &ShaderModel70, s: &Shader<'_>) -> Vec { } encoded } - -pub fn legalize_sm70_instr(b: &mut LegalizeBuilder, instr: &mut Instr) { - as_sm70_op_mut(&mut instr.op).legalize(b); -}