В
WebGPU 的主要目標是為 Web 平台提供安全、用戶友好、可移植和高效能的編程接口,以利用現代系統圖形 API 提供的 3D 圖形技術和功能,例如 Windows 上的 Direct3D 12、Metal在macOS 上,以及在Linux 上的Vulkan。 從概念上講,WebGPU 與 WebGL 的不同之處與 Vulkan 與 OpenGL 的不同之處非常相似,同時它不是基於特定的圖形 API,而是一個通用層,通常使用與 Vulkan 中相同的低階基元,金屬和Direct3D。
WebGPU 為 JavaScript 應用程式提供對 GPU 命令的組織、處理和傳輸的較低層級控制,管理相關資源、記憶體、緩衝區、紋理物件和編譯的圖形著色器。 透過這種方法,您可以降低開銷成本並提高 GPU 的工作效率,從而實現更高的圖形應用程式效能。
WebGPU 使得為 Web 創建成熟的複雜 3D 專案成為可能,其工作效果並不比直接存取 Vulkan、Metal 或 Direct3D 但不依賴特定平台的獨立程式差。 透過使用 WebAssembly 技術將本機圖形程式移植到支援 Web 的形式時,WebGPU 也提供了附加功能。 除了 3D 圖形之外,WebGPU 還涵蓋與將運算卸載到 GPU 和支援著色器開發相關的功能。 著色器
WebGPU 使用單獨的資源管理、準備工作以及向 GPU 傳輸命令(在 WebGL 中,一個物件同時負責所有事情)。 提供了三個單獨的上下文:
GPUDevice用於建立紋理和緩衝區等資源; GPUCommandEncoder 用於編碼單一指令,包括渲染和運算階段; GPUCommandBuffer 將排隊等待在 GPU 上執行。 結果可以在與一個或多個畫布元素關聯的區域中呈現,或者在沒有輸出的情況下進行處理(例如,在執行計算任務時)。 分離階段可以更輕鬆地將資源建立和準備操作分離到可以在不同執行緒上執行的不同處理程序。
WebGPU 和 WebGL 之間的第二個差異在於處理狀態的方法不同。 WebGPU 提供了兩個物件 - GPURenderPipeline 和 GPUComputePipeline,它們允許您組合開發人員預先定義的各種狀態,這使得瀏覽器不會將資源浪費在額外的工作上,例如重新編譯著色器。 支援的狀態包括:著色器、頂點緩衝區和屬性佈局、黏性群組佈局、混合、深度和圖案以及渲染後輸出格式。
WebGPU的第三個特性稱為綁定模型,很大程度上
讓人想起 Vulkan 中的資源分組工具。
為了將資源分組在一起,WebGPU 提供了 GPUBindGroup 對象,該物件可以與其他類似物件關聯,以便在編寫命令時在著色器中使用。 建立此類群組允許驅動程式提前執行必要的準備操作,並允許瀏覽器更快地更改繪製呼叫之間的資源綁定。 資源綁定的佈局可以使用 GPUBindGroupLayout 物件進行預先定義。
在 Firefox 中,要在 about:config 中啟用 WebGPU,有一個設定「dom.webgpu.enabled」。 CanvasContext 渲染還需要啟用合成
來源: opennet.ru