WebGPU 新功能 (Chrome 136)

François Beaufort
François Beaufort

發布日期:2025 年 4 月 23 日

GPUAdapterInfo isFallbackAdapter 屬性

GPUAdapterInfo isFallbackAdapter 布林值屬性會指出 GPUAdapter 是否為了提高相容性、提供更可預測的行為或改善隱私權,而大幅限制效能。這是因為採用使用者提供的 GPUDevice 物件的程式庫,無法透過 GPUDevice 的 adapterInfo 屬性存取這項資訊,因此必須新增這項屬性。請參閱以下範例和問題 403172841

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

由於 Chrome 尚未支援備用轉接頭,因此使用者裝置上的 isFallbackAdapter 目前一律為 false。我們正在調查是否可以淘汰並移除 GPUAdapter isFallbackAdapter 屬性。請參閱「出貨意願」。

改善 D3D12 的著色器編譯時間

Chrome 團隊持續改良 Tint (WebGPU 著色器語言編譯器),為支援 D3D12 後端的 WebGPU 裝置新增中繼表示法 (IR)。這個 IR 位於 Tint 的抽象語法樹 (AST) 和 HLSL 後端寫入器之間,可提升編譯器的效率和可維護性,最終造福開發人員和使用者。初步測試顯示,新版 Tint 在將 Unity 的 WGSL 著色器轉換為 HLSL 時,速度最多可提升 10 倍。

流程圖:顯示將 WGSL 著色器程式碼轉換為低階 GPU 指令的程序。
在 Windows 中建立轉譯管道。

這些改良功能已在 Android、ChromeOS 和 macOS 上推出,現在也逐步擴展至支援 WebGPU 的 Windows 裝置 (使用 D3D12 後端)。請參閱問題 42251045

儲存及複製畫布圖片

Chrome 使用者現在可以對 WebGPU 畫布按一下滑鼠右鍵,然後存取「另存圖片…」或「複製圖片」等內容選單選項。請參閱問題 40902474

歡迎參閱
使用者選取「另存圖片為…」內容選單。

解除相容性模式限制

如果 GPUDevice 提供實驗性 "core-features-and-limits" 功能,啟用 chrome://flags/#enable-unsafe-webgpu 標記後,所有相容性模式限制 (功能和限制) 都會解除。請參閱問題 395855517

使用 featureLevel: "compatibility" 選項要求 GPUAdapter 會提示瀏覽器選取實驗性的 WebGPU 相容模式。如果成功,產生的轉接器會是「compatibility-defaulting」。否則為「core-defaulting」,與使用 featureLevel: "core" 選項相同。此外,如果呼叫 requestDevice() 時沒有 requiredFeaturesrequiredLimits,系統會要求使用 GPUAdapter 的預設功能建立 GPUDevice。

核心預設的介面卡一律支援 "core-features-and-limits" 功能,且系統會自動在從這些介面卡建立的 GPUDevice 上啟用這項功能。如果是相容性預設的介面卡,系統可能會支援 "core-features-and-limits" 功能,並可從中建立 GPUDevice。這兩種類型的轉接器也可能支援 "float32-blendable" 等功能,在核心和相容模式中,這項功能都是選用功能。

以下範例適用於需要 "float32-blendable" 的應用程式,這類應用程式支援使用核心功能 (如有),但如果沒有核心功能,則只會使用相容性功能。

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

實驗性 GPUAdapter featureLevelisCompatibilityMode 屬性已移除,並改用 "core-features-and-limits" 功能。請參閱問題 395855516

黎明更新

回呼狀態列舉 InstanceDropped 已重新命名為 CallbackCancelled,明確指出回呼已取消,但與事件相關聯的背景處理作業 (例如管道編譯) 可能仍在執行。新名稱適用於更廣泛的情況,以防日後新增其他取消機制。請參閱問題 520

指出無法彈出錯誤範圍堆疊的 wgpu::PopErrorScopeStatus::EmptyStack 列舉已重新命名為 wgpu::PopErrorScopeStatus::Error (也更普遍適用)。回呼現在也包含相應的錯誤說明訊息,有助於偵錯。請參閱問題 369

這僅涵蓋部分重點。請參閱完整的提交清單

WebGPU 最新消息

WebGPU 最新消息」系列涵蓋的所有主題清單。

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113