WebCodecs の統合
WebGPU は、HTMLVideoElement
から importExternalTexture()
まで、不透明な「外部テクスチャ」オブジェクトを作成する API を公開しています。これらのオブジェクトを使用すると、動画フレームを効率的にサンプリングできます。場合によっては、ソースの YUV カラーモデル データから直接 0 コピーの方法でサンプリングできます。
しかし、最初の 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
で拒否される Promise を返すのではなく、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()
を呼び出すとエラーが発生します。Issue dawn:1345 をご覧ください。
createSampler()
でテクスチャをサンプリングするときに使用されるデフォルトの最大詳細レベル(lodMaxClamp
)は 32 です。詳しくは、chromium:4608063 の変更をご覧ください。
デベロッパー エクスペリエンスの向上
サポートされていないプラットフォームで WebGPU を使用しているデベロッパーには、DevTools の JavaScript コンソールにメッセージが表示されます。詳しくは、chromium:4589369 を変更するをご覧ください。
getMappedRange()
が失敗すると、デベロッパーがキューにコマンドを送信しなくても、バッファ検証エラー メッセージが DevTools JavaScript コンソールに即座に表示されます。詳しくは、chromium:4597950 を変更するをご覧ください。
夜明けの更新情報
disallow_unsafe_apis
デバッグ切り替え名が allow_unsafe_apis
に変更され、デフォルトが無効になりました。この切り替えボタンにより、まだ安全とみなされていない API エントリ ポイントまたはパラメータの組み合わせの検証エラーが抑制されます。これはデバッグに役立ちます。issue dawn:1685 をご覧ください。
サポートが終了した source
属性 wgpu::ShaderModuleWGSLDescriptor
が削除され、code
に置き換えられました。change dawn:130321 をご覧ください。
欠落していた wgpu::RenderBundle::SetLabel()
メソッドが実装されました。change dawn:134502 をご覧ください。
アプリケーションは、wgpu::RequestAdapterOptionsBackendType
オプションを使用してアダプタを取得するときに、特定のバックエンドをリクエストできます。下記の例と issue 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
をコピーで使用できます。下記の例と issue dawn:1551 をご覧ください。
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
ここでは、重要なハイライトの一部についてのみ説明します。commit の完全なリストを確認する。
WebGPU の新機能
WebGPU の新機能シリーズで取り上げたすべての内容のリストです。
Chrome 125
Chrome 124
Chrome 123
- WGSL での DP4a 組み込み関数のサポート
- WGSL の無制限のポインタ パラメータ
- WGSL で複合体を逆参照するためのシンタックス シュガー
- ステンシルと奥行きの側面の読み取り専用状態を分離
- 夜明けの更新情報
Chrome 122
Chrome 121
- Android で WebGPU をサポートする
- Windows でのシェーダー コンパイルに FXC ではなく DXC を使用する
- コンピューティング パスとレンダリング パスのタイムスタンプ クエリ
- シェーダー モジュールへのデフォルトのエントリ ポイント
- GPUExternalTexture 色空間として display-p3 をサポート
- メモリヒープ情報
- 夜明けの更新情報
Chrome 120
Chrome 119
Chrome 118
copyExternalImageToTexture()
での HTMLImageElement と ImageData のサポート- 読み取り / 書き込みと読み取り専用のストレージ テクスチャの試験運用版のサポート
- 夜明けの更新情報
Chrome 117
- 頂点バッファの設定解除
- バインド グループの設定を解除
- デバイスを紛失した場合に非同期パイプライン作成によるエラーをミュート
- SPIR-V シェーダー モジュール作成の更新
- デベロッパー エクスペリエンスの向上
- 自動生成されたレイアウトを使用したキャッシュ パイプラインのキャッシュ
- 夜明けの更新情報
Chrome 116
- WebCodecs の統合
- GPUAdapter
requestDevice()
から返却された紛失のデバイス importExternalTexture()
が呼び出された場合に動画のスムーズな再生を維持する- 仕様の遵守
- デベロッパー エクスペリエンスの向上
- 夜明けの更新情報
Chrome 115
- サポートされている WGSL 言語拡張機能
- Direct3D 11 の試験運用版のサポート
- AC 電源でデフォルトでディスクリート GPU を使用
- デベロッパー エクスペリエンスの向上
- 夜明けの更新情報