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 になります。Google は、GPUAdapter isFallbackAdapter 属性を非推奨にして削除できるかどうかを調査しています。発送の意向をご覧ください。

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

Chrome チームは、D3D12 バックエンドを使用して WebGPU をサポートするデバイス用の中間表現(IR)を追加することで、WebGPU シェーダー言語コンパイラである Tint の改善を続けています。この IR は、Tint の抽象構文木(AST)と HLSL バックエンド ライターの間に配置され、コンパイラをより効率的でメンテナンス可能にし、最終的にはデベロッパーとユーザーの両方にメリットをもたらします。初期テストでは、新しいバージョンの Tint は、Unity の WGSL シェーダーを HLSL に変換する際に最大 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 互換モードを選択するようブラウザにヒントが示されます。成功すると、作成されたアダプタは「互換性のデフォルト」になります。それ以外の場合は、「コアのデフォルト」です。これは、featureLevel: "core" オプションを使用する場合と同じです。また、requiredFeaturesrequiredLimits なしで requestDevice() を呼び出すと、GPUAdapter のデフォルト機能を持つ GPUDevice がリクエストされます。

コアのデフォルト アダプタは常に "core-features-and-limits" 機能をサポートしており、それらから作成された GPUDevices で自動的に有効になります。互換性がデフォルトのアダプタの場合、"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 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