Novità di WebGPU (Chrome 136)

François Beaufort
François Beaufort

Data di pubblicazione: 23 aprile 2025

Attributo GPUAdapterInfo isFallbackAdapter

L'attributo booleano GPUAdapterInfo isFallbackAdapter indica se un GPUAdapter presenta limitazioni significative delle prestazioni in cambio di una compatibilità più ampia, un comportamento più prevedibile o una privacy migliorata. Questa aggiunta è stata necessaria perché le librerie che utilizzano oggetti GPUDevice forniti dall'utente non potevano accedere a queste informazioni tramite l'attributo adapterInfo su GPUDevice. Vedi l'esempio seguente e il problema 403172841.

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Poiché Chrome non ha ancora implementato il supporto per gli adattatori di riserva, al momento isFallbackAdapter è sempre falso sui dispositivi degli utenti. Stiamo valutando se l'attributo GPUAdapter isFallbackAdapter può essere ritirato e rimosso. Vedi Intento di spedizione.

Miglioramenti ai tempi di compilazione degli shader su D3D12

Il team di Chrome continua a migliorare Tint, il compilatore del linguaggio shader WebGPU, aggiungendo una rappresentazione intermedia (IR) per i dispositivi che supportano WebGPU con il backend D3D12. Questo IR, posizionato tra l'albero sintattico astratto (AST) di Tint e lo scrittore di backend HLSL, renderà il compilatore più efficiente e manutenibile, a vantaggio sia degli sviluppatori che degli utenti. I test iniziali mostrano che la nuova versione di Tint è fino a 10 volte più veloce durante la traduzione degli shader WGSL di Unity in HLSL.

Un diagramma di flusso mostra il processo di conversione del codice shader WGSL in istruzioni GPU a basso livello.
Esegui la creazione della pipeline di rendering in Windows.

Questi miglioramenti, già accessibili su Android, ChromeOS e macOS, vengono progressivamente estesi ai dispositivi Windows che supportano WebGPU con il backend D3D12. Consulta il problema 42251045.

Salvare e copiare le immagini su tela

Ora gli utenti di Chrome possono fare clic con il tasto destro del mouse su una tela WebGPU e accedere alle opzioni del menu contestuale Salva immagine con nome… o Copia immagine. Vedi il problema 40902474.

La
L'utente ha selezionato il menu contestuale "Salva immagine come…".

Limitazioni della modalità di compatibilità dell'incremento

La funzionalità sperimentale "core-features-and-limits", se disponibile su un dispositivo GPU, rimuove tutte le limitazioni della modalità di compatibilità (funzionalità e limiti) quando il flag chrome://flags/#enable-unsafe-webgpu è attivato. Vedi issue 395855517.

La richiesta di un GPUAdapter con l'opzione featureLevel: "compatibility" suggerisce al browser di selezionare la modalità di compatibilità WebGPU sperimentale. In caso di esito positivo, l'adattatore risultante è "compatibility-defaulting". In caso contrario, è "core-defaulting", che corrisponde all'utilizzo dell'opzione featureLevel: "core". Inoltre, la chiamata a requestDevice() senza requiredFeatures e requiredLimits richiede un dispositivo GPU con le funzionalità predefinite di GPUAdapter.

Gli adattatori predefiniti per il core supportano sempre la funzionalità "core-features-and-limits", che viene attivata automaticamente sui GPUDevice creati da questi adattatori. Per gli adattatori con impostazione predefinita di compatibilità, la funzionalità "core-features-and-limits" potrebbe essere supportata e può essere richiesta sui dispositivi GPU creati da questi adattatori. Entrambi i tipi di adattatori possono supportare anche funzionalità come "float32-blendable", che è facoltativa sia in modalità di base che in modalità di compatibilità.

L'esempio seguente riguarda un'applicazione che richiede "float32-blendable" e supporta l'utilizzo delle funzionalità di base, se disponibili, ma utilizza solo le funzionalità di compatibilità se queste non sono disponibili.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Gli attributi sperimentali GPUAdapter featureLevel e isCompatibilityMode sono stati rimossi a favore della funzionalità "core-features-and-limits". Vedi issue 395855516.

Aggiornamenti di Dawn

L'enum stato del callback InstanceDropped è stato rinominato in CallbackCancelled per chiarire che il callback è stato annullato, ma l'elaborazione in background associata all'evento, ad esempio la compilazione della pipeline, potrebbe essere ancora in esecuzione. Il nuovo nome è più applicabile a livello generale, nel caso in cui in un secondo momento venga aggiunto un altro meccanismo di annullamento. Vedi issue 520.

L'enum wgpu::PopErrorScopeStatus::EmptyStack che indica che non è stato possibile estrarre lo stack dell'ambito dell'errore è stato rinominato in wgpu::PopErrorScopeStatus::Error (che è anche più applicabile in generale). Ora il messaggio di chiamata contiene anche un messaggio di spiegazione dell'errore corrispondente per facilitare il debug. Vedi il problema 369.

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 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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