WebCodecs の統合
WebGPU は、HTMLVideoElement
~importExternalTexture()
の不透明な「外部テクスチャ」オブジェクトを作成する API を公開します。これらのオブジェクトを使用すると、ソースの YUV カラーモデル データから直接、コピーなしでビデオ フレームを効率的にサンプリングできます。
ただし、最初の WebGPU 仕様では、WebCodecs の VideoFrame
オブジェクトから GPUExternalTexture
オブジェクトを作成できませんでした。この機能は、すでに WebCodecs を使用しており、WebGPU を動画処理パイプラインに統合する高度な動画処理アプリにとって重要です。WebCodecs インテグレーションにより、GPUExternalTexture
と copyExternalImageToTexture()
呼び出しのソースとして VideoFrame
を使用できるようになりました。次の例と chromestatus エントリをご覧ください。
// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);
// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.
WebCodecs を使用した動画のアップロードの試験運用版のサンプルをご覧ください。
GPUAdapter requestDevice() によって返されたデバイスの紛失
GPUAdapter
の requestDevice()
メソッドが、すでに GPUDevice
の作成に使用されているために失敗した場合、null
で拒否するプロミスを返すのではなく、すぐに失われたとマークされた GPUDevice
を返すようになりました。問題 chromium:1234617 をご覧ください。
const adapter = await navigator.gpu.requestAdapter();
const device1 = await adapter.requestDevice();
// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;
importExternalTexture() が呼び出された場合に動画の再生をスムーズにする
HTMLVideoElement
で importExternalTexture()
が呼び出されると、動画がビューポートに表示されない場合、関連する動画再生はスロットリングされなくなります。問題 chromium:1425252 をご覧ください。
仕様の適合性
GPUPipelineError()
コンストラクタの message
引数は省略可能です。chromium:4613967 の変更をご覧ください。
WGSL ソース code
に \0
が含まれている場合、createShaderModule()
を呼び出すときにエラーが発生します。問題 dawn:1345 をご覧ください。
createSampler()
でテクスチャをサンプリングするときに使用されるデフォルトの最大詳細レベル(lodMaxClamp
)は 32 です。変更 chromium:4608063 をご覧ください。
デベロッパー エクスペリエンスの向上
サポートされていないプラットフォームで WebGPU を使用している場合、デベロッパーに注意を促すメッセージが DevTools JavaScript コンソールに表示されます。chromium:4589369 の変更をご覧ください。
getMappedRange()
が失敗すると、デベロッパーがキューにコマンドを送信しなくても、バッファ検証エラー メッセージが DevTools JavaScript コンソールにすぐに表示されます。chromium:4597950 の変更をご覧ください。
Dawn の更新
disallow_unsafe_apis
デバッグ切り替えボタンの名前を allow_unsafe_apis
に変更し、デフォルトで無効にしました。この切り替えボタンをオンにすると、API エントリ ポイントまたはまだ安全と見なされていないパラメータの組み合わせの検証エラーが抑制されます。これはデバッグに役立ちます。問題 dawn:1685 をご覧ください。
wgpu::ShaderModuleWGSLDescriptor
の非推奨の source
属性は削除され、code
に置き換えられました。変更 dawn:130321 をご覧ください。
不足していた wgpu::RenderBundle::SetLabel()
メソッドを実装しました。変更 dawn:134502 をご覧ください。
アプリは、wgpu::RequestAdapterOptionsBackendType
オプションを使用してアダプターを取得するときに、特定のバックエンドをリクエストできます。以下の例と 問題 dawn:1875 をご覧ください。
wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;
wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;
// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);
新しい SwapChain::GetCurrentTexture()
メソッドが追加され、スワップチェーン テクスチャの使用方法が追加されました。これにより、戻り値 wgpu::Texture
をコピーで使用できるようになりました。以下の例と 問題 dawn:1551 をご覧ください。
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
以下に、主なハイライトをいくつかご紹介します。コミットの一覧(すべて網羅)をご覧ください。
WebGPU の新機能
「WebGPU の新機能」シリーズに記載されている全内容のリスト。
Chrome 131
- WGSL で距離をクリップする
- GPUCanvasContext getConfiguration()
- ポイント プリミティブとライン プリミティブに深度バイアスを設定しないでください
- サブグループの包括的スキャンの組み込み関数
- マルチ描画の間接的なサポート
- シェーダー モジュールのコンパイル オプションの厳密な数学
- GPUAdapter requestAdapterInfo() を削除
- 夜明けの最新情報
Chrome 130
Chrome 129
Chrome 128
- サブグループのテスト
- 線と点の深度バイアスの設定を非推奨とする
- 未キャプチャ エラーの DevTools の警告を PreventDefault で非表示にする
- 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()
が呼び出された場合に動画の再生をスムーズに維持する- 仕様への準拠
- デベロッパー エクスペリエンスの向上
- 夜明けの最新情報
Chrome 115
- サポートされている WGSL 言語拡張機能
- Direct3D 11 の試験運用版サポート
- AC 電源でデフォルトで個別の GPU を取得する
- デベロッパー エクスペリエンスの向上
- Dawn の最新情報
Chrome 114
- JavaScript を最適化する
- 未構成のキャンバスで getCurrentTexture() を呼び出すと InvalidStateError がスローされる
- WGSL の更新
- Dawn の最新情報