nak: Add a legalize() method to ShaderModel

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30141>
This commit is contained in:
Faith Ekstrand
2024-07-10 15:09:34 -05:00
committed by Marge Bot
parent e039b7e1ac
commit 970b3e0e71
4 changed files with 13 additions and 18 deletions
+2
View File
@@ -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<u32>;
}
+3 -10
View File
@@ -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<SSARef, SSARef> = 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());
}
+4 -4
View File
@@ -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<u32> {
encode_sm50_shader(self, s)
}
@@ -2800,7 +2804,3 @@ fn encode_sm50_shader(sm: &ShaderModel50, s: &Shader<'_>) -> Vec<u32> {
encoded
}
pub fn legalize_sm50_instr(b: &mut LegalizeBuilder, instr: &mut Instr) {
as_sm50_op_mut(&mut instr.op).legalize(b);
}
+4 -4
View File
@@ -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<u32> {
encode_sm70_shader(self, s)
}
@@ -3460,7 +3464,3 @@ fn encode_sm70_shader(sm: &ShaderModel70, s: &Shader<'_>) -> Vec<u32> {
}
encoded
}
pub fn legalize_sm70_instr(b: &mut LegalizeBuilder, instr: &mut Instr) {
as_sm70_op_mut(&mut instr.op).legalize(b);
}