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 著色器語言編譯器),為支援 WebGPU 的 D3D12 後端裝置新增中介呈現 (IR)。這個 IR 位於 Tint 的抽象語法樹狀結構 (AST) 和 HLSL 後端寫入器之間,可讓編譯器更有效率且更易於維護,最終造福開發人員和使用者。初步測試顯示,在將 Unity 的 WGSL 著色器轉譯為 HLSL 時,新版 Tint 的速度最高可快上 10 倍。

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

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

儲存及複製無框畫圖片

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

歡迎參閱
使用者選取「Save Image As…」內容選單。

提升相容性模式限制

實驗性的 "core-features-and-limits" 功能在 GPUDevice 上可用時,啟用 chrome://flags/#enable-unsafe-webgpu 標記後,即可解除所有相容性模式限制 (功能和限制)。請參閱問題 395855517

使用 featureLevel: "compatibility" 選項要求 GPUAdapter 會提示瀏覽器選取實驗性的 WebGPU 相容性模式。如果成功,產生的轉接器會是「相容性預設值」。否則,系統會使用「核心預設值」,這與使用 featureLevel: "core" 選項相同。此外,如果未指定 requiredFeaturesrequiredLimits 就呼叫 requestDevice(),系統會要求 GPUDevice 使用 GPUAdapter 的預設功能。

核心預設轉接器一律支援 "core-features-and-limits" 功能,且會在透過這些轉接器建立的 GPUDevices 上自動啟用。對於相容性預設的轉接器,可能會支援 "core-features-and-limits" 功能,並可在由這些轉接器建立的 GPUDevices 上提出要求。這兩種轉接器也可能支援 "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 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