Wat is er nieuw in WebGPU (Chrome 127)

François Beaufort
François Beaufort

Experimentele ondersteuning voor OpenGL ES op Android

U hebt nu toegang tot een GPUAdapter vanuit de OpenGL ES-backend wanneer u 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 uitgave 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 een Android-apparaat.
OpenGL ES-adapterinfo in webgpureport.org

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

  1. Schakel de volgende Chrome-vlaggen in: 'Onveilige WebGPU-ondersteuning', 'WebGPU-ontwikkelaarsfuncties' en 'Opdrachtregel inschakelen op niet-geroote apparaten'.
  2. Schakel USB-foutopsporing in op uw Android-apparaat.
  3. Sluit uw Android-apparaat aan op uw werkstation, voer adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' om de OpenGL ES-backend te verkiezen boven Vulkan, en start opnieuw op Chroom.

GPUAdapter info-kenmerk

Het verkrijgen van identificerende informatie over een adapter kan nu op een synchrone manier worden gedaan met het GPUAdapter info attribuut. Voorheen was het aanroepen van de asynchrone GPUAdapter requestAdapterInfo() -methode de enige manier om adapterinformatie te verkrijgen. requestAdapterInfo() is echter verwijderd uit de WebGPU-specificatie en zal later dit jaar in Chrome worden verwijderd om webontwikkelaars voldoende tijd te geven om de noodzakelijke overstap te maken. Zie het volgende voorbeeld, Chrome Status en probleem 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 van WebAssembly

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

Verbeterde opdracht-encoderfouten

Sommige validatiefouten die door commando-encoders worden gegenereerd, hebben nu verbeterde contextuele informatie. Een poging om bijvoorbeeld een rekenpas te starten terwijl een renderpas nog open was, resulteerde 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 oproep daadwerkelijk de validatiefout heeft veroorzaakt. De volgende fout 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 webgpu.h C API stelt niet langer wgpuSurfaceGetPreferredFormat() beschikbaar, 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 textuurformaat te verkrijgen dat de voorkeur heeft voor dit oppervlak. In de tussentijd geeft het aanroepen van wgpu::Surface::GetPreferredFormat() een beëindigingswaarschuwing af. Zie nummer 290 .

Het ondersteunde textuurgebruik van een oppervlak is nu beschikbaar via wgpu::SurfaceCapabilities::usages bij het aanroepen wgpu::Surface::GetCapabilities() . Er wordt verwacht dat ze altijd wgpu::TextureUsage::RenderAttachment bevatten. Zie nummer 301 .

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.

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