Wat is er nieuw in WebGPU (Chrome 116)

François Beaufort
François Beaufort

WebCodecs-integratie

WebGPU biedt een API waarmee je ondoorzichtige "externe textuur"-objecten kunt maken van HTMLVideoElement via importExternalTexture() . Je kunt deze objecten gebruiken om de videoframes efficiënt te samplen, mogelijk zelfs zonder kopieën, rechtstreeks vanuit de bron -YUV- kleurmodelgegevens.

De oorspronkelijke WebGPU-specificatie stond echter niet toe dat GPUExternalTexture objecten werden gemaakt van WebCodecs VideoFrame objecten. Deze mogelijkheid is belangrijk voor geavanceerde videoverwerkingsapplicaties die al WebCodecs gebruiken en WebGPU in de videoverwerkingspipeline willen integreren. De 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 de vermelding in 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 experimenteren.

Verloren apparaat geretourneerd door GPUAdapter requestDevice()

Als de requestDevice() -methode op GPUAdapter mislukt omdat deze al is gebruikt om een GPUDevice te creëren, wordt er nu een GPUDevice geretourneerd die direct als verloren wordt gemarkeerd, in plaats van een promise terug te geven die wordt afgewezen met null . Zie issue 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 soepel 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 .

conformiteit met specificaties

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

Er treedt een fout op bij het aanroepen createShaderModule() als de WGSL- code \0 bevat. Zie probleem dawn:1345 .

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

Verbetering van de ontwikkelaarservaring

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

Foutmeldingen bij buffervalidatie 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 buffervalidatie.
Foutmelding voor buffervalidatie in de JavaScript-console van DevTools.

Dawn-updates

De debug-schakelaar disallow_unsafe_apis is hernoemd naar allow_unsafe_apis en is standaard uitgeschakeld. Deze schakelaar onderdrukt validatiefouten bij API-ingangspunten of parametercombinaties die nog niet als veilig worden beschouwd. Dit kan handig zijn bij het debuggen . Zie issue dawn:1685 .

Het verouderde source wgpu::ShaderModuleWGSLDescriptor is verwijderd en vervangen door code . Zie wijziging dawn:130321 .

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

Applicaties kunnen een specifieke backend aanvragen bij het verkrijgen van een adapter met de optie wgpu::RequestAdapterOptionsBackendType . Zie onderstaand voorbeeld en 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);

Er is een nieuwe SwapChain::GetCurrentTexture() -methode toegevoegd met extra gebruiksmogelijkheden voor swapchain-texturen, zodat de geretourneerde wgpu::Texture in kopieën kan worden gebruikt. Zie onderstaand voorbeeld en issue dawn:1551 .

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

Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

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