#spir-v #shader #glsl #msl

已删除 librashader-naga

着色器翻译基础设施

1 个不稳定版本

0.14.0 2023年12月5日

#11#msl

MIT/Apache

3MB
61K SLoC

Naga

naga 分支,允许在 spv-in 中重映射组合图像采样器。作为 librashader 中的实现细节使用。

Matrix Crates.io Docs.rs Build Status MSRV codecov.io

wgpu 需求的着色器翻译库。

支持端点

前端 状态 功能 备注
SPIR-V (二进制) spv-in
WGSL wgsl-in 完全验证
GLSL 🆗 glsl-in GLSL 440+ 和 Vulkan 语义
后端 状态 功能 备注
SPIR-V spv-out
WGSL 🆗 wgsl-out
Metal msl-out
HLSL hlsl-out 着色器模型 5.0+ (DirectX 11+)
GLSL 🆗 glsl-out GLSL 330+ 和 GLSL ES 300+
AIR
DXIL/DXIR
DXBC
DOT (GraphViz) 🆗 dot-out 不是着色语言

✅ = 主要支持 — 🆗 = 次要支持 — 🚧 = 不支持,但正在开发支持

转换工具

Naga 可以用作 CLI,允许测试不同代码路径的转换。

首先,从 crates.io 或 GitHub 直接安装 naga-cli

# release version
cargo install naga-cli

# development version
cargo install naga-cli --git https://github.com/gfx-rs/naga.git

然后,您可以运行 naga 命令。

naga my_shader.wgsl # validate only
naga my_shader.spv my_shader.txt # dump the IR module into a file
naga my_shader.spv my_shader.metal --flow-dir flow-dir # convert the SPV to Metal, also dump the SPIR-V flow graph to `flow-dir`
naga my_shader.wgsl my_shader.vert --profile es310 # convert the WGSL to GLSL vertex stage under ES 3.20 profile

由于 naga 包含默认的二进制目标,您也可以使用 cargo run 而无需安装。这对于开发 naga 本身或在特定提交(例如 wgpu 可能会锁定此存储库的 HEAD 之外的不同版本的 naga)时非常有用。

cargo run my_shader.wgsl

开发工作流程

辅助开发的主要工具是经典的 cargo test --all-features --workspace,该命令将运行单元测试并更新所有快照。您在提交代码前会在git中看到这些更改。

如果正在处理特定的前端或后端,可以在 Cargo.toml 中启用相关功能,例如。

default = ["spv-out"] #TEMP!

这允许IDE的基本检查在那里报告错误,除非您的IDE已经足够可配置。

最后,当对快照进行更改时,我们应该验证生成的着色器确实适用于编译的目标平台

cargo xtask validate spv # for Vulkan shaders, requires SPIRV-Tools installed
cargo xtask validate msl # for Metal shaders, requires XCode command-line tools installed
cargo xtask validate glsl # for OpenGL shaders, requires GLSLang installed
cargo xtask validate dot # for dot files, requires GraphViz installed
cargo xtask validate wgsl # for WGSL shaders
cargo xtask validate hlsl dxc # for HLSL shaders via DXC
cargo xtask validate hlsl fxc # for HLSL shaders via FXC

依赖项

约2-11MB
约95K SLoC