What's WebGPU 的新功能 (Chrometain127)

François Beaufort
François Beaufort

Android 上的 OpenGL ES 實驗性支援

現在在 Android 版 Chrome 中要求實驗性 WebGPU 相容模式時,可以從 OpenGL ES 後端存取 GPUAdapter。如果 Android 裝置不支援 Vulkan 1.1 以上版本,這項功能就特別實用。請參閱以下範例和問題 dawn:1545

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
WebGPU 報告頁面會顯示 Android 裝置上 OpenGL ES 後端的 GPUAdapter 資訊。
webgpureport.org 中的 OpenGL ES 配接器資訊

由於這項功能仍處於實驗階段,您必須執行下列步驟:

  1. 啟用下列 Chrome 旗標:「Unsafe WebGPU Support」、「WebGPU Developer Features」和「Enable command line on non-rooted devices」。
  2. 在 Android 裝置上啟用 USB 偵錯功能。
  3. 將 Android 裝置連線至工作站,執行 adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line',將 OpenGL ES 後端設為優先於 Vulkan,然後重新啟動 Chrome。

GPUAdapter 資訊屬性

現在可以使用 GPUAdapter info 屬性,以同步方式取得介面的識別資訊。先前,呼叫非同步 GPUAdapter requestAdapterInfo() 方法是取得介面卡資訊的唯一方式。不過,requestAdapterInfo() 已從 WebGPU 規格中移除,Chrome 也將在今年稍晚移除這項功能,讓網頁開發人員有足夠時間進行必要轉換。請參閱以下範例:「Chrome 狀態」和「issue 335383516」。

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

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

WebAssembly 互通性改善

為配合直接傳遞至 WebGPU 的 WebAssembly 堆積,下列 BufferSource 引數的大小不再限制為 2 GB:dynamicOffsetsData (位於 setBindGroup() 中)、來源 data (位於 writeBuffer() 中) 和來源 data Pin writeTexture()。請參閱問題 339049388

改善指令編碼器錯誤

現在,從指令編碼器引發的部分驗證錯誤會提供更完善的脈絡資訊。舉例來說,嘗試啟動運算通道時,如果算繪通道仍處於開啟狀態,就會導致下列錯誤。

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

這會說明錯誤原因,但不會指出實際造成驗證錯誤的呼叫。下列錯誤訊息經過改良,包含觸發錯誤的指令。請參閱變更 192245

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

黎明更新

webgpu.h C API 不再公開 wgpuSurfaceGetPreferredFormat(),也就是 Dawn 的 C 等效項目 wgpu::Surface::GetPreferredFormat()。請改用 wgpu::Surface::GetCapabilities() 取得支援的格式清單,然後使用 formats[0] 取得這個介面偏好的紋理格式。在此期間,呼叫 wgpu::Surface::GetPreferredFormat() 會發出淘汰警告。請參閱問題 290

呼叫 wgpu::Surface::GetCapabilities() 時,現在可透過 wgpu::SurfaceCapabilities::usages 取得 Surface 支援的紋理用途。這些檔案一律應包含 wgpu::TextureUsage::RenderAttachment。請參閱問題 301

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

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