pub enum ProgramType {
Pixel,
Vertex,
Geometry,
Hull,
Domain,
Compute,
}Expand description
The kind of program a version token names.
Variants§
Pixel
A pixel program (ps).
Vertex
A vertex program (vs).
Geometry
A geometry program (gs).
Hull
A hull program (hs).
Domain
A domain program (ds).
Compute
A compute program (cs).
Implementations§
Source§impl ProgramType
impl ProgramType
Sourcepub fn name(self) -> &'static str
pub fn name(self) -> &'static str
The target’s stage prefix (ps, vs, …).
Examples found in repository?
examples/pairs_dxbc.rs (line 82)
33fn main() -> Result<(), Box<dyn std::error::Error>> {
34 let mut paths = Vec::new();
35 for argument in std::env::args().skip(1) {
36 files(Path::new(&argument), &mut paths)?;
37 }
38 let (mut programs, mut skipped) = (0_usize, 0_usize);
39 for path in &paths {
40 let bytes = std::fs::read(path)?;
41 let has_code = dxbc_reader::parts(&bytes)
42 .is_ok_and(|parts| parts.iter().any(|c| matches!(&c.kind, b"SHDR" | b"SHEX")));
43 if !has_code {
44 skipped += 1;
45 continue;
46 }
47 let program = match dxbc_reader::code(&bytes).and_then(|code| dxbc_reader::decode(&code)) {
48 Ok(program) => program,
49 Err(e) => {
50 eprintln!("{}: {e}", path.display());
51 continue;
52 }
53 };
54 programs += 1;
55 let hash = fnv1a64(&bytes);
56 let mut pairs = Pairs::new();
57 for read in dxbc_reader::texture_reads(&program) {
58 let texture = if read.texture_indexed {
59 format!("t[{}+]", read.texture)
60 } else {
61 format!("t{}", read.texture)
62 };
63 let sampler = match (read.sampler, read.sampler_indexed) {
64 (None, _) => "-".to_owned(),
65 (Some(slot), true) => format!("s[{slot}+]"),
66 (Some(slot), false) => format!("s{slot}"),
67 };
68 let mode = read
69 .sampler_mode
70 .map_or_else(|| "-".to_owned(), |m| m.to_string());
71 let entry = pairs
72 .entry((texture, sampler, read.comparison, mode))
73 .or_default();
74 entry.0 += 1;
75 *entry.1.entry(dxbc_reader::opcode_name(read.opcode)).or_default() += 1;
76 }
77 for ((texture, sampler, comparison, mode), (count, names)) in pairs {
78 let names: Vec<String> = names.iter().map(|(n, c)| format!("{n}x{c}")).collect();
79 println!(
80 "{hash:016x}\t{}\t{}\t{texture}\t{sampler}\t{}\t{mode}\t{count}\t{}",
81 path.display(),
82 program.kind.name(),
83 u8::from(comparison),
84 names.join(",")
85 );
86 }
87 }
88 eprintln!("{programs} programs, {skipped} files skipped");
89 Ok(())
90}Trait Implementations§
Source§impl Clone for ProgramType
impl Clone for ProgramType
impl Copy for ProgramType
Source§impl Debug for ProgramType
impl Debug for ProgramType
impl Eq for ProgramType
Source§impl PartialEq for ProgramType
impl PartialEq for ProgramType
impl StructuralPartialEq for ProgramType
Auto Trait Implementations§
impl Freeze for ProgramType
impl RefUnwindSafe for ProgramType
impl Send for ProgramType
impl Sync for ProgramType
impl Unpin for ProgramType
impl UnsafeUnpin for ProgramType
impl UnwindSafe for ProgramType
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more