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 など、他のデバイスのサポートを検討しています。

多くのウェブアプリでは、featureLevel: "compatibility" を呼び出すときに requestAdapter() を渡すことで、互換モードを有効にできます。デバイスが 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 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