WebGPU の新機能(Chrome 127)

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' を実行して Vulkan ではなく OpenGL ES バックエンドを優先し、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 に直接渡されるように、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 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