Wat is er nieuw in WebGPU (Chrome 127)

François Beaufort
François Beaufort

Experimentele ondersteuning voor OpenGL ES op Android

U kunt nu toegang krijgen tot een GPUAdapter vanuit de OpenGL ES-backend wanneer u de experimentele WebGPU-compatibiliteitsmodus in Chrome voor Android aanvraagt. 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 });
Op de WebGPU-rapportpagina wordt GPUAdapter-info van de OpenGL ES-backend op het Android-apparaat weergegeven.
OpenGL ES-adapterinformatie in wegbureport.org

Omdat deze functie zich nog in een experimenteel stadium 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-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 boven Vulkan te verkiezen en start Chrome opnieuw op.

GPUAdapter info-kenmerk

Het verkrijgen van identificerende informatie over een adapter kan nu synchroon worden gedaan met het info -kenmerk van de GPUAdapter. 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 overgang 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 WebAssembly-interoperabiliteit

Om WebAssembly-heaps rechtstreeks aan WebGPU door te geven, zijn de groottes van de volgende BufferSource-argumenten niet langer beperkt tot 2 GB: dynamicOffsetsData in setBindGroup() , data in writeBuffer() en data Pin writeTexture() . Zie probleem 339049388 .

Verbeterde commando-encoderfouten

Sommige validatiefouten die door commando-encoders worden gegenereerd, beschikken nu over verbeterde contextuele informatie. Zo resulteerde een poging om een ​​rekenpass te starten terwijl er nog een renderpass openstond, 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 webgpu.h C API maakt geen gebruik meer van wgpuSurfaceGetPreferredFormat() , het C-equivalent van Dawn's wgpu::Surface::GetPreferredFormat() . Gebruik in plaats daarvan wgpu::Surface::GetCapabilities() om de lijst met ondersteunde formaten op te vragen en gebruik vervolgens formats[0] om het gewenste textuurformaat voor dit oppervlak te verkrijgen. In de tussentijd genereert het aanroepen van wgpu::Surface::GetPreferredFormat() een waarschuwing over veroudering. Zie probleem 290 .

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

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