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" 機能により、ブロック圧縮(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
}

Volume Rendering - Texture 3D WebGPU サンプルを確認して、3D 脳スキャンを探索し、chromestatus エントリをご覧ください。

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

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

今後の WebGPU 互換モード向けに、新しい "core-features-and-limits" 機能が導入されます。この機能は、アダプターまたはデバイスが WebGPU 仕様のコア機能と制限をサポートしていることを示します。現時点では「core」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 を使用していません。Vulkan をまったく使用していないユーザーは 10% です。

これにより、アプリケーションのリーチを最大化したいデベロッパーにとって課題が生じます。多くの場合、複数の実装(WebGPU と WebGL など)を開発するか、コア WebGPU でより限定的なユーザーを対象とするか、WebGL を使用して WebGPU の高度な機能(GPU コンピューティングなど)を利用しないかのいずれかを選択する必要があります。

WebGPU 互換性モードの視覚的な表現。
WebGPU 互換モードのリーチの拡大。

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

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

多くの基本的なアプリケーションでは、featureLevel: "compatibility" を呼び出すときに requestAdapter() を渡すだけで、互換モードを有効にできます。より複雑なアプリケーションでは、モードの制限内に収まるように 微調整 が必要になる場合があります。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
}

機能を有効にする

デフォルトでは、WebGPU 互換モードは Chrome で有効になっていませんが、機能を明示的に有効にすることで Chrome 139 で試すことができます。chrome://flags/#enable-experimental-web-platform-features で "Experimental Web Platform Features" [flag] を有効にすると、ローカルで有効にできます。

アプリのすべての訪問者に対して有効にするための オリジン トライアルが実施されており、Chrome 145(2026 年 4 月 21 日)に終了する予定です。トライアルに参加するには、オリジン トライアルを使ってみるをご覧ください。

Dawn の最新情報

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

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

これは主なハイライトの一部にすぎません。コミットの完全なリストをご覧ください。

WebGPU の新機能

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

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