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 互換モードに必要なすべての機能が有効になります。これにより、互換モードで GPUAdapter をリクエストできます。また、Vulkan をサポートしていないデバイスで OpenGL ES バックエンドにアクセスすることもできます。featureLevel: "compatibility"次の例と問題 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 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