2个不稳定版本

0.1.0+irconverter-1.12024年7月16日
0.0.0-alpha.12024年5月1日

#229 in 编程语言

32 每月下载量

Apache-2.0

125KB
2.5K SLoC

🤘 萨克斯博姆

Actions Status Latest version Documentation Apache Contributor Covenant

Banner

saxaboom 是围绕 Metal着色器转换器 的小型辅助库,用于将 DXIL 文件(HLSL源代码)转换为金属着色器库。另请参阅 saxaboom-runtime,它提供了运行时结构和与 metal crate 的互操作,以便使用生成的 metallib 着色器。

用法

将此添加到您的 Cargo.toml

[dependencies]
saxaboom = "0.1.0"

DXIL 编译为 metallib 的示例

use saxaboom::{ffi, MetalIrConverter};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Load the library
    let metal_irconverter = MetalIrConverter::new("libmetalirconverter.dylib").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(())
}

为了在运行时最有效地使用加载的 metallib 着色器,请参阅 saxaboom-runtime

依赖关系

~0.4–5.5MB
~19K SLoC