#spir-v #inline #compile #right #shader #hlsl #binary

inline-spirv

在您的 crate 中直接编译 GLSL/HLSL/WGSL 和内联 SPIR-V

8 个版本

0.2.1 2024 年 3 月 27 日
0.2.0 2024 年 2 月 13 日
0.1.6 2023 年 3 月 15 日
0.1.5 2022 年 10 月 21 日
0.1.1 2020 年 8 月 19 日

1043图形 API

每月 39 次下载
用于 2 crate

MIT/Apache 许可协议

31KB
521 行代码

内联 SPIR-V

Crate Documentation

inline-spirv 简化您编写着色器的方式。尽管作为游戏开发者,我们通常在运行时编译不同对象和材料的着色器阶段组合以获得最佳灵活性;但有时我们确实想尝试一些新想法并快速启动。这个 crate 帮助您在 Rust 代码中或在外部文件中编译 GLSL/HLSL 着色器为 SPIR-V;并将它们直接嵌入到二进制文件中,这样您就无需担心所有编译问题。

使用方法

内联着色器源代码

use inline_spirv::include_spirv;

let spv: &'static [u32] = inline_spirv!(r#"
    #version 450 core
    void main() { gl_Position = vec4(0, 0, 0, 1); }
"#, vert);

包含外部着色器源文件

use inline_spirv::include_spirv;

let spv: &'static [u32] = include_spirv!("assets/vert.hlsl", vert, hlsl, entry="Main");

包含预编译的 SPIR-V 二进制文件

use inline_spirv::include_spirv;

let spv: &'static [u32] = include_spirv!("assets/vert.spv");

有关完整选项列表,请参阅文档

技巧

宏可能非常详细,尤其是当您有很多 #include 指令时,因此请记住您可以为自身定义别名和更定制的宏。

use inline_spirv::include_spirv as include_spirv_raw;

macro_rules! include_spirv {
    ($path:expr, $stage:ident) => {
        include_spirv_raw!(
            $path,
            $stage, hlsl,
            entry="my_entry_pt",
            D VERBOSE_DEFINITION,
            D ANOTHER_VERBOSE_DEFINITION="verbose definition substitution",
            I "long/path/to/include/directory",
        )
    }
}

// ...
let vert: &[u32] = include_spirv!("examples/demo/assets/demo.hlsl", vert);

许可证

此项目根据您的选择采用以下任一许可证:

任选其一。

依赖关系

~2–15MB
~206K SLoC