公開日: 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
とともに追加情報を提供する必要があるため、不便になる可能性があります。
この問題に対処するため、GPUDevice
adapterInfo
属性を通じて GPUAdapterInfo
が公開されるようになりました。これらは、既存の 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"
と "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
で「安全でない WebGPU サポート」フラグを有効にして、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 140
- デバイス リクエストがアダプターを消費する
- テクスチャ ビューが使用される場合にテクスチャを使用するための短縮形
- WGSL の textureSampleLevel が 1D テクスチャをサポート
- bgra8unorm 読み取り専用ストレージ テクスチャの使用を非推奨に
- GPUAdapter の isFallbackAdapter 属性を削除
- Dawn のアップデート
Chrome 139
- BC および ASTC 圧縮形式の 3D テクスチャのサポート
- 新しい「core-features-and-limits」機能
- WebGPU 互換モードのオリジン トライアル
- Dawn のアップデート
Chrome 138
- バッファをバインディング リソースとして使用するための省略形
- 作成時にマッピングされたバッファのサイズ要件の変更
- 最近の GPU のアーキテクチャ レポート
- GPUAdapter の isFallbackAdapter 属性を非推奨に
- Dawn のアップデート
Chrome 137
- externalTexture バインディングにテクスチャ ビューを使用
- オフセットとサイズを指定せずにバッファをコピーする
- アトミックへのポインタを使用する WGSL workgroupUniformLoad
- GPUAdapterInfo の powerPreference 属性
- GPURequestAdapterOptions compatibilityMode 属性を削除
- Dawn のアップデート
Chrome 136
- GPUAdapterInfo の isFallbackAdapter 属性
- D3D12 でのシェーダー コンパイル時間の短縮
- キャンバスの画像を保存、コピーする
- Lift 互換モードの制限事項
- Dawn のアップデート
Chrome 135
- バインド グループ レイアウトが null のパイプライン レイアウトの作成を許可
- ビューポートがレンダー ターゲットの境界を越えて拡張されることを許可
- Android で試験運用版の互換モードに簡単にアクセス
- maxInterStageShaderComponents 制限を削除
- Dawn のアップデート
Chrome 134
Chrome 133
- 追加の unorm8x4-bgra および 1 コンポーネント頂点形式
- 未定義の値で不明な上限をリクエストできるようにする
- WGSL のアライメント ルールの変更
- discard による WGSL のパフォーマンス向上
- 外部テクスチャに VideoFrame の displaySize を使用
- copyExternalImageToTexture を使用してデフォルト以外の向きの画像を処理
- デベロッパー エクスペリエンスの向上
- featureLevel で互換モードを有効にする
- 試験運用サブグループ機能のクリーンアップ
- maxInterStageShaderComponents 制限を非推奨に
- Dawn のアップデート
Chrome 132
- Texture ビューの使用状況
- 32 ビット浮動小数点テクスチャのブレンド
- GPUDevice の adapterInfo 属性
- 無効な形式でキャンバス コンテキストを構成すると JavaScript エラーが発生する
- テクスチャのフィルタリング サンプラーの制限
- サブグループのテストの拡張
- デベロッパー エクスペリエンスの向上
- 16 ビットの正規化されたテクスチャ形式の試験的なサポート
- Dawn のアップデート
Chrome 131
- WGSL でのクリップ距離
- GPUCanvasContext getConfiguration()
- ポイントとラインのプリミティブに深度バイアスを設定してはならない
- サブグループの包括的なスキャン組み込み関数
- マルチドロー間接の試験運用サポート
- シェーダー モジュール コンパイル オプション strict math
- 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 のアップデート