saxaboom

Crates.iosaxaboom
lib.rssaxaboom
version0.2.0+irconverter-2.0
created_at2024-05-01 10:29:18.574721+00
updated_at2025-05-15 15:09:45.717782+00
descriptionBinding library for Metal Shader Converter
homepagehttps://traverseresearch.nl
repositoryhttps://github.com/Traverse-Research/saxaboom
max_upload_size
id1226029
size163,782
Traverse Research (Traverse-Research-CI-runner)

documentation

README

🤘 Saxaboom

Actions Status Latest version Documentation Apache Contributor Covenant

Banner

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>> {
    // 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.

Commit count: 44

cargo fmt