WebGPU の新機能(Chrome 149 ~ 150)

François Beaufort
François Beaufort

公開日: 2026 年 6 月 17 日

即値

イミディエイト(プッシュ定数またはルート定数とも呼ばれます)を使用すると、頻繁に変更される少量のデータをシェーダーに直接渡すことができます。このプロセスでは、GPU バッファの作成とバインド グループの管理のオーバーヘッドが回避されます。

描画呼び出しごとに変化するデータ(数百のオブジェクトの一意のオブジェクト ID や 3D 変換行列など)の均一バッファ バインディングを更新すると、CPU オーバーヘッドが発生します。パス エンコーダに生値を直接挿入して、メモリへのデータの書き込みと GPU ルックアップの管理を回避します。

イミディエイトは、小さな動的変数の高速パスを提供します。大規模なデータ配列、複雑な照明構造、大規模な行列には、ユニフォーム バッファまたはストレージ バッファを使用します。

WGSL シェーダーでは、<immediate> アドレス空間を使用して、パス エンコーダに直接渡すことができる即時データを定義できます。グループをバインドせずにこのデータを提供するには、描画呼び出しの前に JavaScript で setImmediates() を呼び出します。サポートを確認するには、navigator.gpu.wgslLanguageFeatures を介して immediate_address_space WGSL 言語拡張機能を検出します。次の例と出荷の意向をご覧ください。

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

この機能の詳細については、WebGPUFundamentals Immediates をご覧ください。

Microsoft のチームの貢献に感謝します。

一時的な添付ファイルの検証を厳格化

WebGPU では、最近 TRANSIENT_ATTACHMENT GPUTextureUsage フラグが導入されました。これにより、デベロッパーは深度ステンシル バッファやマルチサンプル ターゲットなどの一時的なレンダリング アタッチメントを作成できます。これらの添付ファイルは、メイン VRAM を割り当てることなく、高速なオンチップ タイルメモリに保持されます。

最近のアップデート(#6248#6267)では、これらのメモリ効率の高いテクスチャ アタッチメントの不正使用を防ぐため、検証ルールが改良されています。

  • プラットフォームの制限により、一時的なテクスチャを作成するときに viewFormats は空の配列でなければなりません。一時的なテクスチャはレンダリング専用であるため、代替ビュー形式は必要ありません。
  • テクスチャ ビューを作成しても、使用フラグは絞り込まれません。一時的なテクスチャで createView() を呼び出す場合、ビューはその使用状況を変更できません。
  • 一時的なアタッチメントは、レンダーパス内で resolveTarget として使用できません。

Dawn のアップデート

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

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