公開日: 2025 年 5 月 26 日
externalTexture バインディングにテクスチャビューを使用する
GPUBindGroup の作成時に、GPUExternalTexture バインディングの代わりに、互換性のある GPUTextureView(2D、単一のサブリソース)を使用できるようになりました。
これにより、GPUExternalTexture(ソース動画用)と GPUTextureView(中間処理用)の両方を処理する必要がある動画エフェクト パイプラインのシェーダー ロジックを簡素化できます。また、テクスチャの取得元に応じてシェーダーを動的にコンパイルする必要がなくなります。Intent to Ship: WebGPU: externalTexture バインディング用の GPUTextureView をご覧ください。
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
オフセットとサイズを指定しない場合のバッファのコピー
新しい GPUCommandEncoder メソッドのオーバーロードにより、copyBufferToBuffer()
を使用するときにオフセットとサイズ パラメータを省略して、バッファ全体のコピーを簡素化できます。Intent to Ship: WebGPU: copyBufferToBuffer のオーバーロードをご覧ください。
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
アトミックへのポインタを使用する WGSL workgroupUniformLoad
デベロッパーの利便性を高めるために、WGSL に新しい workgroupUniformLoad(ptr)
オーバーロードが追加されました。ptr
が指す値をアトミックに読み込み、ワークグループ内のすべての呼び出しに返します。ここで、ptr
はワークグループ変数内のアトミックへのポインタです。問題 408241039 をご覧ください。
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
GPUAdapterInfo の powerPreference 属性
ユーザーが chrome://flags/#enable-webgpu-developer-features
で「WebGPU デベロッパー機能」フラグを有効にしている場合、非標準の powerPreference
GPUAdapterInfo 文字列属性を使用できるようになりました。サポートされている場合、powerPreference
の値は、GPURequestAdapterOptions で使用された GPUPowerPreference の値に応じて、"low-power"
または "high-performance"
のいずれかになります。CL 6438860 をご覧ください。
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
GPURequestAdapterOptions の compatibilityMode 属性を削除
試験運用版の GPURequestAdapterOptions compatibilityMode
属性は削除され、Chrome 133 で追加された標準化された featureLevel
属性に置き換えられました。問題 366151404 をご覧ください。
Dawn の更新
デベロッパーは、webgpu.h を使用して WebAssembly と特定のプラットフォームの両方をターゲットにし、C++ などの言語で WebGPU プロジェクトを構築できます。Dawn の最新リリース「emdawnwebgpu」(「Emscripten Dawn WebGPU」)は、ブラウザ API で最新の標準化された webgpu.h を実装します。
Emdawnwebgpu は、Emscripten の(現在はメンテナンス対象外)組み込みバインディング(USE_WEBGPU
)の(メンテナンス対象)フォークです。新しい開発はすべて emdawnwebgpu で行われ、デベロッパーが emdawnwebgpu に移行するにつれて、Emscripten の組み込みバインディングは削除されます。Emdawnwebgpu の C ヘッダーは Dawn のヘッダーに非常に近いですが、組み込みバインディングは大幅に古くなっています。
Dawn の GitHub リリースページから emdawnwebgpu をダウンロードし、パッケージの README.md で使用方法を確認します。ソースファイルは Dawn リポジトリにあります。
詳細なガイドについては、更新された WebGPU を使用してアプリを作成するをご覧ください。
以下に、主なハイライトをいくつかご紹介します。コミットの一覧(すべて網羅)をご覧ください。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げられたすべての内容のリスト。
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
- unnorm8x4-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
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 の最新情報