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,即可在本機進行實驗。請參閱問題 dawn:1705

透過 AC 電源預設取得離散 GPU

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

改善開發人員體驗

新的開發人員工具警告

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

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

雖然零大小調度和繪製動作都有效,但警告鼓勵開發人員盡量避免出現。請參閱問題 dawn:1786

提供更明確的錯誤訊息

如果呼叫了 finish(),系統現在會在使用 GPUCommandEncoder 時提供更完善的錯誤訊息。請參閱問題 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 無法編譯,系統會轉儲 HLSL。請參閱問題 dawn:1681

日出最新消息

取消設定頂點緩衝區

nullptr (而非 wgpu::Buffer) 傳遞至 wgpu::RenderPassEncoderwgpu::RenderBundleEncoder 上的 SetVertexBuffer(),即可取消先前在特定版位中設定的頂點緩衝區。請參閱問題 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。請參閱問題發生時: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 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