WebGPU の新機能(Chrome 146)

François Beaufort
François Beaufort

公開日: 2026 年 2 月 25 日

OpenGL ES 3.1 で WebGPU 互換モードをサポート

WebGPU は Vulkan、Metal、D3D12 などの最新のグラフィック API に対応するように設計されていますが、多くのユーザーはこれらの標準をサポートしていない古いハードウェアを使用しています。このギャップを埋め、幅広いアクセシビリティを確保するために、Chrome では互換モードという新しいオプトイン機能が導入されています。

このモードでは、OpenGL ES 3.1 などの古いグラフィック API で WebGPU を実行できます。WebGPU 仕様のやや制限されたサブセットをターゲットにすることで、最新のゲーム用リグから古いノートパソコンやモバイル デバイスまで、すべてのユーザーがウェブアプリにアクセスできるようになります。Android から開始しますが、チームは OpenGL ES 3.1 を搭載した ChromeOS や Direct3D 11 を搭載した Windows など、他のデバイスのサポートも検討しています。

多くのウェブアプリでは、requestAdapter() を呼び出すときに featureLevel: "compatibility" を渡すことで、互換モードを有効にできます。デバイスが Core WebGPU をサポートしている場合、Chrome は Core 対応のアダプタを返しますが、ウェブアプリは "core-features-and-limits" 機能(または利用可能なすべての機能)を有効にしない限り、互換性の制限内に留まることを認識します。複雑なアプリケーションの場合、モードの制限内に収まるように若干の調整が必要になることがあります。

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

このモードの特定のアーキテクチャ上の制限については、WebGPU の基礎ガイドをご覧ください。また、すべての WebGPU サンプルが互換モードをサポートするようになりました。リリース予定もご覧ください。

一時的な添付ファイル

新しい TRANSIENT_ATTACHMENT GPUTextureUsage フラグを使用して、メモリ効率の高いアタッチメントを作成できます。これにより、レンダリング パス オペレーションがタイルメモリに残り、VRAM トラフィックを回避し、テクスチャの VRAM 割り当てを回避できます。

テクスチャを一時的(または「メモリレス」)として宣言すると、GPU はテクスチャのコンテンツが一時的にのみ必要であることを認識します。具体的には、現在のレンダリング パス内でのみ必要であることを認識します。また、テクスチャの内容はレンダリング パスの後に破棄されるため、ドライバはテクスチャ用に VRAM を割り当てる必要がない場合があります。

次の例は、一時的なテクスチャを作成する方法を示しています。

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

if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) {

  const transientTexture = device.createTexture({
    size: [42, 42],
    // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary,
    // potentially keeping it in fast on-chip memory.
    usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT,
    format: 'rgba8unorm',
  });
}

Hello Triangle MSAA - WebGPU サンプルリリース予定をご覧ください。

WGSL texture_and_sampler_let 拡張機能

WGSL 言語拡張機能 texture_and_sampler_let を使用すると、WGSL シェーダー内の let にテクスチャ変数またはサンプラー変数を割り当てることができます。この機能は現在、代替の命名メカニズムを提供し、テクスチャまたはサンプラを返すメソッドをローカル変数に直接保存できるバインドレス サポートの準備をしています。

次の例と出荷の意向をご覧ください。

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>;

@fragment fn main() {
    let a = tex;
    var res: vec4f = textureLoad(a, vec2i(1i), 0);

    textureStore(store, vec2i(0i), res);
}

Dawn のアップデート

次の新しい上限階層を使用できます。

  • maxStorageBuffersPerShaderStage は最大 16 個をサポートします。問題 366151398 をご覧ください。

  • maxSampledTexturesPerShaderStage は最大 48 個をサポートします。問題 475255737 をご覧ください。

Android では、追加のセキュリティ レイヤを提供し、不正な形式の入力によるドライバの不安定性を防ぐため、SPIR-V 検証がデフォルトで有効になっています。問題 473526182 をご覧ください。

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

WebGPU の新機能

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

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