11 个版本

0.2.7 2021年5月5日
0.2.6 2020年6月8日
0.2.4 2020年5月24日
0.2.2 2019年8月18日
0.1.1 2019年2月26日

#72 in #detail

MIT/Apache

9KB
178

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 中得到了反映。特别是,将一个不是 4 字节对齐的 [u8] 的 SPIR-V 传递给 Vulkan 是未定义的行为。以原生格式存储 SPIR-V 确保这种情况永远不会发生,而不需要复制或使用不安全的代码。

依赖关系

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

依赖关系

~30MB
~660K SLoC