Wat is er nieuw in WebGPU (Chrome 136)

François Beaufort
François Beaufort

Gepubliceerd: 23 april 2025

GPUAdapterInfo isFallbackAdapter-kenmerk

Het booleaanse kenmerk GPUAdapterInfo isFallbackAdapter geeft aan of een GPUAdapter aanzienlijke prestatiebeperkingen heeft in ruil voor bredere compatibiliteit, voorspelbaarder gedrag of verbeterde privacy. Deze toevoeging was nodig omdat bibliotheken die door de gebruiker aangeleverde GPUDevice-objecten gebruiken, geen toegang hadden tot deze informatie via het kenmerk adapterInfo op GPUDevice. Zie het volgende voorbeeld en probleem 403172841 .

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Omdat Chrome nog geen ondersteuning voor fallback-adapters heeft, is isFallbackAdapter momenteel altijd false op apparaten van gebruikers. We onderzoeken of het GPUAdapter isFallbackAdapter -kenmerk kan worden verouderd en verwijderd. Zie de intentie om te leveren .

Verbeteringen in de shadercompilatietijd op D3D12

Het Chrome-team blijft Tint, de compiler voor de WebGPU-shadertaal, verbeteren door een tussenliggende representatie (IR) toe te voegen voor apparaten die WebGPU met de D3D12-backend ondersteunen. Deze IR, geplaatst tussen de abstracte syntaxisboom (AST) van Tint en de HLSL-backendwriter, zal de compiler efficiënter en beter te onderhouden maken, wat uiteindelijk zowel ontwikkelaars als gebruikers ten goede komt. Eerste tests tonen aan dat de nieuwe versie van Tint tot 10 keer sneller is bij het vertalen van Unity's WGSL-shaders naar HLSL.

Een stroomdiagram toont het proces voor het converteren van WGSL-shadercode naar low-level GPU-instructies.
Pijplijncreatie in Windows weergeven.

Deze verbeteringen – al beschikbaar op Android, ChromeOS en macOS – worden geleidelijk uitgebreid naar Windows-apparaten die WebGPU met de D3D12-backend ondersteunen. Zie probleem 42251045 .

Canvasafbeeldingen opslaan en kopiëren

Chrome-gebruikers kunnen nu met de rechtermuisknop op een WebGPU-canvas klikken en toegang krijgen tot de contextmenuopties Afbeelding opslaan als... of Afbeelding kopiëren . Zie probleem 40902474 .

De
De gebruiker heeft het contextmenu 'Afbeelding opslaan als...' geselecteerd.

Beperkingen voor de liftcompatibiliteitsmodus

De experimentele functie "core-features-and-limits" indien beschikbaar op een GPU-apparaat, heft alle beperkingen (functies en limieten) van de compatibiliteitsmodus op wanneer de vlag chrome://flags/#enable-unsafe-webgpu is ingeschakeld. Zie probleem 395855517 .

Het aanvragen van een GPUAdapter met de featureLevel: "compatibility" optie geeft de browser een hint om de experimentele WebGPU-compatibiliteitsmodus te selecteren. Als dit lukt, is de resulterende adapter "compatibility-defaulting". Anders is deze "core-defaulting", wat hetzelfde is als het gebruik van de featureLevel: "core" optie. Bovendien wordt door het aanroepen requestDevice() zonder requiredFeatures en requiredLimits een GPUDevice aangevraagd met de standaardmogelijkheden van de GPUAdapter.

Adapters met een standaard core-default ondersteunen altijd de functie "core-features-and-limits" en deze is automatisch ingeschakeld op GPUDevices die hiermee worden aangemaakt. Voor adapters met een standaard compatibiliteitsdefault kan de functie "core-features-and-limits" worden ondersteund en kan deze worden aangevraagd op GPUDevices die hiermee worden aangemaakt. Beide typen adapters ondersteunen mogelijk ook functies zoals "float32-blendable" , wat optioneel is in zowel de core- als de compatibiliteitsmodus.

Het volgende voorbeeld is voor een toepassing die "float32-blendable" vereist en die het gebruik van kernfuncties ondersteunt indien beschikbaar, maar alleen compatibiliteitsfuncties gebruikt als kernfuncties niet beschikbaar zijn.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

De experimentele GPUAdapter featureLevel en isCompatibilityMode -kenmerken zijn verwijderd ten gunste van de functie "core-features-and-limits" . Zie probleem 395855516 .

Dawn-updates

De callbackstatus- enum ' InstanceDropped is hernoemd naar CallbackCancelled om duidelijk te maken dat de callback is geannuleerd, maar dat de achtergrondverwerking die aan de gebeurtenis is gekoppeld, zoals pijplijncompilatie, mogelijk nog steeds actief is. De nieuwe naam is algemener toepasbaar, voor het geval er later een ander annuleringsmechanisme wordt toegevoegd. Zie issue 520 .

De wgpu::PopErrorScopeStatus::EmptyStack enum die aangeeft dat de stack van de foutscope niet kon worden gepopt, is hernoemd naar wgpu::PopErrorScopeStatus::Error (wat ook algemener toepasbaar is). De callback bevat nu ook een bijbehorend foutbericht ter ondersteuning van debugging. Zie probleem 369 .

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