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

Download history 52697/week @ 2024-05-05 51641/week @ 2024-05-12 51673/week @ 2024-05-19 57647/week @ 2024-05-26 57491/week @ 2024-06-02 54980/week @ 2024-06-09 57237/week @ 2024-06-16 54231/week @ 2024-06-23 55076/week @ 2024-06-30 54629/week @ 2024-07-07 61740/week @ 2024-07-14 59390/week @ 2024-07-21 62838/week @ 2024-07-28 57383/week @ 2024-08-04 71175/week @ 2024-08-11 50855/week @ 2024-08-18

248,461 每月下载量
用于 1,559 个 Crates(51 个直接使用)

MIT/Apache

3MB
68K SLoC

Naga

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 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