nak: Add a legalize() method to ShaderModel
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30141>
This commit is contained in:
committed by
Marge Bot
parent
e039b7e1ac
commit
970b3e0e71
@@ -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>;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user