Wat is er nieuw in WebGPU (Chrome 116)

François Beaufort
François Beaufort

WebCodecs-integratie

WebGPU stelt een API beschikbaar om ondoorzichtige "externe textuur"-objecten te creëren van HTMLVideoElement via importExternalTexture() . U kunt deze objecten gebruiken om de videoframes efficiënt te bemonsteren, mogelijk op een 0-kopie manier, rechtstreeks vanuit de bron YUV- kleurmodelgegevens.

De oorspronkelijke WebGPU-specificatie stond echter niet toe om GPUExternalTexture objecten te maken vanuit WebCodecs VideoFrame objecten. Deze mogelijkheid is belangrijk voor geavanceerde videoverwerkingstoepassingen die al gebruikmaken van WebCodecs en WebGPU willen integreren in de videoverwerkingspijplijn. De integratie van WebCodecs biedt ondersteuning voor het gebruik van een VideoFrame als bron voor een GPUExternalTexture en een copyExternalImageToTexture() aanroep. Zie het volgende voorbeeld en de vermelding 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.

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 nu een GPUDevice uitgevoerd die direct als verloren wordt gemarkeerd, in plaats van een promise te retourneren die wordt afgewezen met null . Zie probleem 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;

Zorg ervoor dat de videoweergave vloeiend blijft als importExternalTexture() wordt aangeroepen

Wanneer importExternalTexture() wordt aangeroepen met een HTMLVideoElement , wordt de bijbehorende videoweergave niet langer beperkt wanneer de video niet zichtbaar is in de viewport. Zie probleem chromium:1425252 .

Specificatieconformiteit

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

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

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

Verbetering van de ontwikkelaarservaring

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

Buffervalidatiefoutmeldingen worden direct weergegeven in de JavaScript-console van DevTools wanneer getMappedRange() mislukt, zonder dat ontwikkelaars opdrachten naar de wachtrij hoeven te sturen. Zie wijziging chromium:4597950 .

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

Dawn-updates

De debug-schakelaar disallow_unsafe_apis is hernoemd naar allow_unsafe_apis en staat nu standaard op uitgeschakeld. Deze schakelaar onderdrukt validatiefouten op API-toegangspunten of parametercombinaties die nog niet als veilig worden beschouwd. Dit kan handig zijn voor foutopsporing . Zie issue dawn:1685 .

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

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

Toepassingen kunnen een specifieke backend opvragen bij het ophalen van een adapter met de optie wgpu::RequestAdapterOptionsBackendType . Zie hieronder een voorbeeld en geef dawn:1875 op .

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 hieronder een voorbeeld en geef dawn:1551 op .

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

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

Wat is er nieuw in WebGPU

Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.

Chroom 139

Chroom 138

Chroom 137

Chroom 136

Chroom 135

Chroom 134

Chroom 133

Chroom 132

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