WebGPU の新機能(Chrome 139)

François Beaufort
François Beaufort

公開日: 2025 年 7 月 30 日

BC および ASTC 圧縮形式の 3D テクスチャのサポート

"texture-compression-bc-sliced-3d""texture-compression-astc-sliced-3d" の WebGPU 機能により、ブロック圧縮(BC)形式と適応型スケーラブル テクスチャ圧縮(ASTC)形式を使用した 3D テクスチャのサポートが追加されます。これにより、体積テクスチャ データに BC 形式と ASTC 形式の効率的な圧縮機能を活用し、画質を大幅に損なうことなくメモリ使用量と帯域幅の要件を大幅に削減できます。これは、科学的可視化、医療画像処理、高度なレンダリング技術などの分野で特に有用です。

次のコード スニペットは、アダプターが BC および ASTC 圧縮形式の 3D テクスチャをサポートしているかどうかを確認し、これらの機能が利用可能な場合は、これらの機能を備えたデバイスをリクエストします。

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

const requiredFeatures = [];
if (adapter?.features.has("texture-compression-bc-sliced-3d")) {
  requiredFeatures.push(
    "texture-compression-bc",
    "texture-compression-bc-sliced-3d",
  );
}
if (adapter?.features.has("texture-compression-astc-sliced-3d")) {
  requiredFeatures.push(
    "texture-compression-astc",
    "texture-compression-astc-sliced-3d",
  );
}
const device = await adapter?.requestDevice({ requiredFeatures });

// Later on...
if (device.features.has("texture-compression-astc-sliced-3d")) {
  // Create a 3D texture using ASTC compression
} else if (device.features.has("texture-compression-bc-sliced-3d")) {
  // Create a 3D texture using BC compression
} else {
  // Fallback: Create an uncompressed 3D texture
}

ボリューム レンダリング - テクスチャ 3D WebGPU サンプルで 3D 脳スキャンを試すか、chromestatus エントリをご覧ください。

WebGPU を使用してレンダリングされた 3D 脳スキャン。
ASTC 圧縮形式の 3D テクスチャから取得した脳スキャン画像。

新しい「core-features-and-limits」機能

今後の WebGPU 互換モードに向けて、新しい "core-features-and-limits" 機能が導入されます。この機能は、アダプタまたはデバイスが WebGPU 仕様のコア機能と制限をサポートしていることを示します。現時点では「コア」WebGPU のみが利用可能なバージョンであるため、すべての WebGPU 実装で、サポートされている機能に "core-features-and-limits" を含める必要があります。

今後、WebGPU 互換モードがリリースされると、アダプターまたはデバイスにこの機能がない場合、それがコア アダプターまたはデバイスではなく互換モード アダプターまたはデバイスであることを示す可能性があります。デバイスで有効にすると、互換モードのすべての制限(機能と上限)が解除されます。

WebGPU 互換モードの詳細な説明と使用方法については、解説と次のセクションを参照してください。問題 418025721 をご覧ください。

WebGPU 互換モードのオリジン トライアル

WebGPU は、Vulkan、Metal、Direct3D 12 などのテクノロジーと連携する最新のグラフィック用に設計された強力な API です。しかし、これらの新しい API をサポートしていないデバイスがまだ多く存在します。たとえば、Windows では Chrome ユーザーの 31% が Direct3D 11.1 以降を搭載していません。Android では Android ユーザーの 15% が Vulkan 1.1 を搭載しておらず、そのうち 10% は Vulkan をまったく搭載していません。

これは、アプリケーションのリーチを最大化したいデベロッパーにとって課題となります。多くの場合、複数の実装(WebGPU や WebGL など)を開発するか、コア WebGPU でより限定的なユーザーを受け入れるか、WebGL に固執して GPU コンピューティングなどの WebGPU の高度な機能を利用しないかのいずれかを強いられます。

WebGPU 互換モードの視覚的な表現。
WebGPU 互換モードの対象範囲を拡大。

WebGPU 互換モードは、WebGPU API のやや制限されたオプトイン バージョンを提供することで、この問題を解決します。このモードは、OpenGL ES 3.1 や Direct3D11 などの古いグラフィック API を実行するように設計されており、コア WebGPU で必要な最新の明示的なグラフィック API をサポートしていないデバイスにアプリケーションを大幅に拡張できます。

互換モードは WebGPU のサブセットであるため、互換モードで構築されたアプリケーションは有効な WebGPU の「コア」アプリケーションでもあります。つまり、互換モードを特にサポートしていないブラウザでもシームレスに実行されます。

多くの基本的なアプリケーションでは、互換性モードを有効にするには、requestAdapter() を呼び出すときに featureLevel: "compatibility" を渡すだけで済みます。より複雑なアプリケーションでは、モードの制限内に収まるように微調整が必要になる場合があります。Generate Mipmap WebGPU サンプルが良い例です。

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({
  featureLevel: "compatibility",
});

const hasCore = adapter?.features.has("core-features-and-limits");
const device = await adapter?.requestDevice({
  requiredFeatures: (hasCore ? ["core-features-and-limits"] : []),
});

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

機能を有効にする

デフォルトでは、Chrome で WebGPU 互換モードは有効になっていませんが、Chrome 139 では、機能を明示的に有効にすることで試すことができます。chrome://flags/#enable-experimental-web-platform-features で「試験運用版のウェブ プラットフォームの機能」フラグを有効にすると、ローカルで有効にできます。

アプリのすべてのユーザーに対して有効にするためのオリジン トライアルが実施されており、Chrome 145(2026 年 4 月 21 日)に終了する予定です。トライアルに参加するには、オリジン トライアルのスタートガイドの投稿をご覧ください。

Dawn のアップデート

ステータスも受け取る他のコールバック関数との整合性を高めるため、WGPUQueueWorkDoneCallback 関数に message 引数が追加されました。webgpu-headers PR をご覧ください。

emdawnwebgpu が -sSHARED_MEMORY とリンクされている場合、その webgpu.cpp ファイルもこのフラグでコンパイルされます。Dawn CL 244075 を参照してください。

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

WebGPU の新機能

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

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