Novità di WebGPU (Chrome 136)

François Beaufort
François Beaufort

Data di pubblicazione: 23 aprile 2025

Attributo isFallbackAdapter di GPUAdapterInfo

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 maggiore privacy. Questa aggiunta è stata necessaria perché le librerie che accettano oggetti GPUDevice forniti dall'utente non potevano accedere a queste informazioni tramite l'attributo adapterInfo in 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, isFallbackAdapter è al momento sempre false sui dispositivi degli utenti. Stiamo esaminando la possibilità di ritirare e rimuovere l'attributo GPUAdapter isFallbackAdapter. Vedi intenzione di spedizione.

Miglioramenti al tempo 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. Questa rappresentazione intermedia, posizionata tra l'albero sintattico astratto (AST) di Tint e il writer di backend HLSL, renderà il compilatore più efficiente e gestibile, a vantaggio di sviluppatori e utenti. I test iniziali mostrano che la nuova versione di Tint è fino a 10 volte più veloce durante la conversione degli shader WGSL di Unity in HLSL.

Un diagramma di flusso mostra il processo di conversione del codice shader WGSL in istruzioni GPU di basso livello.
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. Vedi problema 42251045.

Salvare e copiare le immagini della tela

Gli utenti di Chrome ora possono fare clic con il tasto destro del mouse su un canvas WebGPU e accedere alle opzioni del menu contestuale Salva immagine con nome… o Copia immagine. Vedi problema 40902474.

La libreria
L'utente ha selezionato il menu contestuale "Salva immagine con nome…".

Rimuovere le limitazioni della modalità di compatibilità

La funzionalità sperimentale "core-features-and-limits", quando disponibile su un GPUDevice, elimina tutte le limitazioni della modalità di compatibilità (funzionalità e limiti) quando è attivato il flag chrome://flags/#enable-unsafe-webgpu. Vedi problema 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 è "compatibilità predefinita". In caso contrario, viene utilizzato il valore predefinito del core, che equivale all'utilizzo dell'opzione featureLevel: "core". Inoltre, la chiamata di requestDevice() senza requiredFeatures e requiredLimits richiede un GPUDevice con le funzionalità predefinite di GPUAdapter.

Gli adattatori con core predefiniti supportano sempre la funzionalità "core-features-and-limits" e questa viene attivata automaticamente sui GPUDevice creati a partire da questi adattatori. Per gli adattatori con compatibilità predefinita, la funzionalità "core-features-and-limits" potrebbe essere supportata e può essere richiesta sui GPUDevice creati a partire da questi adattatori. Entrambi i tipi di adattatori possono supportare anche funzionalità come "float32-blendable", che è facoltativa sia in modalità principale 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 quelle di base 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 problema 395855516.

Aggiornamenti all'alba

L'enumerazione callback status InstanceDropped è stata rinominata CallbackCancelled per chiarire che il callback è stato annullato, ma l'elaborazione in background associata all'evento, come la compilazione della pipeline, potrebbe essere ancora in esecuzione. Il nuovo nome è più applicabile in generale, nel caso in cui venga aggiunto un altro meccanismo di annullamento in un secondo momento. Vedi problema 520.

L'enumerazione wgpu::PopErrorScopeStatus::EmptyStack che indica che lo stack dell'ambito di errore non è stato estratto è stata rinominata in wgpu::PopErrorScopeStatus::Error (che è anche più applicabile in generale). Il callback ora include anche un messaggio di spiegazione dell'errore corrispondente per facilitare il debug. Vedi il problema 369.

Questi sono 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 140

Chrome 139

Chrome 138

Chrome 137

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