Wat is er nieuw in WebGPU (Chrome 116)

François Beaufort
François Beaufort

WebCodecs-integratie

WebGPU stelt een API ter beschikking om ondoorzichtige "externe textuur"-objecten van HTMLVideoElement te maken via importExternalTexture() . U kunt deze objecten gebruiken om de videoframes efficiënt te bemonsteren, mogelijk zonder kopieën, rechtstreeks vanuit de bron -YUV- kleurmodelgegevens.

De initiële WebGPU-specificatie stond het maken van GPUExternalTexture objecten uit WebCodecs VideoFrame objecten echter niet toe. Deze mogelijkheid is belangrijk voor geavanceerde videoverwerkingsapps die al WebCodecs gebruiken en WebGPU willen integreren in de videoverwerkingspijplijn. WebCodecs-integratie voegt ondersteuning toe voor het gebruik van een VideoFrame als bron voor een GPUExternalTexture en een copyExternalImageToTexture() -aanroep. Zie het volgende voorbeeld en het chromestatus-item .

// 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.

Bekijk het experimentele voorbeeld Video Uploaden met WebCodecs om ermee te spelen.

Verloren apparaat geretourneerd door GPUAdapter requestDevice()

Als de requestDevice() -methode op GPUAdapter mislukt omdat deze al is gebruikt om een GPUDevice te maken, wordt deze nu uitgevoerd met een GPUDevice die onmiddellijk als verloren is gemarkeerd, in plaats van een belofte terug te geven die wordt afgewezen met null . Zie uitgave chroom: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;

Houd het afspelen van video soepel als importExternalTexture() wordt aangeroepen

Wanneer importExternalTexture() wordt aangeroepen met een HTMLVideoElement , wordt het afspelen van de bijbehorende video niet meer beperkt wanneer de video niet zichtbaar is in de viewport. Zie uitgave chroom:1425252 .

Spec-conformiteit

Het message in de GPUPipelineError() constructor is optioneel. Zie wijziging chroom:4613967 .

Er wordt een fout gegenereerd bij het aanroepen van createShaderModule() als de WGSL- code bevat \0 . Zie uitgave Dawn:1345 .

Het standaard maximale detailniveau ( lodMaxClamp ) dat wordt gebruikt bij het bemonsteren van een textuur met createSampler() is 32. Zie wijziging chroom:4608063 .

Verbetering van de ontwikkelaarservaring

Er wordt een bericht weergegeven in de DevTools JavaScript-console om ontwikkelaars eraan te herinneren wanneer ze WebGPU gebruiken op een niet-ondersteund platform. Zie wijziging chroom:4589369 .

Buffervalidatiefoutmeldingen worden onmiddellijk weergegeven in de DevTools JavaScript-console wanneer getMappedRange() mislukt, zonder ontwikkelaars te dwingen opdrachten naar de wachtrij te sturen. Zie wijziging chroom:4597950 .

Schermafbeelding van de DevTools JavaScript-console met foutmelding over buffervalidatie.
Buffervalidatiefoutbericht in de DevTools JavaScript-console.

Dawn-updates

De foutopsporingsschakelaar disallow_unsafe_apis is hernoemd naar allow_unsafe_apis en is standaard uitgeschakeld. Deze schakelaar onderdrukt validatiefouten op API-ingangspunten of parametercombinaties die nog niet als veilig worden beschouwd. Het kan nuttig zijn bij het debuggen . Zie uitgave Dawn:1685 .

Het verouderde source wgpu::ShaderModuleWGSLDescriptor is verwijderd ten gunste van code . Zie wijziging dageraad:130321 .

De ontbrekende methode wgpu::RenderBundle::SetLabel() is geïmplementeerd. Zie wijziging dageraad:134502 .

Toepassingen kunnen een bepaalde backend aanvragen wanneer ze een adapter verkrijgen met de optie wgpu::RequestAdapterOptionsBackendType . Zie hieronder een voorbeeld en geef Dawn:1875 uit .

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

Er is een nieuwe SwapChain::GetCurrentTexture() methode toegevoegd met extra toepassingen voor swapchain-texturen, zodat de geretourneerde wgpu::Texture in kopieën kan worden gebruikt. Zie een voorbeeld hieronder en geef dageraad:1551 op .

wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.

Chroom 131

Chroom 130

Chroom 129

Chroom 128

Chroom 127

Chroom 126

Chroom 125

Chroom 124

Chroom 123

Chroom 122

Chroom 121

Chroom 120

Chroom 119

Chroom 118

Chroom 117

Chroom 116

Chroom 115

Chroom 114

Chroom 113