WebGPU 常被認為是網路圖形 API,透過公開先進的硬體功能,並在 GPU 上執行轉譯和運算作業,類似於 Direct3D 12、 Metal 和 Vulkan,藉此授予整合與快速存取 GPU 的特性。
然而,WebGPU 可跨越只是 JavaScript API 的邊界而已;WebGPU 是與 WebAssembly 類似的基本建構模塊,它的影響是因為不斷爆發的生態系統,進一步延伸到網頁之外。Chrome 團隊認為 WebGPU 不只是網路技術,更是以核心技術為中心的蓬勃發展生態系統。
探索目前的生態系統
這趟旅程從 JavaScript 規格開始,與我們合作許多機構,包括 Apple、Google、Intel、Mozilla 和 Microsoft。目前所有主要的網路瀏覽器都已實作,或正在進行 WebGPU 的實作。
同時,Mozilla 和 Google 認為 WebGPU 具備平台專用應用程式的能力,並且與瀏覽器分開部署 WebGPU ,因此能夠單獨使用。
對 Chrome 而言,這會具體化為 Dawn,這是可將 WebGPU 呼叫轉譯為 GPU 驅動程式指令的 C/C++ 程式庫。Dawn 可讓 C 和 C++ 應用程式以原生方式使用 WebGPU,透過瀏覽器廠商的專業知識,提供可攜式且符合人體工學的 GPU 抽象化機制。
如 WebGPU:明日的跨平台圖形 API 一文所述,將平台專用 WebGPU 應用程式移植到網路的程序相當簡單。Emscripten 是 C++ WebAssembly 工具鍊,原本就支援 WebGPU,只需極少修改將其移至網路即可。
您也可以使用 Node.js JavaScript 執行階段,在瀏覽器中執行 JavaScript WebGPU 程式碼,因為其中包含以 Dawn 為基礎的 WebGPU 模組。可讓您在不修改伺服器端或其他平台特定的情況下執行程式碼。
Rust 也有類似的生態系統,其中 wgpu 和 Firefox 的 WebGPU 實作。Wgpu 可直接整合至 Rust 應用程式,接著使用 web-sys 將該應用程式移植至網路。此外,Deno JavaScript 執行階段透過 wgpu 支援 WebGPU。請參閱 wgpu Alliance with Deno 網誌文章。
這會在 Rust 和 C++ 之間建立平行生態系統,如下圖所示。
![2023 年 WebGPU 生態系統圖表。](https://developer.chrome.com/static/blog/webgpu-ecosystem/image/diagram-the-webgpu-ecosy-384594168a61.png?authuser=19&hl=zh-tw)
新興的視野
WebGPU 生態系統擴展到 JavaScript、C++ 和 Rust 運作範圍之外。
您偏好的程式設計語言實際上可能已有 WebGPU 繫結,因為負責處理 WebGPU 的工程師也正在開發 WebGPU 的通用 C 標頭。這可用於指定 Dawn、wgpu 等語言,進而使用 C FFI 減少建立語言的繫結。
Chrome 團隊也考慮使用 Dawn 做為所有瀏覽器 UI 元素 (包括選單、工具列、開發人員工具和網頁內容) 的預設轉譯後端,這樣就不必針對每個原生 API 分別實作算繪,簡化開發程序。這項功能目前在 macOS 和 Windows 上 chrome://flags/#skia-graphite
旗標後方的 Windows 實驗階段。
特別銘謝
主頁橫幅由 Daniel Öberg 於 Unsplash 網站上撰寫。