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" を渡すだけで済みます。より複雑なアプリでは、モードの制限内に収まるように若干の調整が必要になる場合があります。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 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