Nieuw in WebGPU (Chrome 116)

François Beaufort
François Beaufort

WebCodecs-integratie

WebGPU biedt een API om ondoorzichtige objecten voor externe texturen te maken van HTMLVideoElement via importExternalTexture(). Je kunt deze objecten gebruiken om efficiënt videoframes te samplen, mogelijk zonder kopieën rechtstreeks uit de brongegevens van het YUV-kleurmodel.

De oorspronkelijke WebGPU-specificatie stond het maken van GPUExternalTexture-objecten uit WebCodecs-VideoFrame-objecten niet toe. Deze mogelijkheid is belangrijk voor geavanceerde apps voor videoverwerking die al WebCodecs gebruiken en WebGPU willen integreren in de pijplijn voor videoverwerking. De WebCodecs-integratie voegt ondersteuning toe voor het gebruik van een VideoFrame als bron voor een GPUExternalTexture- en een copyExternalImageToTexture()-aanroep. Neem het volgende voorbeeld en de chromestatus-vermelding door.

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

Neem het experimentele voorbeeld Video uploaden met WebCodecs door om ermee te spelen.

Verloren apparaat geretourneerd door GPUAdapter requestDevice()

Als de methode requestDevice() op GPUAdapter mislukt omdat deze al is gebruikt om een GPUDevice te maken, wordt deze nu uitgevoerd met een GPUDevice die onmiddellijk als verloren wordt gemarkeerd, in plaats van een belofte te retourneren die wordt afgewezen met null. Ga naar 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 dat video's vloeiend worden afgespeeld als importExternalTexture() wordt aangeroepen

Als importExternalTexture() wordt aangeroepen met een HTMLVideoElement, wordt het bijbehorende afspelen van de video niet meer beperkt als de video niet zichtbaar is in het kijkvenster. Ga naar issue chromium:1425252.

Specificatieconformiteit

Het message-argument in de constructor GPUPipelineError() is optioneel. Ga naar change chromium:4613967.

Er wordt een fout geactiveerd als createShaderModule() wordt aangeroepen als de WGSL-bron code \0 bevat. Ga naar issue dawn:1345.

Het standaard maximale detailniveau (lodMaxClamp) dat wordt gebruikt als je een textuur samplert met createSampler(), is 32. Ga naar change chromium:4608063.

De ontwikkelaarservaring verbeteren

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

Foutberichten voor buffervalidatie worden meteen getoond in de JavaScript-console van DevTools als getMappedRange() mislukt zonder dat ontwikkelaars opdrachten naar de wachtrij hoeven te sturen. Ga naar change chromium:4597950.

Screenshot van de JavaScript-console van DevTools met een foutmelding over buffervalidatie.
Foutmelding voor buffervalidatie in de JavaScript-console van DevTools.

Updates voor Dawn

De naam van de schakelaar disallow_unsafe_apis voor foutopsporing is gewijzigd in allow_unsafe_apis en de standaardinstelling is uit. Met deze schakelaar worden validatiefouten onderdrukt voor API-startpunten of parametercombinaties die nog niet als beveiligd worden beschouwd. Dit kan handig zijn voor foutopsporing. Ga naar probleem dawn:1685.

Het beëindigde kenmerk source van wgpu::ShaderModuleWGSLDescriptor is verwijderd ten gunste van code. Ga naar change dawn:130321.

De ontbrekende methode wgpu::RenderBundle::SetLabel() is geïmplementeerd. Ga naar change dawn:134502.

Apps kunnen een specifieke backend aanvragen als ze een adapter krijgen met de optie wgpu::RequestAdapterOptionsBackendType. Zie het voorbeeld hieronder 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 retourwaarde wgpu::Texture kan worden gebruikt in kopieën. Zie het voorbeeld hieronder en issue dawn:1551.

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

Dit zijn maar enkele van de belangrijkste punten. Neem de uitgebreide lijst met doorvoeringen door.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

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