| Crates.io | saxaboom |
| lib.rs | saxaboom |
| version | 0.2.0+irconverter-2.0 |
| created_at | 2024-05-01 10:29:18.574721+00 |
| updated_at | 2025-05-15 15:09:45.717782+00 |
| description | Binding library for Metal Shader Converter |
| homepage | https://traverseresearch.nl |
| repository | https://github.com/Traverse-Research/saxaboom |
| max_upload_size | |
| id | 1226029 |
| size | 163,782 |
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.
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>> {
// Load the library
let metal_irconverter =
MetalIrConverter::new(libloading::library_filename("metalirconverter")).unwrap();
// Create an instance of IRCompiler
let mut compiler = metal_irconverter.create_compiler();
// Create an object containing DXIL bytes, replace &[0u8] with your DXIL data
let dxil = metal_irconverter.create_object_from_dxil(&[0u8]);
// See `IRCompiler` docs for possible state that can be set on the compiler before compiling
// DXIL source, such as a global root signatures and various raytracing parameters.
// Compile the `dxil` data blob with entrypoint `main` into mtllib
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.