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 });
<ph type="x-smartling-placeholder">
</ph> WebGPU レポートページに、Android デバイスの OpenGL ES バックエンドからの GPUAdapter 情報が表示されている。
webgpureport.org の OpenGL ES アダプタ情報

この機能はまだ試験運用段階のため、以下の手順を行う必要があります。

  1. Chrome の [安全でない WebGPU サポート]、[WebGPU のデベロッパー向け機能]、[root 権限のないデバイスでコマンドラインを有効にする] の各フラグを有効にします。
  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 に直接渡されるようにするため、BufferSource 引数のサイズが 2 GB に制限されなくなりました(setBindGroup()dynamicOffsetsDatawriteBuffer() のソース data、ソース data のピン 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)

これによってエラーの原因は示されますが、どの呼び出しが実際に検証エラーの原因となったかは示されません。以下のエラーは、エラーをトリガーしたコマンドを含む改善されたメッセージを示しています。change 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 で、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 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