WebGPU の新機能(Chrome 142)

François Beaufort
François Beaufort

公開日: 2025 年 10 月 22 日

テクスチャ形式のサポート機能の拡張

新しい 「texture-formats-tier1」 GPU 機能により、デベロッパーは既存のコンテンツを WebGPU の下位機能に合わせて書き換えることなく、Web に移植できます。レンダー アタッチメント、ブレンド可能、マルチサンプリング機能を備えた新しいテクスチャ形式 "r16unorm""r16snorm""rg16unorm""rg16snorm""rgba16unorm""rgba16snorm" と、"read-only" または "write-only" ストレージ テクスチャ アクセスをサポートしています。また、レンダー アタッチメント、ブレンド可能、マルチサンプリング、解決機能を備えた既存のテクスチャ形式 "r8snorm""rg8snorm""rgba8snorm" も使用できます。さらに、"read-only" または "write-only" ストレージ テクスチャ アクセスを使用して、より多くのテクスチャ形式を使用できます。

新しい "texture-formats-tier2" GPU 機能により、特定の形式で "read-write" ストレージ テクスチャ アクセスが可能になります。これは、Unreal Engine をウェブに移植するなどのプロジェクトで不可欠です。デバイスの作成時に "texture-formats-tier2" を有効にすると、"texture-formats-tier1" が自動的に有効になります。

次のスニペットと chromestatus エントリをご覧ください。

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

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

インテルの皆様、ご協力ありがとうございました。

WGSL のプリミティブ インデックス

primitive_index は、フラグメント シェーダーで処理される現在のプリミティブ(点、線、三角形など)を一意に識別する組み込みの WGSL 値です。0 から始まり、プリミティブが処理されるたびに 1 ずつ増え、描画されるインスタンスごとに 0 にリセットされます。

GPUAdapter で "primitive-index" 機能が使用可能な場合は、この機能を使用して GPUDevice をリクエストし、WGSL でプリミティブ インデックスのサポートを取得します。また、enable primitive_index; を使用して WGSL コードでこの拡張機能を明示的に有効にします。有効にしたら、フラグメント シェーダーで primitive_index 組み込み整数値を使用して、プリミティブごとのデータにアクセスしたり、レンダリングされる個別の幾何学的形状ごとに異なるロジックを実行したりします。

次のコード スニペットは、2 番目のプリミティブを赤で、他のすべてのプリミティブを青でレンダリングするフラグメント シェーダーを示しています。

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

詳しくは、プリミティブ ピッキングのサンプルchromestatus エントリをご覧ください。

3D ティーポット モデルの三角形は、プリミティブ インデックス値に基づいて色分けされています。
「プリミティブ インデックス」モードのプリミティブ ピッキングのサンプル。

Dawn の最新情報

ビルドするモノリシック ライブラリのタイプを処理するために使用される DAWN_BUILD_MONOLITHIC_LIBRARY CMake 変数のデフォルト値が OFF から STATIC に変更され、デフォルトで libwebgpu* ファイルが生成されるようになりました。

Dawn で、wgpu::Surface を構成する際にデフォルトで wgpu::PresentMode::Undefined が適切に処理されるようになりました。問題 441410668 をご覧ください。

これは主なハイライトの一部にすぎません。コミットの完全なリストをご覧ください。

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