今回の 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 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 をサポート
- メモリヒープ情報
- 夜明けの最新情報
Chrome 120
Chrome 119
- フィルタ可能な 32 ビット浮動小数点テクスチャ
- unorm10-10-10-2 頂点形式
- rgb10a2uint テクスチャ形式
- Dawn の最新情報
Chrome 118
copyExternalImageToTexture()
での HTMLImageElement と ImageData のサポート- 読み取り / 書き込みストレージ テクスチャと読み取り専用ストレージ テクスチャの試験運用版サポート
- 夜明けの最新情報
Chrome 117
- 頂点バッファを設定解除する
- バインド グループを設定解除する
- デバイスが失われた場合の非同期パイプライン作成のエラーをミュートする
- SPIR-V シェーダー モジュールの作成の更新
- デベロッパー エクスペリエンスの向上
- 自動生成されたレイアウトを使用したパイプラインのキャッシュ
- 夜明けの最新情報
Chrome 116
- WebCodecs の統合
- GPUAdapter
requestDevice()
によって返された紛失したデバイス importExternalTexture()
が呼び出された場合に動画の再生をスムーズに維持する- 仕様への準拠
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報
Chrome 115
- サポートされている WGSL 言語拡張機能
- Direct3D 11 の試験運用版サポート
- AC 電源でデフォルトでディスクリート GPU を取得
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報