サブグループのテスト
サブグループ機能により、SIMD レベルの並列処理が可能になり、グループ内のスレッドが通信して集団演算(16 個の数値の合計の計算など)を実行できます。これにより、スレッド間のデータ共有を非常に効率的に行うことができます。
サブグループ提案の最小限の実装は、chrome://flags/#enable-unsafe-webgpu の [Unsafe WebGPU Support] フラグの背後でローカル テストに使用できます。
オリジン トライアルに登録すると、実際のユーザーでサイトのサブグループを試すこともできます。オリジン トライアルを使用するようにサイトを準備する手順については、オリジン トライアルを使ってみるをご覧ください。オリジン トライアルは Chrome 128 ~ 131(2025 年 2 月 19 日に終了)で実施されます。テストの目的をご覧ください。
GPUAdapter で "subgroups" 機能が利用可能な場合は、この機能を使用して GPUDevice をリクエストし、WGSL でサブグループのサポートを取得して、minSubgroupSize と maxSubgroupSize の上限を確認します。
また、WGSL コードで enable subgroups; を使用して、この拡張機能を明示的に有効にする必要があります。有効にすると、次の追加機能にアクセスできます。
subgroup_invocation_id: サブグループ内のスレッドのインデックスの組み込み値。subgroup_size: サブグループ サイズ アクセスの組み込み値。subgroupBallot(value):subgroup_invocation_idに対応するビットが、アクティブな呼び出しでvalueが true の場合は 1、それ以外の場合は 0 であるビットフィールドのセットを返します。subgroupBroadcast(value, id):subgroup_invocation_idがidと一致する呼び出しから、サブグループ内のすべての呼び出しにvalueをブロードキャストします。注:idはコンパイル時の定数でなければなりません。
subgroupAdd、subgroupAll、subgroupElect、subgroupShuffle などの組み込み関数は、今後追加される予定です。issue 354738715 をご覧ください。
サブグループ オペレーションで f16 を許可するには、GPUDevice を "subgroups"、"subgroups-f16"、"shader-f16" の各機能を使用してリクエストし、WGSL コードで enable f16, subgroups, subgroups_f16; を使用して有効にします。
次のコード スニペットは、サブグループの可能性を試して見つけるためのベースを提供します。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
線と点の深度バイアス設定の非推奨
WebGPU 仕様の変更により、レンダリング パイプラインのトポロジが線または点タイプの場合に、depthBias、depthBiasSlopeScale、depthBiasClamp をゼロ以外の値に設定すると、検証エラーが発生します。デベロッパーがコードを更新するのに十分な時間を確保するため、この今後の検証に関する警告が DevTools コンソールに表示されます。また、このような状況では値が 0 に強制的に設定されます。issue 352567424 をご覧ください。
preventDefault の場合、キャプチャされていないエラーの DevTools 警告を非表示にする
DevTools コンソールで、uncapturederror のイベント リスナーが登録され、イベント リスナー コールバック内で Event preventDefault() メソッドが呼び出された場合、uncapturederror イベントの警告は表示されなくなります。この動作は、JavaScript のイベント処理と一致しています。次の例と issue 40263619 をご覧ください。
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL の補間サンプリングを最初に行うか、どちらか一方を行う
WGSL の interpolate 属性を使用すると、ユーザー定義の IO データ補間を管理できます。新しい補間サンプリング パラメータ first(デフォルト)と either を使用すると、さらに制御できます。first はプリミティブの最初の頂点の値を使用し、either は最初の頂点または最後の頂点のいずれかを使用できます。issue 340278447 をご覧ください。
Dawn の最新情報
非同期オペレーションを処理する Dawn の WGPUFuture の実装が完了しました。主なコンセプトには、機会的なイベント処理のための wgpuInstanceProcessEvents と、コールバックの場所を定義するための WGPUCallbackMode があります。WGPUFuture は有効期間が無限の 1 回限りのイベントを示し、wgpuInstanceWaitAny は今後の完了またはタイムアウトを待機します。issue 42240932 をご覧ください。
CompositeAlphaMode::Auto 値は Surface::GetCapabilities() によって報告されなくなりました。引き続き有効であり、Surface::GetCapabilities().alphaMode[0] と同等です。issue 292 をご覧ください。
OpenGL バックエンドで、Present() 呼び出しごとに y 反転 blit を使用した Surface がサポートされるようになりました。issue 344814083 をご覧ください。
Adapter::GetProperties() メソッドは非推奨となり、Adapter::GetInfo() の使用が推奨されています。
外部コントリビューターの Jaswant がすべての CMake ファイルを書き直し、更新しやすく、事前ビルドが可能になりました。CMake プロジェクトで Dawn を使用するためのクイックスタート ガイドをご覧ください。
これは主なハイライトの一部にすぎません。コミットの完全なリストをご覧ください。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げられたすべての機能のリストです。
Chrome 147 ~ 148
Chrome 146
Chrome 145
Chrome 144
- WGSL subgroup_id 拡張機能
- WGSL uniform_buffer_standard_layout 拡張機能
- Linux の WebGPU
- writeBuffer と writeTexture の高速化
- Dawn の最新情報
Chrome 143
Chrome 142
Chrome 141
Chrome 140
- デバイス リクエストでアダプターが消費される
- テクスチャ ビューが使用されている場合にテクスチャを使用するためのショートカット
- WGSL textureSampleLevel で 1D テクスチャをサポート
- bgra8unorm 読み取り専用ストレージ テクスチャの使用の非推奨
- GPUAdapter isFallbackAdapter 属性の削除
- Dawn の最新情報
Chrome 139
Chrome 138
- バインディング リソースとしてバッファを使用するためのショートカット
- 作成時にマッピングされたバッファのサイズ要件の変更
- 最近の GPU のアーキテクチャ レポート
- GPUAdapter isFallbackAdapter 属性の非推奨
- Dawn の最新情報
Chrome 137
- externalTexture バインディングにテクスチャ ビューを使用する
- オフセットとサイズを指定せずにバッファをコピーする
- アトミックへのポインタを使用する WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference 属性
- GPURequestAdapterOptions compatibilityMode 属性の削除
- Dawn の最新情報
Chrome 136
- GPUAdapterInfo isFallbackAdapter 属性
- D3D12 でのシェーダー コンパイル時間の短縮
- キャンバス画像を保存してコピーする
- 互換モードの制限の解除
- Dawn の最新情報
Chrome 135
- null バインド グループ レイアウトでパイプライン レイアウトを作成できるようにする
- ビューポートをレンダー ターゲットの境界を超えて拡張できるようにする
- Android で試験運用版の互換モードに簡単にアクセスできるようにする
- maxInterStageShaderComponents の上限を削除
- Dawn の最新情報
Chrome 134
Chrome 133
- 追加の unorm8x4-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
- での HTMLImageElement と ImageData のサポート
copyExternalImageToTexture() - 読み書きと読み取り専用のストレージ テクスチャの試験運用版のサポート
- 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 の最新情報