use std::path::Path;
use naga::{
back::wgsl::WriterFlags,
valid::{Capabilities, ValidationFlags, Validator},
};
fn minify_wgsl(source: impl AsRef<Path>, target: impl AsRef<Path>) {
let source = std::fs::read_to_string(source).expect("Error reading WGSL shader file");
let mut module = naga::front::wgsl::parse_str(&source).expect("Error compiling WGSL shader");
let info = Validator::new(ValidationFlags::all(), Capabilities::all())
.validate(&module)
.expect("Error while validating WGSL shader");
naga::compact::compact(&mut module);
let output = naga::back::wgsl::write_string(&module, &info, WriterFlags::empty())
.expect("Error converting WGSL module back to WGSL code");
let output = wgsl_minifier::minify_wgsl_source(&output);
std::fs::write(target, output).expect("Error writing minified WGSL shader to file");
}
fn main() {
println!("cargo::rerun-if-changed=shaders/downscale.wgsl");
println!("cargo::rerun-if-changed=shaders/rotation.wgsl");
println!("cargo::rerun-if-changed=shaders/nearest_neighbor.wgsl");
let out_dir_str = std::env::var_os("OUT_DIR").unwrap();
let out_dir = Path::new(&out_dir_str);
minify_wgsl("shaders/downscale.wgsl", out_dir.join("downscale.wgsl"));
minify_wgsl("shaders/rotation.wgsl", out_dir.join("rotation.wgsl"));
minify_wgsl(
"shaders/nearest_neighbor.wgsl",
out_dir.join("nearest_neighbor.wgsl"),
);
}