What's WebGPU 新功能 (Chrome 115 以上版本)

François Beaufort
François Beaufort

支援的 WGSL 語言擴充功能

GPU 物件的 wgslLanguageFeatures 成員會列出支援的 WGSL 語言擴充功能名稱。系統會自動啟用支援的 WGSL 語言擴充功能,因此您不必明確要求。這份清單目前是空的,但日後可能會有大量項目 (例如 do-while loops)。請參閱問題 dawn:1777

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Direct3D 11 實驗性支援

Chromium 團隊正設法針對 Direct3D 11 新增 WebGPU 支援。您現在可以使用 --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 指令列旗標,在 Windows 上執行 Chrome,在本機試用 Chrome。請參閱問題發生時間:1705

在 AC 電源上預設取得離散 GPU

在雙 GPU macOS 裝置上,如果呼叫 requestAdapter() 時未提供 powerPreference 選項,當使用者的裝置處於 AC 電源時,系統會傳回離散 GPU。否則,系統會傳回整合式 GPU。請參閱「變更 4499307」。

改善開發人員體驗

新的開發人員工具警告

如果在 GPUExtend3DDict 中使用 depth 金鑰,開發人員工具控制台就會顯示警告,因為正確的金鑰是 depthOrArrayLayers。請參閱 問題 chromium:1440900

如果 GPUBlendComponent 同時具有明確和預設的成員,系統也會發出警示。請參閱問題發生時間:1785

雖然零大小調度和繪製作業很有效,但系統還是會發出警告,鼓勵開發人員盡可能避免這類問題。請參閱問題發生時間:1786

提供更明確的錯誤訊息

如果已呼叫 finish(),現在使用 GPUCommandEncoder 時,系統會提供更明確的錯誤訊息。請參閱問題發生時間:1736

提交含有已刪除物件的指令緩衝區時,錯誤訊息中會顯示 submit() 中使用的指令緩衝區標籤。請參閱問題發生時間:1747

現在在驗證 depthStencil 時,錯誤訊息中會指定深度模板狀態的無效部分。請參閱問題發生時間:1735

minBindingSize 驗證錯誤訊息現在會回報驗證失敗的群組和繫結數量,以及緩衝區。請參閱問題日出:1604

GPUBuffer 物件的 mapAsync() 方法傳回的錯誤訊息已更新,以協助開發人員進行偵錯。請參閱下方範例和 問題 chromium:1431622

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

macOS 偵錯工具中的標籤

use_user_defined_labels_in_backend 偵錯切換按鈕可讓您將物件標籤轉送至後端,以便在 RenderDoc、PIX 或 Instruments 等平台專用的偵錯工具中。現在起,啟用 macOS 的偵錯功能之後,您就能享有更優質的偵錯體驗。請參閱問題日出:1784

macOS 的「Instruments」應用程式螢幕截圖,其中含有來自 WebGPU 的自訂標籤。
macOS「Instruments」應用程式中的使用者定義標籤。

如果編譯失敗,系統會記錄 HLSL

dump_shaders」偵錯切換按鈕可讓您記錄輸入的 WGSL 著色器和已翻譯的後端著色器。從現在起,當您啟用此功能以進行偵錯時,如果 HLSL 編譯失敗,系統會傾印出 HLSL。請參閱問題日出:1681

黎明更新

取消設定頂點緩衝區

透過在 wgpu::RenderPassEncoderwgpu::RenderBundleEncoder 上將 nullptr (而非 wgpu::Buffer) 傳遞至 SetVertexBuffer(),可讓您取消設定先前在特定運算單元中設定的頂點緩衝區。請參閱問題發生時間:1675

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

暫時性附件

您可以建立附件,讓算繪傳遞作業留在圖塊記憶體中,透過設定 wgpu::TextureUsage::TransientAttachment 用法來避免 VRAM 流量,並可能避免為紋理分配 VRAM。這項功能僅適用於 Metal 和 Vulkan。請參閱問題發生時間:1695 年

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

未使用depot_tools的建築物

新的 DAWN_FETCH_DEPENDENCIES CMake 選項可讓您使用可讀取 DEPS 檔案的 Python 指令碼擷取 Dawn 依附元件,而不必要求所有依附於 depot_tools 的專案。請參閱變更 131750

WebGPU 的新功能

WebGPU 新功能」系列中已說明的所有功能清單。

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