公開日: 2025 年 1 月 29 日
追加の unorm8x4-bgra と 1 コンポーネントの頂点形式
"unorm8x4-bgra"
頂点形式と、次の 1 コンポーネント頂点形式が追加されました。"uint8"
、"sint8"
、"unorm8"
、"snorm8"
、"uint16"
、"sint16"
、"unorm16"
、"snorm16"
、"float16"
。"unorm8x4-bgra"
頂点形式を使用すると、同じシェーダーを維持しながら BGRA でエンコードされた頂点色を読み込むのが少し便利になります。また、1 コンポーネントの頂点形式では、必要なデータのみをリクエストできるため、8 ビットおよび 16 ビットのデータ型では少なくとも 2 倍の量が必要でした。chromestatus のエントリと 問題 376924407 をご覧ください。
未定義の値で不明な上限をリクエストできるようにする
WebGPU API の進化に伴う脆弱性を軽減するため、GPU デバイスをリクエストするときに、undefined
値を使用して不明な上限をリクエストできるようになりました。これは、次のアプリコードで役立ちます。たとえば、someLimit
が存在しなくなった場合、adapter.limits.someLimit
は undefined
にできます。仕様 PR 4781 をご覧ください。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
WGSL アライメント ルールの変更
すべての構造体で @align(n)
が RequiredAlignOf
を割る必要があるため、構造体メンバーに小さすぎるアライメント値を指定することはできなくなりました。この破壊的変更により、WGSL 言語の使用が簡素化され、Firefox と Safari との互換性が向上します。Tint、Naga、WebKit コンパイラ間の違いを示すサンプルコードは、仕様 PR で確認できます。
破棄による WGSL のパフォーマンスの向上
複雑なスクリーン空間反射(SSR)エフェクトのレンダリング時にパフォーマンスが大幅に低下するため、破棄ステートメントの実装では、プラットフォーム提供のセマンティクスを使用して、利用可能な場合はヘルパー呼び出しに降格します。これにより、破棄を使用するシェーダーのパフォーマンスが向上します。問題 372714384 をご覧ください。
外部テクスチャに VideoFrame displaySize を使用する
WebGPU 仕様に従って VideoFrame をインポートする際、displayWidth
と displayHeight
のディメンションは GPUExternalTexture の見かけのサイズとして使用する必要があります。しかし、表示サイズが誤って使用され、GPUExternalTexture で textureLoad()
を使用する際に問題が発生していました。この問題は解決済みです。問題 377574981 をご覧ください。
copyExternalImageToTexture を使用して、デフォルト以外の向きの画像を処理する
copyExternalImageToTexture()
GPUQueue メソッドは、画像またはキャンバスのコンテンツをテクスチャにコピーするために使用されます。デフォルト以外の向きの画像が正しく処理されるようになりました。以前は、ソースが imageOrientation
"from-image"
の ImageBitmap またはデフォルト以外の向きの画像の場合、この動作は行われませんでした。問題 384858956 をご覧ください。
デベロッパー エクスペリエンスの向上
adapter.limits
に大きな値が表示されても、GPU デバイスをリクエストする際に上限を引き上げるように明示的にリクエストする必要があることに気付かない場合があります。そうしないと、後で予期せず上限に達する可能性があります。
エラー メッセージが拡張され、requestDevice()
の呼び出し時に requiredLimits
で上限が指定されていない場合は、上限を明示的にリクエストするよう求めるヒントが表示されるようになりました。問題 42240683 をご覧ください。
次の例は、デフォルトの最大バッファサイズのデバイス上限を超えるサイズの GPU バッファを作成するときに、DevTools コンソールに記録されるエラー メッセージの改善を示しています。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
featureLevel で互換モードを有効にする
標準化された featureLevel
オプションを "compatibility"
に設定することで、試験運用版の互換モードで GPU アダプターをリクエストできるようになりました。指定できる値は、"core"
(デフォルト)と "compatibility"
の文字列のみです。次の例と 仕様 PR 4897 をご覧ください。
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
featureLevel
オプションは標準化されていない compatibilityMode
オプションに代わるもので、標準化されていない featureLevel
属性は isCompatibilityMode
属性に代わるものです。
まだ試験運用版であるため、現時点では chrome://flags/#enable-unsafe-webgpu
で「Unsafe WebGPU Support」フラグを有効にして Chrome を実行する必要があります。webgpureport.org で試してみてください。
試験運用版のサブグループ機能のクリーンアップ
非推奨の "chromium-experimental-subgroups"
と "chromium-experimental-subgroup-uniform-control-flow"
の試験運用版サブグループ機能が削除されました。問題 377868468 をご覧ください。
サブグループをテストする際には、"subgroups"
試験運用版機能のみが必要です。"subgroups-f16"
試験運用版機能は非推奨となり、まもなく削除されます。アプリケーションが "shader-f16"
機能と "subgroups"
機能の両方をリクエストする場合は、サブグループで f16 値を使用できます。問題 380244620 をご覧ください。
maxInterStageShaderComponents の上限を非推奨にする
maxInterStageShaderComponents
の上限は、次の要因が重なって非推奨になりました。
maxInterStageShaderVariables
との冗長性: この上限はすでに同様の目的を果たしており、シェーダー ステージ間で渡されるデータの量を制御しています。- わずかな差異: 2 つの上限の計算方法には若干の違いがありますが、この差異は軽微であり、
maxInterStageShaderVariables
の上限内で効果的に管理できます。 - 簡素化:
maxInterStageShaderComponents
を削除することで、シェーダー インターフェースが合理化され、デベロッパーの複雑さが軽減されます。わずかな違いがある 2 つの上限を別々に管理するのではなく、より適切な名前の包括的なmaxInterStageShaderVariables
に集中できます。
目標は Chrome 135 で完全に削除することです。サポート終了の目的と問題 364338810 をご覧ください。
Dawn の更新
wgpu::Device::GetAdapterInfo(adapterInfo)
を使用すると、wgpu::Device
から直接アダプター情報を取得できます。問題 376600838 をご覧ください。
コンピューティング ステータスを頂点状態とフラグメント状態と整合させるため、WGPUProgrammableStageDescriptor
構造体の名前を WGPUComputeState
に変更しました。問題 379059434 をご覧ください。
wgpu::VertexStepMode::VertexBufferNotUsed
列挙値が削除されました。使用されていない頂点バッファ レイアウトを {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0}
で表現できるようになりました。問題 383147017 をご覧ください。
以下に、主なハイライトをいくつかご紹介します。コミットの一覧(すべて網羅)をご覧ください。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げられたすべての内容のリスト。
Chrome 133
- unnorm8x4-bgra と 1 コンポーネントの頂点形式の追加
- 未定義の値で不明な上限をリクエストできるようにする
- WGSL アライメント ルールの変更
- 破棄による WGSL のパフォーマンスの向上
- 外部テクスチャに VideoFrame displaySize を使用する
- copyExternalImageToTexture を使用してデフォルト以外の向きの画像を処理する
- デベロッパー エクスペリエンスの向上
- featureLevel で互換モードを有効にする
- 試験運用版のサブグループ機能のクリーンアップ
- maxInterStageShaderComponents の上限を非推奨にする
- Dawn の最新情報
Chrome 132
- テクスチャ ビューの使用
- 32 ビット浮動小数点テクスチャのブレンド
- GPUDevice の adapterInfo 属性
- 無効な形式でキャンバス コンテキストを構成すると JavaScript エラーがスローされる
- テクスチャでのフィルタリング サンプラーの制限
- サブグループの拡張テスト
- デベロッパー エクスペリエンスの向上
- 16 ビットの正規化されたテクスチャ形式の試験運用版サポート
- Dawn の最新情報
Chrome 131
- WGSL で距離をクリップする
- GPUCanvasContext getConfiguration()
- ポイント プリミティブとライン プリミティブに深度バイアスを設定しないでください
- サブグループの包括的スキャンの組み込み関数
- マルチドロー間接の試験運用版サポート
- シェーダー モジュールのコンパイル オプションの厳密な数学
- GPUAdapter requestAdapterInfo() を削除
- Dawn の最新情報
Chrome 130
Chrome 129
Chrome 128
- サブグループのテスト
- 線と点の深度バイアスの設定を非推奨とする
- preventDefault の場合、キャプチャされていないエラーの DevTools 警告を非表示にする
- WGSL はまずサンプリングを補間し、次に次のいずれかを行います。
- Dawn の最新情報
Chrome 127
- Android での OpenGL ES の試験運用版サポート
- GPUAdapter info 属性
- WebAssembly 相互運用性の改善
- コマンド エンコーダのエラーを改善
- Dawn の最新情報
Chrome 126
- maxTextureArrayLayers の上限を引き上げ
- Vulkan バックエンドのバッファ アップロードの最適化
- シェーダーのコンパイル時間の改善
- 送信されるコマンド バッファは一意である必要があります
- Dawn の最新情報
Chrome 125
Chrome 124
Chrome 123
- WGSL での DP4a 組み込み関数のサポート
- WGSL でのポインタ パラメータの制限なし
- WGSL でのコンポジットの参照解除の構文糖衣
- ステンシルと深度アスペクトの読み取り専用状態を分離
- Dawn の最新情報
Chrome 122
Chrome 121
- Android で WebGPU をサポート
- Windows でシェーダーのコンパイルに FXC ではなく DXC を使用する
- コンピューティング パスとレンダリング パスのタイムスタンプ クエリ
- シェーダー モジュールのデフォルトのエントリ ポイント
- GPUExternalTexture の色空間として display-p3 をサポート
- メモリヒープ情報
- Dawn の最新情報
Chrome 120
Chrome 119
Chrome 118
copyExternalImageToTexture()
での HTMLImageElement と ImageData のサポート- 読み取り / 書き込みストレージ テクスチャと読み取り専用ストレージ テクスチャの試験運用版サポート
- Dawn の最新情報
Chrome 117
- 頂点バッファを設定解除する
- バインド グループを設定解除する
- デバイスが紛失した場合の非同期パイプラインの作成エラーを抑制
- SPIR-V シェーダー モジュールの作成に関する更新
- デベロッパー エクスペリエンスの向上
- 自動生成されたレイアウトを使用したパイプラインのキャッシュ
- Dawn の最新情報
Chrome 116
- WebCodecs の統合
- GPUAdapter
requestDevice()
によって返された紛失したデバイス importExternalTexture()
が呼び出された場合に動画の再生をスムーズに維持する- 仕様への準拠
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報
Chrome 115
- サポートされている WGSL 言語拡張機能
- Direct3D 11 の試験運用版サポート
- AC 電源でデフォルトで個別の GPU を取得する
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報
Chrome 114
- JavaScript を最適化する
- 未構成のキャンバスで getCurrentTexture() を呼び出すと InvalidStateError がスローされる
- WGSL の更新
- Dawn の最新情報