#wgsl #valid #compile #compile-time #tiny #verify #binary

nightly include_wgsl

一个小型过程宏,用于将WGSL文件包含到您的二进制文件中,并在编译时验证其有效性

3个稳定版本

1.1.1 2021年10月11日
1.1.0 2021年10月10日
1.0.0 2021年4月29日

过程宏 中排名第2049

MIT 许可证

9KB
79 代码行

include_wgsl

Crates.io Docs.rs

一个小型过程宏,用于将WGSL文件包含到您的二进制文件中,并在编译时验证其有效性。

示例

这是如何创建一个 wgpu 着色器模块的示例

let shader_str = include_wgsl!("shader.wgsl");
device.create_shader_module(&ShaderModuleDescriptor {
    source: ShaderSource::Wgsl(Cow::Borrowed(&shader_str)),
    flags: ShaderFlags::default(),
    label: None,
})

这个宏的功能与使用 include_str!("shader.wgsl") 完全相同,但它还确保使用 naga 在编译时验证您的WGSL。

如果您的WGSL代码有效,编译将继续,但如果您的WGSL无效,您将收到一个友好的naga错误,并且编译将中断

error: Unable to parse shader.wgsl

error: invalid field accessor `world_positoon`
   ┌─ wgsl:33:933 │     out.world_positoon = world_position.xyz;^^^^^^^^^^^^^^ invalid accessor

语法错误通常是很容易理解的,但到目前为止,naga验证错误有点密集。我不认为改进它们是这个项目的范围之内,但我会很高兴在naga使它们更易于接近时更新这个crate。

Nightly

这个crate目前只支持nightly版本。如果我在nightly和更少的依赖项之间必须做出选择,我选择nightly,并且在crate中我坚持了这一理念。

依赖项

~5–14MB
~158K SLoC