gfx-rs/wgpu

GitHub: gfx-rs/wgpu

基于 WebGPU 标准的跨平台、安全、纯 Rust 图形与计算 API,统一封装 Vulkan、Metal、D3D12 等底层后端。

Stars: 16525 | Forks: 1221

# wgpu [![构建状态](https://img.shields.io/github/actions/workflow/status/gfx-rs/wgpu/ci.yml?branch=trunk&logo=github&label=CI)](https://github.com/gfx-rs/wgpu/actions) [![codecov.io](https://img.shields.io/codecov/c/github/gfx-rs/wgpu?logo=codecov&logoColor=fff&label=codecov&token=84qJTesmeS)](https://codecov.io/gh/gfx-rs/wgpu) `wgpu` 是一个跨平台、安全、纯 Rust 的图形 API。它原生运行在 Vulkan、Metal、D3D12 和 OpenGL 上;并在 wasm 上基于 WebGL2 和 WebGPU 运行。 该 API 基于 [WebGPU 标准][webgpu],但这是一个完全原生的 Rust 库。它是 Firefox、Servo 和 Deno 中 WebGPU 集成的核心。 ## 快速入门 请在 查看我们的在线示例。您可以在 [examples](examples) 查看 Rust 源代码,并使用 `cargo run --bin wgpu-examples ` 直接运行它们。 ### 学习 `wgpu` 如果您是 `wgpu` 和图形编程的新手,我们建议从 [Learn Wgpu] 开始。 此外,[WebGPU Fundamentals] 是一个 WebGPU 教程,其内容与我们的 API 非常相似,除了 Rust 和 Javascript 之间的差异。 ### 维基 (Wiki) 我们有一个 [wiki](https://github.com/gfx-rs/wgpu/wiki),其中包含有关有用的架构模式、调试技巧以及更多入门信息。 ### 需要帮助?想要贡献? wgpu 社区使用 Matrix 和 Discord 进行讨论。 - [![`#wgpu:matrix.org`](https://img.shields.io/static/v1?label=wgpu-devs&message=%23wgpu&color=blueviolet&logo=matrix)](https://matrix.to/#/#wgpu:matrix.org) - 讨论 wgpu 的开发。 - [![`#wgpu-users:matrix.org`](https://img.shields.io/static/v1?label=wgpu-users&message=%23wgpu-users&color=blueviolet&logo=matrix)](https://matrix.to/#/#wgpu-users:matrix.org) - 讨论库的使用及周边生态系统。 - [![Rust Gamedev Discord 上的 #wgpu](https://img.shields.io/discord/676678179678715904?logo=discord&logoColor=E0E3FF&label=%23wgpu&color=5865F2) ](https://discord.gg/X3MYBNXUMJ) - Rust Gamedev Discord 上的专门支持频道。 ### 其他语言 要在 C 或数十种其他语言中使用 wgpu,请查看 [wgpu-native](https://github.com/gfx-rs/wgpu-native)。这些是 wgpu 的 C 绑定,并包含支持其他语言的库的最新列表。 [Learn WebGPU (for C++)] 是学习如何从 C++ 使用 wgpu-native 的好资源。 ## 快速链接 | 文档 | 示例 | 变更日志 | |:---------------------:|:-------------------------:|:-----------------------:| | [v28][rel-docs] | [v28][rel-examples] | [v28][rel-change] | | [`trunk`][trunk-docs] | [`trunk`][trunk-examples] | [`trunk`][trunk-change] | 欢迎贡献者!有关更多信息,请参见 [CONTRIBUTING.md][contrib]。 ## 支持的平台 | API | Windows | Linux/Android | macOS/iOS | Web (wasm) | | ------ | ------------------ | ------------------ | ------------------ | ------------------ | | Vulkan | ✅ | ✅ | 🌋 | | | Metal | | | ✅ | | | DX12 | ✅ | | | | | OpenGL | 🆗 (GL 3.3+) | 🆗 (GL ES 3.0+) | 📐 | 🆗 (WebGL2) | | WebGPU | | | | ✅ | ✅ = 一流支持 🆗 = 低版本/尽力支持 📐 = 需要 [ANGLE](https://github.com/gfx-rs/wgpu/wiki/Running-on-ANGLE) 转换层(仅限 GL ES 3.0) 🌋 = 需要 [MoltenVK](https://vulkan.lunarg.com/sdk/home#mac) 转换层 🛠️ = 不支持,但接受贡献 ## 环境变量 测试、示例和 `::from_env()` 方法使用一套标准化的环境变量来控制 wgpu 的行为。 - `WGPU_BACKEND`,包含您想使用的后端的逗号分隔列表(`vulkan`、`metal`、`dx12` 或 `gl`)。 - `WGPU_ADAPTER_NAME`,包含您想使用的适配器名称的不区分大小写的子字符串(例如,`1080` 将匹配 `NVIDIA GeForce 1080ti`)。 - `WGPU_DX12_COMPILER`,包含您希望使用的 DX12 着色器编译器(`dxc`、`static-dxc` 或 `fxc`)。请注意,`dxc` 需要工作目录中存在 `dxcompiler.dll`(最低 v1.8.2502),而 `static-dxc` 需要启用 `static-dxc` crate 功能。否则,它将回退到 `fxc`。 有关更多环境变量,请参见 [文档](https://docs.rs/wgpu/latest/wgpu/index.html?search=env)。 运行 CTS 时,请使用变量 `DENO_WEBGPU_ADAPTER_NAME`、`DENO_WEBGPU_BACKEND`、`DENO_WEBGPU_POWER_PREFERENCE`。 ## 仓库概览 有关 gfx-rs 生态系统中所有组件的概览,请参见 [全景图](./docs/big-picture.png)。 ## MSRV 策略 TL;DR:如果您正在使用 `wgpu`,我们的 MSRV 是 **1.87**。如果您正在运行我们的测试或示例,我们的 MSRV 是 **1.93**。 我们将避免在没有充分理由的情况下提升 `wgpu` 的 MSRV,此类更改被视为破坏性更改。
具体细节 由于依赖关系复杂,我们有三个 MSRV 策略: - `wgpu` 的 MSRV 是 **1.87** - `wgpu-core`(以及 `wgpu-hal`、`naga` 和 `wgpu-types`)的 MSRV 是 **1.87**。 - 工作区的其余部分 MSRV 为 **1.93**。 这通过 CI(在 "/.github/workflows/ci.yml" 中)使用 `WGPU_MSRV`、`CORE_MSRV` 和 `REPO_MSRV` 变量分别强制执行。 此版本只能在破坏性版本中升级,尽管我们每三个月发布一次破坏性版本。 以下规则适用: - `wgpu-core` crate 的 MSRV 永远不应高于 Firefox 夜间构建的 MSRV,具体由 [`python/mozboot/mozboot/util.py`][moz-msrv] 中的 `MINIMUM_RUST_VERSION` 值决定。 - `wgpu` crate 的 MSRV 永远不应高于 Servo 的 MSRV,具体由 其 [`Cargo.toml`][servo-msrv] 中的 rust-version 声明值决定 - 仓库 MSRV 永远不应高于 `stable - 3`。例如,如果 stable 位于 1.97,则仓库 MSRV 不应高于 1.94。这是为了让那些使用相当更新的操作系统提供的 Rust 的人能够构建我们的仓库。可以考虑与 [NixOS][nixos-msrv] 进行交叉核对,尽管这 不是必需的。
## 测试和环境变量 [关于测试的信息](./docs/testing.md),包括各类测试的位置以及如何运行测试。 ## 追踪 WebGPU 和 WGSL 草案规范 `wgpu` crate 旨在成为 [WebGPU API][webgpu spec] 的地道 Rust 翻译。 该规范及其着色语言 [WGSL][wgsl spec] 都仍处于“工作草案”阶段, 虽然总体轮廓稳定, 但细节经常变化。 在规范稳定之前,`wgpu` crate 及其实现的 WGSL 版本 可能会与规范中指定的不同, 因为实现正在追赶。 `wgpu` 支持的确切 WGSL 功能取决于您如何使用它: - 作为原生代码运行时,`wgpu` 使用 [Naga][naga] 将 WGSL 代码翻译为您平台原生 GPU API 的着色语言。 Naga 正在努力追赶 WGSL 规范, 并有 [bug][naga bugs] 追踪各种问题, 但没有与规范差异的简明摘要。 - 在 Web 浏览器中运行(通过编译为 WebAssembly) 且未启用 `"webgl"` 功能时, `wgpu` 依赖于浏览器自身的 WebGPU 实现。 WGSL 着色器只是简单地传递给浏览器, 因此这决定了您可以使用的 WGSL 功能。 - 在 Web 浏览器中运行且启用了 `wgpu` 的 `"webgl"` 功能时, `wgpu` 使用 Naga 将 WGSL 程序翻译为 GLSL。 这使用的 Naga 版本与您将 `wgpu` 作为原生代码运行时相同。
标签:3D图形, AI工具, D3D12, Deno, Firefox, GPU编程, Metal, OpenGL, Rust, Servo, Vulkan, WASM, WebGL2, WebGPU, 可视化界面, 图形API, 图形渲染, 并行计算, 底层库, 渲染库, 游戏开发, 着色器, 网络流量审计, 计算机图形学, 通知系统, 通知系统