WebGPU の新機能(Chrome 127)

François Beaufort
François Beaufort

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

Android 版 Chrome で試験運用版の 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. 次の 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 に直接渡されるようにするため、次の BufferSource 引数のサイズが 2 GB に制限されなくなりました。setBindGroup() の dynamicOffsetsData、writeBuffer() のソース 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 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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