幾天前 谷歌揭幕 通過一個宣布 默認支持 WebGPU 圖形 API 和 WebGPU 著色語言 (WGSL) 在 Chrome 113 分支,計劃於 2 月 XNUMX 日發布。
對於那些不了解 WebGPU 的人,您應該知道 提供類似於 Vulkan、Metal 和 Direct3D 12 的 API 執行 GPU 端操作,例如渲染和計算,以及 允許使用著色器語言編寫 GPU 端程序.
關於WebGPU
從概念上講 WebGPU 不同於 WebGL 的方式與 Vulkan 圖形 API 不同於 OpenGL 的方式相同, 但是 WebGPU 並不是基於特定的圖形 API,而是一個通用層,使用與 Vulkan 中相同的低級原語。 金屬和 Direct3D。 網絡圖形處理器 為 JavaScript 應用程序提供對組織的低級控制, 處理命令並將其傳輸到 GPU,管理相關資源、內存、緩衝區、紋理對象和編譯的圖形著色器。 這種方法允許您通過減少開銷和提高 GPU 效率來實現更高性能的圖形應用程序。
網絡GPU 允許您為網絡創建複雜的3D項目 與直接使用 Vulkan、Metal 或 Direct3D 的獨立程序一樣工作,但不依賴於特定平台。 WebGPU 還提供了用於移植本機圖形程序的附加選項 通過在 WebAssembly 中編譯,生成支持 Web 的表單。 除了 3D 圖形之外,WebGPU 還涵蓋了與將計算卸載到 GPU 端和運行著色器相關的可能性。
在 WebGPU 的主要特性中,我們可以強調以下幾點:
- 分離管理資源、準備工作和命令傳輸 到 GPU(在 WebGL 中,一個對象同時負責所有事情)。 提供了三個獨立的上下文: GPUDevice 用於創建紋理和緩衝區等資源; GPUCommandEncoder 對單個命令進行編碼,包括處理和計算階段; GPUCommandBuffer 傳遞給 GPU 執行隊列。
結果可以在與一個或多個畫布項目關聯的區域中呈現,或者在沒有輸出的情況下呈現(例如,在運行計算任務時)。 暫存可以輕鬆地將資源創建和配置操作分離到可以在不同線程上運行的不同控制器中。 - 一種不同的狀態處理方法。 WebGPU 提供了兩個對象,GPURenderPipeline 和 GPUComputePipeline,它們允許您組合開發人員預定義的不同狀態,從而使瀏覽器不會將資源浪費在額外的工作上,例如重新編譯著色器。 支持的狀態包括:著色器、頂點緩衝區和屬性佈局、固定組佈局、混合、深度和圖案、渲染後輸出格式。
- 綁定模型,很像 Vulkan 的資源池工具. 為了將資源分組,WebGPU 提供了一個 GPUBindGroup 對象,該對象可以綁定到其他類似對象,以便在命令記錄期間在著色器中使用。
創建此類組允許控制器提前執行必要的準備操作,並允許瀏覽器更快地在繪製調用之間切換資源綁定。 可以使用 GPUBindGroupLayout 對象預定義資源綁定的佈局。
除了鉻, 實驗性 WebGPU 支持自 2020 年 XNUMX 月起已在 Firefox 中進行測試 從 2021 年 XNUMX 月起在 Safari 上。 要在 Firefox 中啟用 WebGPU,您必須在 about:config 中設置 dom.webgpu.enabled 和 gfx.webgpu.force-enabled 標誌。
目前還沒有在 Firefox 和 Safari 中默認啟用 WebGPU 的計劃。 為 Firefox 和 Chrome 開發的 WebGPU 實現可作為單獨的庫使用:Dawn (C++) 和 wgpu (Rust),您可以使用它們將 WebGPU 支持集成到您的應用程序中。
另外值得注意的是,正在努力將 WebGPU 支持添加到本地使用 WebGL 的流行 JavaScript 庫。 例如,完整的 WebGPU 支持已在 Babylon.js 中聲明,部分支持在 Three.js、PlayCanvas 和 TensorFlow.js 中聲明。
實施 WebGPU 最初只會在 ChromeOS、macOS 和 Windows 的構建中啟用, 而對於 Linux 和 Android,WebGPU 支持將在稍後激活。
最後,如果你有興趣了解更多,可以諮詢詳情 在下面的鏈接中。