WebGPU の新機能(Chrome 136)

François Beaufort
François Beaufort

公開日: 2025 年 4 月 23 日

GPUAdapterInfo isFallbackAdapter 属性

GPUAdapterInfo の isFallbackAdapter ブール値属性は、互換性の向上、動作の予測可能性の向上、プライバシーの強化と引き換えに、GPUAdapter にパフォーマンス上の大きな制限があるかどうかを示します。この追加が必要だったのは、ユーザーが提供した GPUDevice オブジェクトを受け取るライブラリが、GPUDevice の adapterInfo 属性を介してこの情報にアクセスできなかったためです。次の例と問題 403172841 をご覧ください。

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Chrome ではフォールバック アダプタのサポートがまだ提供されていないため、現時点ではユーザーのデバイスで isFallbackAdapter は常に false になります。GPUAdapter isFallbackAdapter 属性を非推奨にして削除できるかどうかを調査しています。出荷予定を参照してください。

D3D12 でのシェーダー コンパイル時間の短縮

Chrome チームは、D3D12 バックエンドで WebGPU をサポートするデバイスの中間表現(IR)を追加することで、WebGPU シェーダー言語コンパイラである Tint を改善し続けています。Tint の抽象構文木(AST)と HLSL バックエンド ライターの間に配置されるこの IR により、コンパイラがより効率的で保守しやすくなり、最終的にはデベロッパーとユーザーの両方にメリットがもたらされます。初期テストでは、Unity の WGSL シェーダーを HLSL に変換する際に、新しいバージョンの Tint が最大 10 倍高速であることが示されています。

フローチャートは、WGSL シェーダー コードを低レベルの GPU 命令に変換するプロセスを示しています。
Windows でのレンダリング パイプラインの作成。

これらの改善は、Android、ChromeOS、macOS ではすでに利用可能ですが、D3D12 バックエンドで WebGPU をサポートする Windows デバイスにも順次拡大されています。問題 42251045 をご覧ください。

キャンバスの画像を保存、コピーする

Chrome ユーザーは、WebGPU キャンバスを右クリックして、コンテキスト メニュー オプションの [名前を付けて画像を保存...] または [画像をコピー] にアクセスできるようになりました。問題 40902474 をご覧ください。

こちらの
ユーザーが [画像を保存] コンテキスト メニューを選択しました。

ブランド効果測定の互換モードの制限を解除する

GPUDevice で利用可能な試験運用版の "core-features-and-limits" 機能は、chrome://flags/#enable-unsafe-webgpu フラグが有効になっている場合、すべての互換モードの制限(機能と上限)を解除します。問題 395855517 をご覧ください。

featureLevel: "compatibility" オプションを指定して GPUAdapter をリクエストすると、ブラウザは試験運用版の WebGPU 互換モードを選択するようヒントを受け取ります。成功した場合、結果のアダプタは「compatibility-defaulting」になります。それ以外の場合は「コアのデフォルト設定」となり、featureLevel: "core" オプションを使用した場合と同じになります。また、requiredFeaturesrequiredLimits なしで requestDevice() を呼び出すと、GPUAdapter のデフォルト機能を持つ GPUDevice がリクエストされます。

コアのデフォルト設定のアダプタは常に "core-features-and-limits" 機能をサポートしており、それらから作成された GPUDevice で自動的に有効になります。互換性デフォルトのアダプタの場合、"core-features-and-limits" 機能がサポートされている可能性があり、それらから作成された GPUDevice でリクエストできます。どちらのタイプのアダプタも、コアモードと互換モードの両方でオプションの "float32-blendable" などの機能をサポートできます。

次の例は、"float32-blendable" を必要とし、コア機能が利用可能な場合はその使用をサポートするが、コア機能が利用できない場合は互換性機能のみを使用するアプリのものです。

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

試験運用版の GPUAdapter featureLevel 属性と isCompatibilityMode 属性は、"core-features-and-limits" 機能に置き換えられました。問題 395855516 を参照してください。

Dawn のアップデート

コールバックがキャンセルされたが、パイプラインのコンパイルなど、イベントに関連付けられたバックグラウンド処理はまだ実行されている可能性があることを明確にするため、コールバック ステータス列挙型 InstanceDropped の名前が CallbackCancelled に変更されました。新しい名前は、後で別のキャンセル メカニズムが追加された場合にも対応できるように、より汎用的なものになっています。問題 520 をご覧ください。

エラー スコープ スタックをポップできなかったことを示す wgpu::PopErrorScopeStatus::EmptyStack 列挙型が wgpu::PopErrorScopeStatus::Error に名前変更されました(これはより汎用性があります)。コールバックには、デバッグに役立つ対応するエラーの説明メッセージも含まれるようになりました。問題 369 をご覧ください。

ここでは、主なハイライトの一部のみを取り上げます。コミットの一覧をご覧ください。

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