公開日: 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 で確認できます。
discard を使用した WGSL のパフォーマンス向上
複雑なスクリーン スペース反射(SSR)効果のレンダリング時にパフォーマンスが大幅に低下することが確認されたため、破棄ステートメントの実装では、利用可能な場合にヘルパー呼び出しに降格するためのプラットフォーム提供のセマンティクスを使用します。これにより、discard を使用するシェーダーのパフォーマンスが向上します。問題 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"
の文字列のみが許可されます。次の例と spec 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 140
- デバイス リクエストがアダプターを消費する
- テクスチャ ビューが使用される場合にテクスチャを使用するための短縮形
- WGSL の textureSampleLevel が 1D テクスチャをサポート
- bgra8unorm 読み取り専用ストレージ テクスチャの使用を非推奨に
- GPUAdapter の isFallbackAdapter 属性を削除
- Dawn のアップデート
Chrome 139
- BC および ASTC 圧縮形式の 3D テクスチャのサポート
- 新しい「core-features-and-limits」機能
- WebGPU 互換モードのオリジン トライアル
- Dawn のアップデート
Chrome 138
- バッファをバインディング リソースとして使用するための省略形
- 作成時にマッピングされたバッファのサイズ要件の変更
- 最近の GPU のアーキテクチャ レポート
- GPUAdapter の isFallbackAdapter 属性を非推奨に
- Dawn のアップデート
Chrome 137
- externalTexture バインディングにテクスチャ ビューを使用
- オフセットとサイズを指定せずにバッファをコピーする
- アトミックへのポインタを使用する WGSL workgroupUniformLoad
- GPUAdapterInfo の powerPreference 属性
- GPURequestAdapterOptions compatibilityMode 属性を削除
- Dawn のアップデート
Chrome 136
- GPUAdapterInfo の isFallbackAdapter 属性
- D3D12 でのシェーダー コンパイル時間の短縮
- キャンバスの画像を保存、コピーする
- Lift 互換モードの制限事項
- Dawn のアップデート
Chrome 135
- バインド グループ レイアウトが null のパイプライン レイアウトの作成を許可
- ビューポートがレンダー ターゲットの境界を越えて拡張されることを許可
- Android で試験運用版の互換モードに簡単にアクセス
- maxInterStageShaderComponents 制限を削除
- Dawn のアップデート
Chrome 134
Chrome 133
- 追加の unorm8x4-bgra および 1 コンポーネント頂点形式
- 未定義の値で不明な上限をリクエストできるようにする
- WGSL のアライメント ルールの変更
- discard による WGSL のパフォーマンス向上
- 外部テクスチャに VideoFrame の displaySize を使用
- copyExternalImageToTexture を使用してデフォルト以外の向きの画像を処理
- デベロッパー エクスペリエンスの向上
- featureLevel で互換モードを有効にする
- 試験運用サブグループ機能のクリーンアップ
- maxInterStageShaderComponents 制限を非推奨に
- Dawn のアップデート
Chrome 132
- Texture ビューの使用状況
- 32 ビット浮動小数点テクスチャのブレンド
- GPUDevice の adapterInfo 属性
- 無効な形式でキャンバス コンテキストを構成すると JavaScript エラーが発生する
- テクスチャのフィルタリング サンプラーの制限
- サブグループのテストの拡張
- デベロッパー エクスペリエンスの向上
- 16 ビットの正規化されたテクスチャ形式の試験的なサポート
- Dawn のアップデート
Chrome 131
- WGSL でのクリップ距離
- GPUCanvasContext getConfiguration()
- ポイントとラインのプリミティブに深度バイアスを設定してはならない
- サブグループの包括的なスキャン組み込み関数
- マルチドロー間接の試験運用サポート
- シェーダー モジュール コンパイル オプション strict math
- 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 のアップデート