WebGPU の新機能(Chrome 116)

François Beaufort
François Beaufort

WebCodecs の統合

WebGPU で不透明な「外部テクスチャ」を作成する API を公開HTMLVideoElementimportExternalTexture() のオブジェクト。これらのオブジェクトを使用すると、ソースの YUV カラーモデル データから直接、ゼロコピーの方法で動画フレームを効率的にサンプリングできます。

しかし、最初の WebGPU 仕様では、WebCodecs の VideoFrame オブジェクトから GPUExternalTexture オブジェクトを作成することができませんでした。この機能は、すでに WebCodec を使用していて、動画処理パイプラインに WebGPU を統合したいと考えている高度な動画処理アプリで重要です。WebCodecs インテグレーションにより、GPUExternalTexturecopyExternalImageToTexture() 呼び出しのソースとして 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() から返されたデバイスの紛失

GPUAdapterrequestDevice() メソッドが 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() が呼び出された場合に動画の再生をスムーズにする

HTMLVideoElementimportExternalTexture() が呼び出されると、動画がビューポートに表示されない場合、関連する動画再生はスロットリングされなくなります。問題 chromium:1425252 をご覧ください。

仕様の適合性

GPUPipelineError() コンストラクタの message 引数は省略可能です。変更 chromium:4613967 をご覧ください。

WGSL ソースの code\0 が含まれている場合、createShaderModule() を呼び出すとエラーが発生します。問題 dawn:1345 をご覧ください。

createSampler() でテクスチャをサンプリングする際に使用されるデフォルトの最大詳細レベル(lodMaxClamp)は 32 です。chromium:4608063 の変更をご覧ください。

デベロッパー エクスペリエンスの向上

サポートされていないプラットフォームで WebGPU を使用すると、デベロッパーに注意を促すメッセージが DevTools JavaScript コンソールに表示されます。chrome:4589369 の変更をご覧ください。

getMappedRange() が失敗すると、デベロッパーがコマンドをキューに送信することなく、バッファ検証のエラー メッセージが DevTools JavaScript コンソールに即座に表示されます。chromium:4597950 の変更をご覧ください。

<ph type="x-smartling-placeholder">
</ph> バッファ検証のエラー メッセージが表示されている DevTools JavaScript コンソールのスクリーンショット。 <ph type="x-smartling-placeholder">
</ph> DevTools JavaScript コンソールのバッファ検証のエラー メッセージ。

夜明けの最新情報

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 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113