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)形式と Adaptive Scalable Texture Compression(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 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