#spir-v #vulkan #proc-macro #procedural #shader #path #glsl

vk-shader-macros

用于处理Vulkan着色器的过程宏

11个版本

0.2.10 2024年6月8日
0.2.9 2023年9月20日
0.2.8 2022年3月28日
0.2.7 2021年5月5日
0.1.0 2019年2月26日

#172 in 渲染

Download history 169/week @ 2024-04-26 159/week @ 2024-05-03 58/week @ 2024-05-10 46/week @ 2024-05-17 61/week @ 2024-05-24 208/week @ 2024-05-31 346/week @ 2024-06-07 182/week @ 2024-06-14 271/week @ 2024-06-21 157/week @ 2024-06-28 148/week @ 2024-07-05 123/week @ 2024-07-12 139/week @ 2024-07-19 292/week @ 2024-07-26 88/week @ 2024-08-02 124/week @ 2024-08-09

每月 661 次下载
4 crate 中使用

MIT/Apache

17KB
292 代码行

vk-shader-macros

Documentation Crates.io License: MIT License: Apache 2.0

用于将GLSL编译为SPIR-V常量的过程宏。

与标准 include_bytes 宏不同,路径目前是相对于crate根目录解析的。这是由于过程宏API的一个临时限制。

示例

const VERT: &[u32] = include_glsl!("shaders/example.vert");
const FRAG: &[u32] = include_glsl!("shaders/example.glsl", kind: frag);
const RGEN: &[u32] = include_glsl!("shaders/example.rgen", target: vulkan1_2); // vulkan1_2 is required to build with GL_EXT_ray_tracing

默认生成调试信息;将 strip 传递给宏以省略它,或使用具有 strip 功能构建crate。

为什么是 [u32]?

SPIR-V是一系列32位单词,而不是字节,这在消费它的API中得到反映。特别是,如果传递给Vulkan的SPIR-V不是4字节对齐的 [u8],则会发生未定义行为。以SPIR-V的原生格式存储它保证了这永远不会发生,而不需要复制或不安全的代码。

依赖项

此crate目前依赖于外部的 shaderc 库。默认情况下,它将尝试使用已安装的shaderc库。但是,如果它不存在,它将回退到从源代码构建,需要git、cmake、python 3以及构建环境中可用的支持的C++编译器。当使用预编译的shaderc时,必须注意使用与 shaderc crate 检出的版本兼容的版本。您可以通过在vk-shader-macros上启用 build-from-source 功能来强制shaderc从源代码构建。

依赖项

~29MB
~642K SLoC