Wat is er nieuw in WebGPU (Chrome 127)

François Beaufort
François Beaufort

Experimentele ondersteuning voor OpenGL ES op Android

Je kunt nu een GPUAdapter gebruiken vanuit de OpenGL ES-backend wanneer je de experimentele WebGPU-compatibiliteitsmodus aanvraagt ​​in Chrome voor Android. Dit is vooral handig voor Android-apparaten die geen ondersteuning bieden voor Vulkan 1.1 of hoger. Zie het volgende voorbeeld en issue dawn:1545 .

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
De WebGPU-rapportpagina toont GPUAdapter-informatie van de OpenGL ES-backend op het Android-apparaat.
Informatie over de OpenGL ES-adapter is te vinden op webgpureport.org.

Aangezien deze functie zich nog in een experimentele fase bevindt, moet u de volgende stappen uitvoeren:

  1. Schakel de volgende Chrome-vlaggen in: "Ondersteuning voor onveilige WebGPU", "WebGPU-ontwikkelaarsfuncties" en "Opdrachtregel inschakelen op niet-geroote apparaten".
  2. Schakel USB-debugging in op uw Android-apparaat.
  3. Verbind je Android-apparaat met je werkstation, voer adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' om de OpenGL ES-backend boven Vulkan te verkiezen en herstart Chrome.

GPUAdapter-info-attribuut

Identificerende informatie over een adapter kan nu synchroon worden verkregen met het GPUAdapter info attribuut. Voorheen was het aanroepen van de asynchrone GPUAdapter-methode requestAdapterInfo() de enige manier om adapterinformatie te verkrijgen. requestAdapterInfo() is echter verwijderd uit de WebGPU-specificatie en zal later dit jaar ook uit Chrome worden verwijderd om webontwikkelaars voldoende tijd te geven voor de noodzakelijke overgang. Zie het volgende voorbeeld, Chrome Status en issue 335383516 .

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

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Verbeteringen in de interoperabiliteit met WebAssembly

Om ervoor te zorgen dat WebAssembly-heaps direct aan WebGPU worden doorgegeven, zijn de groottes van de volgende BufferSource-argumenten niet langer beperkt tot 2 GB: dynamicOffsetsData in setBindGroup() , source data in writeBuffer() en source data Pin writeTexture() . Zie issue 339049388 .

Verbeterde fouten in de commando-encoder

Sommige validatiefouten die door commando-encoders worden gegenereerd, bevatten nu verbeterde contextuele informatie. Als je bijvoorbeeld probeert een compute pass te starten terwijl een render pass nog open is, resulteert dit in de volgende fout.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Dit beschrijft wel de reden voor de fout, maar geeft niet aan welke aanroep de validatiefout daadwerkelijk heeft veroorzaakt. De volgende foutmelding toont de verbeterde berichtgeving, inclusief de opdracht die de fout heeft veroorzaakt. Zie wijziging 192245 .

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Dawn-updates

De C-API van webgpu.h biedt niet langer de functie wgpuSurfaceGetPreferredFormat() aan, het C-equivalent van Dawn's wgpu::Surface::GetPreferredFormat() . Gebruik in plaats daarvan wgpu::Surface::GetCapabilities() om de lijst met ondersteunde formaten op te halen en gebruik vervolgens formats[0] om het voorkeursformaat voor de textuur van dit oppervlak te verkrijgen. Het aanroepen van wgpu::Surface::GetPreferredFormat() geeft een waarschuwing dat de functie verouderd is. Zie issue 290 .

De ondersteunde textuurgebruiken van een oppervlak zijn nu beschikbaar via wgpu::SurfaceCapabilities::usages bij het aanroepen van wgpu::Surface::GetCapabilities() . Naar verwachting bevatten ze altijd wgpu::TextureUsage::RenderAttachment . Zie issue 301 .

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