What's WebGPU 的新功能 (Chrometain127)

François Beaufort
François Beaufort

Android 上的 OpenGL ES 實驗性支援

在 Android 版 Chrome 中要求實驗性 WebGPU 相容模式時,您現在可以從 OpenGL ES 後端存取 GPUAdapter。這對於不支援 Vulkan 1.1 以上版本的 Android 裝置特別實用。請參閱以下範例和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 狀態問題 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 互通性改善

為配合 WebAssembly 堆疊直接傳遞至 WebGPU,下列 BufferSource 引數的大小不再受限於 2 GB:setBindGroup() 中的 dynamicOffsetsDatawriteBuffer() 中的來源 data,以及來源 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 的 wgpu::Surface::GetPreferredFormat() 的 C 等同物。請改用 wgpu::Surface::GetCapabilities() 取得支援的格式清單,然後使用 formats[0] 取得此途徑的紋理格式偏好設定。在此同時,呼叫 wgpu::Surface::GetPreferredFormat() 會發出淘汰警告。請參閱問題 290

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

這份文件僅涵蓋部分重點。請查看完整的修訂版本清單

WebGPU 新功能

以下是「WebGPU 最新消息」系列文章中涵蓋的所有內容。

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