WebGPU の新機能(Chrome 135)

François Beaufort
François Beaufort

公開日: 2025 年 3 月 26 日

null バインディング グループ レイアウトでパイプライン レイアウトの作成を許可

以前は、空のバインディング グループ レイアウトを作成するには、バインディングがゼロのバインディング グループを追加する必要があり、不便でした。パイプライン レイアウトの作成時に null バインディング グループ レイアウトが許可され、無視されるようになったため、この操作は不要になりました。これにより、開発が容易になります。

たとえば、バインド グループのレイアウト 0 と 2 のみを使用するパイプラインを作成できます。たとえば、バインディング グループ レイアウト 1 をフラグメント データに割り当て、バインディング グループ レイアウト 2 を頂点データに割り当て、フラグメント シェーダーなしでレンダリングできます。問題 377836524 をご覧ください。

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

ビューポートがレンダリング ターゲットの境界を超えて拡張できるようにする

ビューポートの検証の要件が緩和され、ビューポートがレンダリング ターゲットの境界を超えるようになりました。これは、現在のビューポートの外側に広がる可能性がある UI などの 2D 要素を描画する場合に特に便利です。問題 390162929 をご覧ください。

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

Android の試験運用版互換モードに簡単にアクセス

chrome://flags/#enable-unsafe-webgpu フラグのみを使用して、Android の試験運用版の WebGPU 互換モードに必要なすべての機能を有効にできるようになりました。これにより、featureLevel: "compatibility" オプションを使用して互換モードの GPUAdapter をリクエストし、Vulkan をサポートしていないデバイスで OpenGL ES バックエンドにアクセスすることもできます。次の例と問題 dawn:389876644 をご覧ください。

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
WebGPU レポートページに、Android デバイスで互換モードの GPUAdapter が表示されている。
互換モードのアダプタ情報: webgpureport.org

maxInterStageShaderComponents の上限を削除

以前にお知らせしたとおり、maxInterStageShaderComponents の制限は、次の要因が重なったため削除されました。

  • maxInterStageShaderVariables との冗長性: この上限はすでに同様の目的を果たしており、シェーダー ステージ間で渡されるデータの量を制御しています。
  • わずかな差異: 2 つの上限の計算方法には若干の違いがありますが、その差異は小さく、maxInterStageShaderVariables の上限内で効果的に管理できます。
  • 簡素化: maxInterStageShaderComponents を削除することで、シェーダー インターフェースが合理化され、デベロッパーの複雑さが軽減されます。わずかな違いがある 2 つの上限を別々に管理するのではなく、より適切な名前の包括的な maxInterStageShaderVariables に集中できます。

削除の意向問題 364338810 をご覧ください。

Dawn の更新

フィルタリング サンプラを使用して深度テクスチャをサンプリングすることはできなくなりました。なお、深度テクスチャは、フィルタなしのサンプラーまたは比較サンプラーでのみ使用できます。問題 379788112 をご覧ください。

WGPURequiredLimits 構造と WGPUSupportedLimits 構造が WGPULimits にフラット化されました。問題 374263404 をご覧ください。

次の構造体の名前を変更しました。問題 42240793 をご覧ください。

  • WGPUImageCopyBufferWGPUTexelCopyBufferInfo に変更
  • WGPUImageCopyTextureWGPUTexelCopyTextureInfo に変更
  • WGPUTextureDataLayoutWGPUTexelCopyBufferLayout に変更

subgroupMinSize メンバーと subgroupMaxSize メンバーが WGPUAdapterInfo 構造体に追加されました。webgpu-headers PR をご覧ください。

DAWN_TRACE_FILE_BASE 環境変数を使用してプログラムを実行すると、Metal での Dawn API の使用状況をトレースできるようになりました。これにより、後で XCode の Metal デバッガに読み込むことができる .gputrace ファイルを保存できます。Debugging Dawn のドキュメントをご覧ください。

以下に、主なハイライトをいくつかご紹介します。コミットの一覧(すべて網羅)をご覧ください。

WebGPU の新機能

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

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