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. 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 のステータスissue 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 に制限されなくなりました。dynamicOffsetsDatasetBindGroup()writeBuffer() のソース datawriteTexture() Pin のソース dataissue 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 API である wgpuSurfaceGetPreferredFormat() を公開しなくなりました。代わりに、wgpu::Surface::GetCapabilities() を使用してサポートされている形式のリストを取得し、formats[0] を使用してこのサーフェスに適したテクスチャ形式を取得します。それまでは、wgpu::Surface::GetPreferredFormat() を呼び出すと非推奨の警告が発行されます。issue 290 をご覧ください。

サーフェスのサポートされているテクスチャの使用状況は、wgpu::Surface::GetCapabilities() を呼び出すときに wgpu::SurfaceCapabilities::usages から確認できるようになりました。常に wgpu::TextureUsage::RenderAttachment が含まれることが想定されています。issue 301 をご覧ください。

これは主なハイライトの一部にすぎません。コミットの完全なリストをご覧ください。

WebGPU の新機能

WebGPU の新機能シリーズで取り上げられたすべての機能のリストです。

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