Wat is er nieuw in WebGPU (Chrome 136)

François Beaufort
François Beaufort

Gepubliceerd: 23 april 2025

GPUAdapterInfo isFallbackAdapter-attribuut

Het booleaanse attribuut ` isFallbackAdapter van `GPUAdapterInfo` geeft aan of een GPUAdapter aanzienlijke prestatiebeperkingen heeft ten koste van bredere compatibiliteit, voorspelbaarder gedrag of verbeterde privacy. Deze toevoeging was noodzakelijk omdat bibliotheken die gebruikmaken van door de gebruiker aangeleverde `GPUDevice`-objecten deze informatie niet konden verkrijgen via het adapterInfo attribuut 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 biedt voor fallback-adapters, is isFallbackAdapter momenteel altijd onwaar op de apparaten van gebruikers. We onderzoeken of het attribuut isFallbackAdapter van GPUAdapter kan worden afgeschaft en verwijderd. Zie de intentieverklaring voor de implementatie .

Verbeteringen in de compilatietijd van shaders in D3D12

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

Een stroomdiagram toont het proces van het converteren van WGSL-shadercode naar GPU-instructies op laag niveau.
Het aanmaken van een renderpipeline in Windows.

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

Canvasafbeeldingen opslaan en kopiëren

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

De
De gebruiker heeft het contextmenu "Afbeelding opslaan als…" geselecteerd.

Compatibiliteitsmodusbeperkingen opheffen

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

Door een GPUAdapter aan te vragen met de optie featureLevel: "compatibility" wordt de browser geadviseerd de experimentele WebGPU-compatibiliteitsmodus te selecteren. Indien succesvol, is de resulterende adapter "compatibility-defaulting". Anders is deze "core-defaulting", wat hetzelfde is als het gebruik van de optie featureLevel: "core" . Bovendien zorgt het aanroepen requestDevice() zonder requiredFeatures en requiredLimits ervoor dat een GPUDevice wordt aangevraagd met de standaardmogelijkheden van de GPUAdapter.

Core-standaardadapters ondersteunen altijd de functie "core-features-and-limits" en deze is automatisch ingeschakeld op GPUDevices die ervan worden gemaakt. Voor compatibiliteitsadapters kan de functie "core-features-and-limits" worden ondersteund en kan deze worden aangevraagd op GPUDevices die ervan worden gemaakt. Beide typen adapters kunnen ook functies zoals "float32-blendable" ondersteunen, wat optioneel is in zowel de core- als de compatibiliteitsmodus.

Het volgende voorbeeld betreft een toepassing die "float32-blendable" vereist en het gebruik van kernfunctionaliteiten ondersteunt indien beschikbaar, maar alleen compatibiliteitsfunctionaliteiten gebruikt als kernfunctionaliteiten 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 attributen GPUAdapter featureLevel en isCompatibilityMode zijn verwijderd en vervangen door de feature "core-features-and-limits" . Zie issue 395855516 .

Dawn-updates

De callback-status- enum InstanceDropped is hernoemd naar CallbackCancelled om te verduidelijken dat de callback is geannuleerd, maar dat achtergrondprocessen die aan de gebeurtenis zijn gekoppeld, zoals pipeline-compilatie, mogelijk nog steeds actief zijn. De nieuwe naam is algemener toepasbaar, voor het geval er later een ander annuleringsmechanisme wordt toegevoegd. Zie issue 520 .

De enum wgpu::PopErrorScopeStatus::EmptyStack , die aangeeft dat de foutscope-stack niet kon worden leeggehaald, is hernoemd naar wgpu::PopErrorScopeStatus::Error (wat ook een meer algemene toepasbaarheid heeft). De callback bevat nu ook een bijbehorende foutmelding om het debuggen te vergemakkelijken. Zie issue 369 .

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