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 });
Nella pagina del report WebGPU vengono mostrate le informazioni sull'adattatore GPU 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 consentire il passaggio diretto degli heap WebAssembly a WebGPU, le dimensioni dei seguenti argomenti BufferSource non sono più limitate a 2 GB: dynamicOffsetsData in setBindGroup(), origine data in writeBuffer() e data Pin writeTexture() origine. Vedi issue 339049388.

Errori del codificatore di comandi migliorati

Alcuni errori di convalida generati dagli encoder dei comandi ora avranno informazioni contestuali migliorate. Ad esempio, il tentativo di avviare un pass di computing mentre un pass di rendering era ancora aperto 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 texture preferito per questa superficie. Nel frattempo, la chiamata al numero 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 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