1 个不稳定版本
0.14.0 | 2023年12月5日 |
---|
#11 在 #msl
3MB
61K SLoC
Naga
从 naga 分支,允许在 spv-in 中重映射组合图像采样器。作为 librashader 中的实现细节使用。
为 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