let mut slang_commands = SLANG_SHADERS
.iter()
.map(|SlangShader { name }| {
- Command::new("slangc")
+ let mut command = Command::new("slangc");
+
+ let child = command
.arg(format!("{SHADER_ROOT}/{name}.slang"))
.args(["-target", "spirv"])
.args(["-profile", "spirv_1_6"])
.args(["-depfile", &format!("{out_dir}/{name}.d")])
.args(["-o", &format!("{out_dir}/{name}.spv")])
.spawn()
- .unwrap()
+ .expect("failed to launch `slangc`, is it in the path?");
+
+ let mut command_string = String::new();
+ command_string.push_str("slangc");
+ for arg in command.get_args() {
+ if let Some(arg) = arg.to_str() {
+ command_string.push(' ');
+ command_string.push_str(arg);
+ }
+ }
+
+ (child, command_string)
})
.collect::<Vec<_>>();
.unwrap();
}
- for (mut command, shader) in slang_commands.drain(..).zip(SLANG_SHADERS.iter()) {
- let status = command.wait().unwrap();
+ for ((mut child, command_string), shader) in slang_commands.drain(..).zip(SLANG_SHADERS.iter())
+ {
+ let status = child.wait().unwrap();
assert!(
status.success(),
- "shader '{}' failed to compile",
+ "shader '{}' failed to compile\n$ {command_string}",
shader.name
);
}