WebGPU の新機能(Chrome 127)

François Beaufort
François Beaufort

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

Chrome for Android で試験運用版の WebGPU 互換モードをリクエストすると、OpenGL ES バックエンドから GPUAdapter にアクセスできるようになりました。これは、Vulkan 1.1 以降のサポートがない Android デバイスで特に便利です。次の例と issue 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. 「Unsafe WebGPU Support」、「WebGPU Developer Features」、「Enable command line on non-rooted devices」の Chrome フラグを有効にします。
  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 に直接渡されるようにするため、次の 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]).

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 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