Files
wgpu/naga/tests/example_wgsl.rs
2025-02-21 19:31:30 +00:00

52 lines
1.4 KiB
Rust

#![cfg(feature = "wgsl-in")]
use naga::{front::wgsl, valid::Validator};
use std::{ffi::OsStr, fs, path::Path};
/// Runs through all example shaders and ensures they are valid wgsl.
#[test]
pub fn parse_example_wgsl() {
let example_path = Path::new(env!("CARGO_MANIFEST_DIR"))
.parent()
.unwrap()
.join("examples");
println!("Looking for examples in {}", example_path.display());
let mut example_paths = Vec::new();
for example_entry in walkdir::WalkDir::new(example_path) {
let Ok(dir_entry) = example_entry else {
continue;
};
if !dir_entry.file_type().is_file() {
continue;
}
let path = dir_entry.path();
if path.extension().map(OsStr::to_string_lossy).as_deref() == Some("wgsl") {
example_paths.push(path.to_path_buf());
}
}
assert!(!example_paths.is_empty(), "No examples found!");
println!("Found {} examples", example_paths.len());
for example_path in example_paths {
println!("\tParsing {}", example_path.display());
let shader = fs::read_to_string(&example_path).unwrap();
let module = wgsl::parse_str(&shader).unwrap();
//TODO: re-use the validator
Validator::new(
naga::valid::ValidationFlags::all(),
naga::valid::Capabilities::all(),
)
.validate(&module)
.unwrap();
}
}