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 支援。您現在可以在 Windows 上執行 Chrome,並使用 --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 指令列旗標,在本機進行實驗。請參閱問題 dawn:1705

在 AC 電源上預設使用獨立 GPU

在雙 GPU macOS 裝置上,如果呼叫 requestAdapter() 時沒有 powerPreference 選項,當使用者裝置使用 AC 電源時,系統會傳回獨立 GPU。否則,系統會傳回整合式 GPU。請參閱變更 4499307

提升開發人員體驗

新的開發人員工具警告

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

如果 GPUBlendComponent 同時包含明確和預設成員,系統也會發出警告。請參閱問題 dawn:1785

雖然零大小的調度和繪圖有效,但警告會鼓勵開發人員盡可能避免使用。請參閱問題 dawn:1786

更完善的錯誤訊息

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

使用已毀損的物件提交指令緩衝區時,錯誤訊息中會顯示 submit() 中使用的指令緩衝區標籤。請參閱問題 dawn:1747

驗證 depthStencil 時,錯誤訊息現在會指出深度樣板狀態的無效部分。請參閱問題 dawn:1735

minBindingSize 驗證錯誤訊息現在會回報驗證失敗的繫結群組和數量,以及緩衝區。請參閱問題 dawn: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 上啟用偵錯功能時,可享有更優質的偵錯體驗。請參閱問題 dawn:1784

macOS 上的 Instruments 應用程式螢幕截圖,顯示來自 WebGPU 的自訂標籤。
macOS 上的 Instruments 應用程式中定義的使用者標籤。

如果編譯失敗,請記錄 HLSL

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

黎明更新

取消設定頂點緩衝區

nullptr 傳遞至 SetVertexBuffer() (而非 wgpu::Buffer) 上的 wgpu::RenderPassEncoderwgpu::RenderBundleEncoder,即可取消設定特定時段中先前設定的頂點緩衝區。請參閱問題 dawn:1675

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

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

暫時性附件

您可以建立附件,讓算繪通道作業保留在圖塊記憶體中,避免 VRAM 流量,並透過設定 wgpu::TextureUsage::TransientAttachment 用途,可能避免為紋理分配 VRAM。這項功能僅支援 Metal 和 Vulkan。請參閱問題 dawn: 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 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