今回の WebGPU 機能の数は少ないように感じるかもしれませんが、まもなく大きな進歩が期待できます。今後のリリースでは、シェーダーのコンパイル速度の向上や、WGPUFuture を使用した実装の非同期モデルの変更などの機能が追加される予定です。
サブグループ(開発中の機能)
サブグループ機能を使用すると、SIMD レベルの並列処理が可能になり、グループ内のスレッドが通信して集約的な数学演算(16 個の数字の合計の計算など)を実行できます。これにより、非常に効率的なスレッド間データ共有が可能になります。
サブグループ オペレーションは最新の GPU API でサポートされていますが、命名と実装の詳細は異なります。Chrome チームは共通点を特定し、この機能の標準化に取り組んでいます。ご不明な点がございましたら、提案とコメントをご覧ください。
chrome://flags/#enable-experimental-web-platform-features
の「試験運用版のウェブ プラットフォーム機能」フラグには、サブグループの最小限の実装が標準化されていない状態で含まれています。WebGPU のコンテキストでは実環境でのメリットがまだ実証されていないため、デベロッパーが試してフィードバックを共有できるようにしています。
GPUAdapter
で "chromium-experimental-subgroups"
機能を利用できる場合は、この機能を含む GPUDevice
をリクエストして WGSL で試験運用版のサブグループをサポートし、minSubgroupSize
と maxSubgroupSize
の上限を確認します。
また、WGSL コードで enable chromium_experimental_subgroups
を使用して、この拡張機能を明示的に有効にする必要があります。有効にすると、次の追加機能が利用できるようになります。
subgroup_invocation_id
: サブグループ内のスレッドのインデックスの組み込み値。subgroup_size
: サブグループ サイズ アクセス用の組み込み値。subgroupBallot(value):
は、subgroup_invocation_id
に対応するビットが、そのアクティブな呼び出しでvalue
が true の場合に 1、そうでない場合は 0 であるビットフィールドのセットを返します。subgroupBroadcast(value, id)
:id
に一致するsubgroup_invocation_id
を持つ呼び出しから、サブグループ内のすべての呼び出しにvalue
をブロードキャストします。注:id
はコンパイル時の定数でなければなりません。
次のコード スニペットは、サブグループの可能性を探求するためのベースとなります。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_subgroups;
@compute @workgroup_size(64) fn main(
@builtin(global_invocation_id) global_id : vec3u,
@builtin(subgroup_size) sg_size : u32,
@builtin(subgroup_invocation_id) sg_id : u32) {
// TODO: Use subgroupBallot() and subgroupBroadcast().
}`,
});
3D テクスチャのスライスにレンダリングする
GPURenderPassColorAttachment
の新しい depthSlice
メンバーにより、レンダリング パス内の 3D テクスチャのスライスに直接レンダリングできるようになりました。これにより、一般的な 2D テクスチャ レンダリングを超える機能を拡張できます。この機能により、3D テクスチャ ボリュームに直接レンダリングして、ボクセルベースのシーンやエフェクトを作成できます。問題 dawn:1020 を参照してください。
Dawn の更新
コミットの一覧(すべて網羅)をご覧ください。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げられたすべての内容のリスト。
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 の最新情報