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 Debugger に読み込むことができる .gputrace ファイルが保存されます。Debugging Dawn のドキュメントをご覧ください。

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

WebGPU の新機能

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

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