Novità di WebGPU (Chrome 127)

François Beaufort
François Beaufort

Supporto sperimentale per OpenGL ES su Android

Ora puoi accedere a un GPUAdapter dal backend OpenGL ES quando richiedi la modalità di compatibilità WebGPU sperimentale in Chrome per Android. Questa opzione è particolarmente utile per i dispositivi Android che non supportano Vulkan 1.1 o versioni successive. Vedi l'esempio seguente e issue dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
La pagina del report WebGPU mostra le informazioni di GPUAdapter dal backend OpenGL ES sul dispositivo Android.
Informazioni sull'adattatore OpenGL ES in webgpureport.org

Poiché questa funzionalità è ancora in fase sperimentale, dovrai eseguire i seguenti passaggi:

  1. Attiva i seguenti flag di Chrome: "Supporto di WebGPU non sicuro", "Funzionalità per sviluppatori WebGPU" e "Attiva riga di comando su dispositivi non rooted".
  2. Attiva il debug USB sul tuo dispositivo Android.
  3. Collega il dispositivo Android alla workstation, esegui adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' per dare la preferenza al backend OpenGL ES rispetto a Vulkan e riavvia Chrome.

Attributo info di GPUAdapter

Ora è possibile ottenere informazioni di identificazione su un'unità di aggiornamento in modo sincrono con l'attributo GPUAdapter info. In precedenza, l'unico modo per ottenere le informazioni sull'adattatore era chiamare il metodo asincrono GPUAdapter requestAdapterInfo(). Tuttavia, requestAdapterInfo() è stato rimosso dalla specifica WebGPU e verrà rimosso da Chrome entro la fine dell'anno per dare agli sviluppatori web tempo sufficiente per effettuare la transizione necessaria. Consulta l'esempio seguente, Stato di Chrome e il problema 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"

Miglioramenti all'interoperabilità di WebAssembly

Per supportare gli heap WebAssembly passati direttamente a WebGPU, le dimensioni dei seguenti argomenti BufferSource non sono più limitate a 2 GB: dynamicOffsetsData in setBindGroup(), origine data in writeBuffer() e origine data in Pin writeTexture(). Vedi issue 339049388.

Errori del codificatore dei comandi migliorati

Alcuni errori di convalida generati dagli encoder dei comandi ora avranno informazioni contestuali migliorate. Ad esempio, il tentativo di avviare un passaggio di calcolo mentre era ancora aperto un passaggio di rendering ha generato il seguente errore.

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)

Sebbene descriva il motivo dell'errore, non indica quale chiamata ha effettivamente causato l'errore di convalida. Il seguente errore mostra i messaggi migliorati che includono il comando che ha attivato l'errore. Vedi la modifica 192245.

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

Aggiornamenti di Dawn

L'API C webgpu.h non espone più wgpuSurfaceGetPreferredFormat(), l'equivalente in C di wgpu::Surface::GetPreferredFormat() di Dawn. Utilizza invece wgpu::Surface::GetCapabilities() per ottenere l'elenco dei formati supportati, quindi formats[0] per ottenere il formato della trama preferito per questa superficie. Nel frattempo, la chiamata a wgpu::Surface::GetPreferredFormat() genera un avviso di ritiro. Vedi il problema 290.

Gli utilizzi delle texture supportati di una superficie sono ora disponibili tramite wgpu::SurfaceCapabilities::usages quando si chiama wgpu::Surface::GetCapabilities(). Dovrebbero sempre includere wgpu::TextureUsage::RenderAttachment. Consulta il problema 301.

Sono riportati solo alcuni dei punti salienti. Consulta l'elenco completo dei commit.

Novità di WebGPU

Un elenco di tutto ciò che è stato trattato nella serie Novità di WebGPU.

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