公開日: 2025 年 1 月 8 日
テクスチャ ビューの使用
現在、GPU テクスチャビューは、ソース GPU テクスチャからすべての使用フラグを継承します。一部のビュー形式は特定の用途に対応していないため、問題になる可能性があります。この問題に対処するには、オプションの usage
メンバーを指定して createView()
を呼び出すと、選択したビュー形式と互換性のあるソース テクスチャの使用フラグのサブセットを明示的に指定できます。
この変更により、事前検証が可能になり、ビューの使用方法をよりきめ細かく制御できるようになります。また、使用フラグがビューの作成で一般的なパラメータである他のグラフィックス API と整合し、最適化の機会を提供します。
以下のスニペット、chromestatus のエントリ、問題 363903526 をご覧ください。
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
32 ビット浮動小数点テクスチャのブレンド
32 ビットの浮動小数点テクスチャは、HDR レンダリングで広範な色値を保持し、色のバンディング アーティファクトを防ぐために不可欠です。たとえば、科学的な可視化で使用します。
新しい "float32-blendable"
GPU 機能により、"r32float"
、"rg32float"
、"rgba32float"
の形式の GPU テクスチャをブレンドできるようになりました。この機能を使用して GPU デバイスをリクエストするときに、float32 形式のアタッチメントでブレンドを使用するレンダリング パイプラインを作成できるようになりました。
次のスニペット、chromestatus のエントリ、問題 369649348 をご覧ください。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
GPUDevice adapterInfo
属性
ユーザー提供の GPUDevice
オブジェクトを使用するライブラリは、GPU アーキテクチャに基づいて回避策を最適化または実装する必要がある可能性があるため、物理 GPU に関する情報にアクセスすることが重要です。この情報には GPUAdapter
オブジェクトからアクセスできますが、GPUDevice
から直接取得する方法はありません。ユーザーが GPUDevice
とともに追加情報を提供しなければならない可能性があるため、これは不便です。
この問題に対処するため、GPUAdapterInfo
が GPUDevice
adapterInfo
属性を介して公開されるようになりました。これらは、既存の GPUAdapter
info
属性に似ています。
次のスニペット、chromestatus のエントリ、問題 376600838 をご覧ください。
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
無効な形式でキャンバス コンテキストを構成すると JavaScript エラーがスローされる
以前は、GPU キャンバス コンテキストの configure()
メソッドで無効なテクスチャ形式を使用すると、GPU 検証エラーが発生していました。これは、JavaScript TypeError
をスローするように変更されました。これにより、GPU キャンバス コンテキストが正しく構成されていないにもかかわらず、getCurrentTexture()
が有効な GPU テクスチャを返すシナリオを防ぐことができます。詳しくは、問題 372837859 をご覧ください。
テクスチャでのフィルタリング サンプラーの制限
以前は、"sint"
、"uint"
、depth"
形式のテクスチャをフィルタリング サンプルで使用できました。フィルタリング サンプラーで "sint"
形式または "uint"
形式のテクスチャを使用することを正しく禁止するようになりました。なお、現在は「depth"
テクスチャとフィルタリング サンプラー」を使用すると警告が表示されますが、これは今後禁止される予定です。問題 376497143 をご覧ください。
これらの制限により、フィルタリングなしのサンプラーで深度テクスチャを使用するには、バインディング グループ レイアウトを手動で作成する必要があります。これは、「自動」生成されたバインディング グループ レイアウトがまだこの組み合わせをサポートしていないためです。仕様の問題 4952 には、この制限事項に対処するための提案が記載されています。
サブグループの拡張テスト
サブグループのテストは、当初 Chrome 131 で終了する予定でしたが、Chrome 133 まで延長され、2025 年 4 月 16 日に終了します。最初のオリジン トライアルではパフォーマンスに重点を置きましたが、重要なポータビリティ保護対策が欠落していました。これらの安全保護対策が追加され、既存のコードでエラーが発生する可能性があります。
デベロッパー エクスペリエンスの向上
Windows で requestAdapter()
で powerPreference
オプションを使用すると、DevTools に警告が表示されるようになりました。この警告は、Chrome が 2 つの異なる GPU を使用して結果を合成する方法を認識すると削除されます。問題 369219127 をご覧ください。
サイズが大きすぎる GPU バッファを作成すると、エラー メッセージに GPU バッファのサイズが表示されるようになりました。問題 374167798 をご覧ください。
16 ビットの正規化テクスチャ形式の試験運用版サポート
16 ビットの正規化された符号付きテクスチャ形式と正規化されていない符号付きテクスチャ形式が、標準化の議論の対象となっている "chromium-experimental-snorm16-texture-formats"
GPU 機能と "chromium-experimental-unorm16-texture-formats"
GPU 機能で、それぞれ試験運用版として利用できるようになりました。
これらの機能により、COPY_SRC
、COPY_DST
、TEXTURE_BINDING
、RENDER_ATTACHMENT
の使用、マルチサンプリング、解決機能による 16 ビットの正規化テクスチャ形式がサポートされます。その他の形式は、"r16unorm"
、"rg16unorm"
、"rgba16unorm"
、"r16snorm"
、"rg16snorm"
、"rgba16snorm"
です。
これらの試験運用版の機能が標準化されるまで、chrome://flags/#enable-unsafe-webgpu
で「Unsafe WebGPU Support」フラグを有効にして、Chrome でこれらの機能を利用できるようにします。
以下のスニペットと 問題 374790898 をご覧ください。
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
Dawn の更新
wgpu::Adapter
と wgpu::Device
の EnumerateFeatures(FeatureName * features)
メソッドのサポートを終了し、GetFeatures(SupportedFeatures * features)
の使用に置き換えました。問題 368672123 を参照。
webgpu.h C API では、すべての char const *
が UTF-8 エンコード文字列へのビューを定義する WGPUStringView
構造に変更されました。これは、長さと組み合わせて文字列のデータへのポインタとして機能します。これにより、文字列をコピーしなくても、文字列の一部を操作できます。問題 42241188 をご覧ください。
以下に、主なハイライトをいくつかご紹介します。コミットの一覧(すべて網羅)をご覧ください。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げられたすべての内容のリスト。
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 の最新情報