wgpu
是一种跨平台,安全,纯净的图形API。它在Vulkan,Metal,d3d12和OpenGL上本地运行;在WASM上的WebGL2和WebGPU上。
API基于WebGPU标准。它是Firefox和Deno中WebGPU集成的核心。
存储库包含以下库:
以下二进制文件:
naga
在不同语言之间翻译着着色器的工具。cts_runner
使用deno_webgpu
WebGPU符合测试套件跑步者。player
- 独立应用API跟踪的应用。有关GFX-RS生态系统中所有组件的概述,请参阅大图。
可以在WGPU/示例中找到生锈的例子。您可以使用cargo run --bin wgpu-examples <example>
。请参阅示例列表。
要在浏览器中运行示例,请运行cargo xtask run-wasm
。然后打开http://localhost:8000
在浏览器中,您可以选择一个示例。自然,为了显示任何基于WebGPU的示例,您需要确保浏览器支持它。
如果您正在寻找WGPU教程,请查看以下内容:
要在C/C ++中使用WGPU,您需要WGPU本地。
如果您正在寻找WGPU C ++教程,请查看以下内容:
如果您想在其他语言中使用WGPU,则来自Python,D,D,Julia,Kotlin等语言有许多与WGPU本地的绑定。请参阅列表。
我们拥有构成WGPU社区的几个不同房间的矩阵空间:
我们有一个Wiki,可以用作知识基础。
API | 视窗 | Linux/Android | MacOS/iOS | 网络(WASM) |
---|---|---|---|---|
VULKAN | ✅ | ✅ | ? | |
金属 | ✅ | |||
DX12 | ✅ | |||
OpenGL | ? (GL 3.3+) | ? (gl es 3.0+) | ? | ? (WebGL2) |
WebGPU | ✅ |
✅=头等舱支持
? =下层/最佳努力支持
? =需要角度翻译层(仅GL ES 3.0)
? =需要熔融的翻译层
=不受支持的,尽管对贡献开放
WGPU支持WGSL,SPIR-V和GLSL中的着色器。 HLSL和GLSL都有用于靶向螺旋V的编译器。当我们处理所有转换时,所有这些着色器语言都可以与任何后端一起使用。此外,对这些着色器输入的支持不会消失。
尽管WebGPU不支持WGSL以外的任何阴影语言,但如果您在WebGPU上运行,我们将自动转换您的非WGSL着色器。
默认情况下,WGSL始终受到支持,但是GLSL和SPIR-V需要功能可以支持支持。
请注意,WGSL规范仍在开发中,因此规范草案并未准确描述wgpu
支持的内容。有关详细信息,请参见下文。
要启用Spir-V着色器,请启用WGPU的spirv
功能。要启用GLSL着色器,请启用WGPU的glsl
功能。
角度是从GLE到其他由Google开发的后端的翻译层。我们支持运行GLES3后端,以便获得平台DX11支持,否则就无法访问。为了以角度运行,必须启用“角度”功能,并且将角度库放在应用程序可见的位置中。这些二进制文件可以从GFBuild-angle工件下载,使用Apple Silicon的Mac需要手动编译。
在Windows上,您通常需要将它们复制到工作目录中,与可执行文件或路径中的某个地方相同的目录。在Linux上,您可以使用LD_LIBRARY_PATH
环境指向它们。
由于复杂的依赖者,我们有两个MSRV策略:
d3d12
, naga
, wgpu-core
, wgpu-hal
和wgpu-types
的MSRV为1.76 ,但可能会低于将来的其余工作区。它在CORE_MSRV
和REPO_MSRV
变量的CI上(在“ /.github/workflows/ci.yml”)上执行。尽管我们每三个月发布一次打破版本,但此版本只能升级为Breaking版本。
naga
, wgpu-core
, wgpu-hal
和wgpu-types
板条箱绝对不应在Firefox的MSRV之前需要MSRV进行夜间构建,这取决于python/mozboot/mozboot/util.py
的最小值MINIMUM_RUST_VERSION
确定。
所有测试和示例基础架构共享相同的一组环境变量,这些变量确定将运行哪个后端/GPU。
WGPU_ADAPTER_NAME
带有要使用的适配器名称的子字符串(Ex。1080将与NVIDIA GeForce 1080ti
1080
)。WGPU_BACKEND
带有要使用的后端的逗号分隔列表( vulkan
, metal
, dx12
或gl
)。WGPU_POWER_PREF
具有何时未指定特定适配器名称的功率优先( high
, low
或none
)WGPU_DX12_COMPILER
带有您希望使用的DX12着色器编译器fxc
dxc
或fxc
,请注意dxc
需要dxil.dll
和dxcompiler.dll
在工作目录中WGPU_GLES_MINOR_VERSION
带有次要的OpenGL ES 1
0
automatic
2
。WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
带有布尔值,是否列举了不合格的驱动程序(forse 0
,为true 1
)。运行CTS时,请使用变量DENO_WEBGPU_ADAPTER_NAME
, DENO_WEBGPU_BACKEND
, DENO_WEBGPU_POWER_PREFERENCE
。
我们有多种测试方法,每种方法都测试了有关WGPU的不同质量。我们会自动在CI上进行测试。 CI测试的当前状态:
平台/后端 | 测试 | 笔记 |
---|---|---|
Windows/DX12 | ✔️ | 使用经线 |
Windows/OpenGL | ✔️ | 使用llvmpipe |
macos/金属 | ✔️ | 使用硬件跑步者 |
Linux/Vulkan | ✔️ | 使用Lavapipe |
Linux/OpenGL ES | ✔️ | 使用llvmpipe |
Chrome/WebGL | ✔️ | 使用SwiftShader |
chrome/webgpu | 未设置 |
我们使用一个名为cargo nextest
的工具来运行测试。要安装它,请运行cargo install cargo-nextest
。
运行测试套件:
cargo xtask test
在WebGL上运行测试套件(当前不完整):
cd wgpu
wasm-pack test --headless --chrome --no-default-features --features webgl --workspace
这将使用包装的浏览器自动运行测试。删除--headless
可以使用您希望在http://localhost:8000
任何浏览器运行测试。
如果您是用户,并且想要一种帮助WGPU贡献的方法,我们总是需要更多帮助编写测试用例。
WebGPU包括一个符合测试套件,以验证实现正常工作。我们可以针对WGPU运行此CTS。
要运行CTS,首先,您需要检查出来:
git clone https://github.com/gpuweb/cts.git
cd cts
# works in bash and powershell
git checkout $(cat ../cts_runner/revision.txt)
运行给定的一组测试:
# Must be inside the `cts` folder we just checked out, else this will fail
cargo run --manifest-path ../Cargo.toml -p cts_runner --bin cts_runner -- ./tools/run_deno --verbose "<test string>"
要找到完整的测试列表,请访问在线CTS查看器。
当前启用的CTS测试列表可以在此处找到。
wgpu
板条箱的本质是WebGPU API的惯用锈翻译。该规范及其阴影语言WGSL仍处于“工作草案”阶段,虽然一般轮廓稳定,但细节经常更改。在稳定规范之前,随着实施的赶上, wgpu
板条箱和WGSL的版本可能与指定的规格不同。
wgpu
支持的哪些WGSL功能取决于您的使用方式:
当作为本机代码运行时, wgpu
使用Naga板条将WGSL代码转换为平台本机GPU API的阴影语言。纳迦(Naga)有一个赶上WGSL规范的里程碑,但通常,纳迦(Naga)和WGSL规范之间的差异没有最新的摘要。
在Web浏览器中运行(通过启用"webgl"
功能的WebAssembly)运行时, wgpu
依赖于浏览器自己的WebGPU实现。 WGSL着色器简单地传递到浏览器,以确定您可以使用的WGSL功能。
当启用wgpu
的"webgl"
功能在Web浏览器中运行时, wgpu
使用NAGA将WGSL程序转换为GLSL。这使用NAGA的版本就像您正在运行wgpu
作为本机代码一样。
WGPU使用D3D和金属的坐标系:
使成为 | 质地 |
---|---|