WebGPU の新機能(Chrome 127)

François Beaufort
François Beaufort

Android での OpenGL ES の試験運用版サポート

Chrome for Android で試験運用版の 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' を実行して Vulkan ではなく OpenGL ES バックエンドを優先し、Chrome を再起動します。

GPUAdapter の info 属性

アダプターに関する識別情報を取得する際に、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 に直接渡されるように、setBindGroup()dynamicOffsetsDatawriteBuffer() のソース data、ソース data ピン writeTexture() の BufferSource 引数のサイズが 2 GB に制限されなくなりました。問題 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)

これはエラーの原因を説明しますが、実際に検証エラーの原因となった呼び出しは示しません。次のエラーは、エラーをトリガーしたコマンドを含む、改善されたメッセージです。change 192245 をご覧ください。

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

Dawn の更新

webgpu.h C API で、Dawn の wgpu::Surface::GetPreferredFormat() に相当する C の wgpuSurfaceGetPreferredFormat() が公開されなくなりました。代わりに、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