現時点では WebGPU の機能は少なめに感じられるかもしれませんが、大きな進歩が目前に迫っています。今後のリリースには、シェーダーのコンパイル速度の改善や、WGPUFuture を使用した実装の非同期モデルの変更などの機能が含まれます。
サブグループ(開発中の機能)
サブグループ機能を使用すると、SIMD レベルの並列処理が可能になり、グループ内のスレッド間で通信や集団演算(16 個の数値の合計の計算など)を実行できます。これにより、スレッド間のデータ共有を非常に効率的に行うことができます。
サブグループ操作は最新の GPU API でサポートされていますが、名前や実装の詳細は異なります。Chrome チームは共通点を特定し、現在この機能の標準化に取り組んでいます。ご不明な点がございましたら、提案とコメントをご確認ください。
chrome://flags/#enable-experimental-web-platform-features
の「Experimental Web Platform Features」フラグの背後には、サブグループの標準化されていない実装が最小限で実装されています。WebGPU のコンテキストではまだ実際のメリットが実証されていないため、デベロッパーはこの機能を試してフィードバックを共有できます。
"chromium-experimental-subgroups"
機能が GPUAdapter
で利用できる場合は、この機能を含む GPUDevice
をリクエストして、WGSL で試験運用版のサブグループをサポートし、minSubgroupSize
と maxSubgroupSize
の上限を確認します。
また、WGSL コードで enable chromium_experimental_subgroups
を使用して、この拡張機能を明示的に有効にする必要があります。有効にすると、次の機能を利用できるようになります。
subgroup_invocation_id
: サブグループ内のスレッドのインデックスの組み込み値。subgroup_size
: サブグループ サイズ アクセスの組み込み値。subgroupBallot(value):
アクティブな呼び出しでvalue
が true の場合はsubgroup_invocation_id
に対応するビットが 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 テクスチャのスライスにレンダリングする
レンダリング パス内で 3D テクスチャのスライスに直接レンダリングできるようになり、GPURenderPassColorAttachment
の新しい depthSlice
メンバーを使用して、一般的な 2D テクスチャのレンダリングを超えて機能を拡張できるようになりました。この追加により、たとえば、3D テクスチャ ボリュームに直接レンダリングすることで、ボクセルベースのシーンやエフェクトを作成できます。issue dawn:1020 をご覧ください。
夜明けの更新情報
commit の完全なリストを確認する。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げたすべての内容のリストです。
Chrome 125
Chrome 124
Chrome 123
- WGSL での DP4a 組み込み関数のサポート
- WGSL の無制限のポインタ パラメータ
- WGSL で複合体を逆参照するためのシンタックス シュガー
- ステンシルと奥行きの側面の読み取り専用状態を分離
- 夜明けの更新情報
Chrome 122
Chrome 121
- Android で WebGPU をサポートする
- Windows でのシェーダー コンパイルに FXC ではなく DXC を使用する
- コンピューティング パスとレンダリング パスのタイムスタンプ クエリ
- シェーダー モジュールへのデフォルトのエントリ ポイント
- GPUExternalTexture 色空間として display-p3 をサポート
- メモリヒープ情報
- 夜明けの更新情報
Chrome 120
Chrome 119
Chrome 118
copyExternalImageToTexture()
での HTMLImageElement と ImageData のサポート- 読み取り / 書き込みと読み取り専用のストレージ テクスチャの試験運用版のサポート
- 夜明けの更新情報
Chrome 117
- 頂点バッファの設定解除
- バインド グループの設定を解除
- デバイスを紛失した場合に非同期パイプライン作成によるエラーをミュート
- SPIR-V シェーダー モジュール作成の更新
- デベロッパー エクスペリエンスの向上
- 自動生成されたレイアウトを使用したキャッシュ パイプラインのキャッシュ
- 夜明けの更新情報
Chrome 116
- WebCodecs の統合
- GPUAdapter
requestDevice()
から返却された紛失のデバイス importExternalTexture()
が呼び出された場合に動画のスムーズな再生を維持する- 仕様の遵守
- デベロッパー エクスペリエンスの向上
- 夜明けの更新情報
Chrome 115
- サポートされている WGSL 言語拡張機能
- Direct3D 11 の試験運用版のサポート
- AC 電源でデフォルトでディスクリート GPU を使用
- デベロッパー エクスペリエンスの向上
- 夜明けの更新情報