🤘 Saxaboom


saxaboom is a small helper library around Metal shader converter to create metal shader libraries from DXIL files (HLSL source code). See also saxaboom-runtime which provides the runtime structures and interop with the metal crate needed to make use of the resulting metallib shaders.
Usage
Add this to your Cargo.toml:
[dependencies]
saxaboom = "0.2.0"
Example to compile DXIL to metallib:
use saxaboom::{ffi, MetalIrConverter};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let metal_irconverter =
MetalIrConverter::new(libloading::library_filename("metalirconverter")).unwrap();
let mut compiler = metal_irconverter.create_compiler();
let dxil = metal_irconverter.create_object_from_dxil(&[0u8]);
let mtllib = compiler.alloc_compile_and_link(c"main", &dxil)?;
let reflection = mtllib.reflection();
let mtl_binary = mtllib
.metal_lib_binary()
.expect("Compiled object should contain a `metallib`");
let bytecode = mtl_binary.byte_code();
Ok(())
}
For using the loaded metallib shaders at runtime most effectively, consult saxaboom-runtime.