WebGPU 通常被认为是一种 Web 图形 API,它通过提供先进的硬件功能并在 GPU 上实现渲染和计算操作,从而授予对 GPU 的统一和快速访问功能(类似于 Direct3D 12、Metal 和 Vulkan)。
不过,WebGPU 只是超越了 JavaScript API 的界限;它是类似于 WebAssembly 的基本构建块,由于其生态系统的蓬勃发展,其影响已远远超过网络。Chrome 团队承认,WebGPU 不仅仅是网络技术,它是一个以核心技术为中心的欣欣向荣的生态系统。
探索当前的生态系统
这一历程从 JavaScript 规范开始,JavaScript 规范是 Apple、Google、Intel、Mozilla 和 Microsoft 等众多组织的协作项目。目前,所有主流网络浏览器都已实现或正在实现 WebGPU。
与此同时,Mozilla 和 Google 认识到 WebGPU 在平台专有方面的潜力,并将 WebGPU 实现与浏览器分离,从而实现了独立使用。
在 Chrome 中,这具体化为 Dawn,这是一个 C/C++ 库,可将 WebGPU 调用转换为 GPU 驱动程序命令。Dawn 让 C 和 C++ 应用能够以原生方式使用 WebGPU,并利用浏览器供应商专业技术提供可移植的人体工学 GPU 抽象。
正如WebGPU:未来的跨平台图形 API 这篇博文所述,将特定于平台的 WebGPU 应用移植到 Web 非常简单。C++ WebAssembly 工具链 Emscripten 已支持 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 作为所有浏览器界面元素(包括菜单、工具栏、开发者工具和 Web 内容)的默认渲染后端。这样就无需为每个原生 API 使用单独的渲染实现,从而简化开发过程。在 macOS 和 Windows 上,此功能(需使用 chrome://flags/#skia-graphite
标志)目前处于实验阶段。
致谢
主打图片:Daniel Öberg 在 Unsplash 用户发布。