2个不稳定版本
0.1.0+irconverter-1.1 | 2024年7月16日 |
---|---|
0.0.0-alpha.1 | 2024年5月1日 |
#229 in 编程语言
32 每月下载量
125KB
2.5K SLoC
🤘 萨克斯博姆
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