inspect_rsx/
inspect_rsx.rs1use rsx_reader::{cgbinary, fragment, gcm};
4
5fn main() -> Result<(), Box<dyn std::error::Error>> {
6 let mut args = std::env::args().skip(1);
7 let (Some(texture_path), Some(shader_path)) = (args.next(), args.next()) else {
8 return Err("usage: inspect <texture.bin> <shader.fpo>".into());
9 };
10 let texture = gcm::CellGcmTexture::parse(&std::fs::read(texture_path)?)?; println!(
12 "{}x{}, {} mips, linear: {}",
13 texture.width,
14 texture.height,
15 texture.mipmap,
16 texture.linear()
17 );
18
19 let shader = std::fs::read(shader_path)?;
20 let program = cgbinary::parse(&shader)?;
21 if let cgbinary::Stage::Fragment(_) = program.stage {
22 let code = fragment::decode(program.microcode)?;
23 print!("{}", code.disassemble());
24 }
25 Ok(())
26}