WebGPU 通常被视为一种 Web 图形 API,它通过公开尖端的硬件功能并在 GPU 上启用渲染和计算操作,从而授予对 GPU 的统一快速访问权限,类似于 Direct3D 12、Metal 和 Vulkan。
不过,WebGPU 超越了仅仅是 JavaScript API 的范畴;它是一种类似于 WebAssembly 的基础构建块,由于其蓬勃发展的生态系统,其影响远远超出了 Web 领域。Chrome 团队认为,WebGPU 不仅仅是一项 Web 技术,而是一个以核心技术为中心的蓬勃发展生态系统。
探索当前生态系统
该旅程始于 JavaScript 规范,这是 Apple、Google、Intel、Mozilla 和 Microsoft 等众多组织的协作成果。所有主要 Web 浏览器都已实现或正在实现 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 alliance with 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
标志才能使用。