WebGPU通常被视为一种网络图形API,通过暴露先进的硬件功能,实现对GPU的统一且快速的访问,并使在GPU上进行渲染和计算操作成为可能,类似于Direct3D 12、Metal和Vulkan。
然而,WebGPU超越了仅仅是JavaScript API的范畴;它类似于WebAssembly,是一个基础构建模块,由于其不断发展的生态系统,其影响远不止于Web。Chrome团队承认WebGPU不仅仅是Web技术;它是围绕核心技术形成的一个蓬勃发展的生态系统。
WebGPU的生态系统探索
这个计划始于JavaScript规范,这是一个众多组织共同努力的产物,其中包括苹果、谷歌、英特尔、Mozilla 和微软等。目前,所有主要的网络浏览器已经实施或正在实施 WebGPU。
与此同时,Mozilla 和 Google 认识到 WebGPU 在特定平台应用中的潜力,并将 WebGPU 的实现与浏览器分离,实现了独立使用。
对于 Chrome,这体现为 Dawn,一个将 WebGPU 调用转换为 GPU 驱动程序命令的 C/C++ 库。Dawn 赋予 C 和 C++ 应用在本机使用 WebGPU 的能力,提供了一个使用浏览器供应商专业知识的可移植和符合人体工程学的 GPU 抽象。
正如在博文《WebGPU:未来的跨平台图形 API》中演示的那样,将特定于平台的 WebGPU 应用移植到 web 上是直截了当的。Emscripten,这是一个 C++ WebAssembly 工具链,已经支持 WebGPU,只需要进行最小的修改就可以将其移植到 web。
你还可以在 Node.js JavaScript 运行时之外运行你的 JavaScript WebGPU 代码,因为它包含一个基于 Dawn 的 WebGPU 模块。这允许你在服务器端或其他特定平台上运行你的代码而无需修改。
对于 Rust,也存在类似的生态系统,它使用了 wgpu,这是 Firefox 对 WebGPU 的实现。Wgpu 可以直接集成到 Rust 应用程序中,然后可以使用 web-sys 将其移植到 web。此外,Deno JavaScript 运行时通过 wgpu 支持 WebGPU。参见《wgpu 联盟与 Deno 博文》。
这在 Rust 和 C++ 之间建立了一个平行的生态系统,如下图所示。
新兴的视野
WebGPU 生态系统不仅限于 JavaScript、C++ 和 Rust 的领域。
实际上,您喜欢的编程语言可能已经有了 WebGPU 的绑定,因为致力于 WebGPU 实现的工程师们也正在开发一个用于 WebGPU 的通用 C 标头。这可以用于定位 Dawn、wgpu 等,简化使用 C FFI 的语言创建绑定的过程。
Chrome 团队还在考虑将 Dawn 作为所有浏览器 UI 元素的默认渲染后端,包括菜单、工具栏、开发者工具和网页内容。这将消除每个本机 API 需要单独渲染实现的需要,简化开发流程。这一功能目前在 macOS 和 Windows 的 chrome://flags/#skia-graphite
标志后面处于实验阶段。