41 个版本 (2 个稳定版)
22.1.0 | 2024 年 7 月 31 日 |
---|---|
0.20.0 | 2024 年 4 月 28 日 |
0.19.2 | 2024 年 2 月 29 日 |
0.14.2 | 2023 年 12 月 6 日 |
0.1.0 | 2020 年 2 月 27 日 |
#56 in 图形 API
248,461 每月下载量
用于 1,559 个 Crates(51 个直接使用)
3MB
68K SLoC
Naga
为 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 | Shader Model 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/wgpu.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 本身或调查 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
依赖关系
~1.8–10MB
~88K SLoC