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à sperimentale WebGPU in Chrome per Android. Ciò è 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 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 procedere nel seguente modo:

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

Attributo informazioni GPUAdapter

Ora è possibile ottenere informazioni di identificazione su un adattatore in modo sincrono con l'attributo GPUAdapter info. In precedenza, l'unico modo per ottenere informazioni sull'adattatore era chiamare il metodo requestAdapterInfo() GPUAdapter asincrono. 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. Guarda l'esempio seguente, relativo allo stato di Chrome e al 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 il problema 339049388.

Errori del codificatore di comandi migliorati

Alcuni errori di convalida generati dai codificatori di 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)

Descrive il motivo dell'errore, ma non indica quale chiamata ha causato effettivamente l'errore di convalida. Il seguente errore mostra la messaggistica migliorata che include 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 all'alba

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

Gli utilizzi supportati di texture di una superficie ora sono disponibili fino a wgpu::SurfaceCapabilities::usages quando chiami wgpu::Surface::GetCapabilities(). Dovrebbero includere sempre wgpu::TextureUsage::RenderAttachment. Vedi il problema 301.

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

Novità di WebGPU

Un elenco di tutti gli argomenti trattati nella serie Novità di WebGPU.

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