Estensione fragment_depth WGSL
Nelle fasi di rendering ad alta intensità di geometria, le ottimizzazioni early-Z sono le migliori amiche degli sviluppatori. Offrono un enorme aumento delle prestazioni consentendo alla GPU di scartare i pixel nascosti prima di eseguire costosi fragment shader. Se una profondità rasterizzata non supera il test di profondità, la GPU ignora completamente lo shader dei frammenti, a condizione che lo shader non abbia altri effetti collaterali.
Se vuoi approfondire il modo in cui l'hardware gestisce questo problema, MJP ha un ottimo articolo su When Does Early-Z Have to be Disabled?.
Sebbene la manipolazione della profondità personalizzata sia utile, eseguirla nel fragment shader comporta un costo nascosto. La scrittura su @builtin(frag_depth) all'interno di un fragment shader in genere costringe i driver a disattivare queste ottimizzazioni early-Z per l'intera chiamata di disegno. Ciò accade perché l'euristica del driver non può garantire che la profondità di output calcolata dello shader corrisponda alla profondità interpolata dal rasterizzatore.
Per risolvere questo problema di prestazioni, l'estensione WGSL fragment_depth consente di specificare un nome della modalità di profondità less o greater su @builtin(frag_depth) per indicare esplicitamente il confronto tra la profondità scritta e quella interpolata, consentendo alla GPU di applicare in sicurezza le ottimizzazioni early-Z.
Questa estensione del linguaggio può essere rilevata in JavaScript utilizzando navigator.gpu.wgslLanguageFeatures. Ti consigliamo di utilizzare una direttiva requires per segnalare la potenziale non portabilità con requires fragment_depth; all'inizio del codice dello shader WGSL. Consulta l'esempio seguente e l'intent to ship.
if (!navigator.gpu.wgslLanguageFeatures.has("fragment_depth")) {
throw new Error(`WGSL fragment depth is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires fragment_depth;
@fragment
fn main() -> @builtin(frag_depth, less) f32 {
// Explicitly states that the output fragment depth is less than early-Z depth,
// allowing the GPU to safely preserve early-Z optimizations.
return 0.0f;
}`,
});
Compressione delle texture non allineata
La funzionalità GPU "texture-compression-unaligned" consente di creare texture compresse con dimensioni che non sono multipli interi della dimensione del blocco (ad esempio 4x4 per i formati BC, ETC2 e ASTC). In precedenza, WebGPU richiedeva rigorosamente che le dimensioni delle texture fossero allineate a questi confini dei blocchi. Eliminando la necessità di aggiungere spaziatura o scalare le texture per adattarle agli allineamenti dei blocchi, questa funzionalità preserva la fedeltà della compressione originale senza introdurre distorsioni di scalabilità. Consulta l'intent to ship.
Il seguente snippet di codice controlla se l'adattatore supporta la compressione delle texture non allineata e, se disponibile, richiede un dispositivo con questa funzionalità.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("texture-compression-unaligned")) {
throw new Error("Texture compression unaligned support is not available");
}
// Explicitly request texture compression unaligned support.
const device = await adapter.requestDevice({
requiredFeatures: ["texture-compression-unaligned"],
});
Un ringraziamento speciale al collaboratore esterno Ignacio Castaño di spark.js per aver guidato lo sviluppo di questa funzionalità, delle specifiche e del CTS.
Spazi dei colori srgb-linear e display-p3-linear
Con l'aggiunta degli spazi dei colori predefiniti "srgb-linear" e "display-p3-linear", il contesto canvas di WebGPU ora può eseguire il rendering direttamente negli spazi dei colori lineari con gamma estesa per supportare i display con gamma ampia. Questi spazi dei colori mantengono una relazione lineare tra i valori dei pixel e la luminanza fisica. Ciò li rende ideali per il rendering della luce fisica nei giochi e per attività di elaborazione spaziale come anti-aliasing, interpolazione e decimazione. Consulta l'intent to ship e la PR #574 di esempio di Particles (HDR).
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
colorSpace: "display-p3-linear",
});
Formato di vertice snorm10-10-10-2 aggiuntivo
Il formato vertex "snorm10-10-10-2" è un formato a 32 bit compresso che contiene quattro valori normalizzati con segno: tre componenti a 10 bit (r, g, b) e un componente a 2 bit (a). Con questo formato, puoi archiviare in modo efficiente attributi, come vettori normali 3D con uno scalare aggiuntivo a 2 bit o un flag di allineamento, risparmiando al contempo larghezza di banda della memoria. Consulta la specifica PR 6491.
Supporto di f16 su Linux per NVIDIA
La funzionalità facoltativa "shader-f16", che fornisce il supporto per i valori in rappresentazione in virgola mobile a 16 bit in WGSL, è ora supportata su Linux per i driver GPU NVIDIA recenti. Consulta il problema chromium:42251215.
Aggiornamenti di Dawn
Ora puoi eseguire query sul LUID del DXGIAdapter sottostante per un determinato adattatore GPU utilizzando la struttura WGPUAdapterPropertiesD3D. Consulta il problema chromium:562849566.
Questi sono 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 155-156
- Estensione fragment_depth di WGSL
- Compressione delle texture non allineata
- Spazi dei colori srgb-linear e display-p3-linear
- Formato vertex snorm10-10-10-2 aggiuntivo
- Supporto f16 su Linux per NVIDIA
- Aggiornamenti di Dawn
Chrome 153-154
- Estensione buffer_view di WGSL
- Estensione swizzle_assignment di WGSL
- Aggiornamenti delle estensioni WGSL
- Aggiornamenti di Dawn
Chrome 151-152
- Controllo delle dimensioni dei sottogruppi
- OperationError per errori di convalida di setImmediates
- Aggiornamenti di Dawn
Chrome 149-150
Chrome 147-148
Chrome 146
- Supporto della modalità di compatibilità WebGPU su OpenGL ES 3.1
- Allegati temporanei
- Estensione WGSL texture_and_sampler_let
- Aggiornamenti di Dawn
Chrome 145
- Estensione WGSL subgroup_uniformity
- Mappatura dei buffer sincrona sperimentale nei worker
- Aggiornamenti di Dawn
Chrome 144
- Estensione subgroup_id WGSL
- Estensione WGSL uniform_buffer_standard_layout
- WebGPU su Linux
- writeBuffer e writeTexture più veloci
- Aggiornamenti di Dawn
Chrome 143
- Swizzle dei componenti della texture
- Rimuovi l'utilizzo della texture di archiviazione di sola lettura bgra8unorm
- Aggiornamenti di Dawn
Chrome 142
- Funzionalità di supporto dei formati di texture estese
- Indice primitivo in WGSL
- Aggiornamenti di Dawn
Chrome 141
- Tint IR completato
- Analisi dell'intervallo di numeri interi nel compilatore WGSL
- Aggiornamento di SPIR-V 1.4 per il backend Vulkan
- Aggiornamenti di Dawn
Chrome 140
- Il dispositivo richiede un adattatore di consumo
- Shorthand for using texture where texture view is used
- WGSL textureSampleLevel supporta le texture 1D
- Ritiro dell'utilizzo della texture di archiviazione di sola lettura bgra8unorm
- Rimozione dell'attributo isFallbackAdapter di GPUAdapter
- Aggiornamenti di Dawn
Chrome 139
- Supporto delle texture 3D per i formati compressi BC e ASTC
- Nuova funzionalità "core-features-and-limits"
- Origin trial per la modalità di compatibilità di WebGPU
- Aggiornamenti di Dawn
Chrome 138
- Sintassi abbreviata per l'utilizzo del buffer come risorsa di associazione
- Modifiche ai requisiti di dimensione per i buffer mappati al momento della creazione
- Report sull'architettura per le GPU recenti
- Aggiornamenti di Dawn
Chrome 137
- Utilizza la visualizzazione texture per l'associazione externalTexture
- Copia dei buffer senza specificare offset e dimensioni
- WGSL workgroupUniformLoad using pointer to atomic
- Attributo powerPreference di GPUAdapterInfo
- Rimozione dell'attributo compatibilityMode di GPURequestAdapterOptions
- Aggiornamenti di Dawn
Chrome 136
- Attributo isFallbackAdapter di GPUAdapterInfo
- Miglioramenti del tempo di compilazione degli shader su D3D12
- Salva e copia le immagini di Canvas
- Limitazioni della modalità di compatibilità di Lift
- Aggiornamenti di Dawn
Chrome 135
- Consenti la creazione di un layout della pipeline con un layout del gruppo di associazione nullo
- Consenti alle aree visibili di estendersi oltre i limiti dei target di rendering
- Accesso più semplice alla modalità di compatibilità sperimentale su Android
- Rimuovi il limite maxInterStageShaderComponents
- Aggiornamenti di Dawn
Chrome 134
- Migliora i workload di machine learning con i sottogruppi
- Rimuovi il supporto dei tipi di texture filtrabili con valori in virgola mobile come combinabili
- Aggiornamenti di Dawn
Chrome 133
- Formati di vertici unorm8x4-bgra e a 1 componente aggiuntivi
- Consenti la richiesta di limiti sconosciuti con un valore non definito
- Modifiche alle regole di allineamento WGSL
- Miglioramenti delle prestazioni di WGSL con discard
- Utilizza VideoFrame displaySize per le texture esterne
- Gestisci le immagini con orientamenti non predefiniti utilizzando copyExternalImageToTexture
- Migliorare l'esperienza degli sviluppatori
- Attiva la modalità di compatibilità con featureLevel
- Pulizia delle funzionalità dei sottogruppi sperimentali
- Ritiro del limite maxInterStageShaderComponents
- Aggiornamenti di Dawn
Chrome 132
- Utilizzo della visualizzazione texture
- Combinazione di texture con virgola mobile a 32 bit
- Attributo Informazioni sull'adattatore del dispositivo GPU
- La configurazione del contesto del canvas con un formato non valido genera un errore JavaScript
- Limitazioni del campionatore di filtri sulle texture
- Sperimentazione estesa dei sottogruppi
- Migliorare l'esperienza degli sviluppatori
- Supporto sperimentale per i formati di texture normalizzati a 16 bit
- Aggiornamenti di Dawn
Chrome 131
- Distanze di ritaglio in WGSL
- GPUCanvasContext getConfiguration()
- Le primitive di punti e linee non devono avere un bias di profondità
- Funzioni integrate di scansione inclusiva per i sottogruppi
- Supporto sperimentale per il multi-draw indiretto
- Opzione di compilazione del modulo shader strict math
- Rimozione di requestAdapterInfo() di GPUAdapter
- Aggiornamenti di Dawn
Chrome 130
- Blending a doppia sorgente
- Miglioramenti del tempo di compilazione degli shader su Metal
- Ritiro di requestAdapterInfo() di GPUAdapter
- Aggiornamenti di Dawn
Chrome 129
- Supporto HDR con modalità di mappatura tonale del canvas
- Supporto esteso dei sottogruppi
- Aggiornamenti di Dawn
Chrome 128
- Sperimentazione con i sottogruppi
- Ritiro dell'impostazione del bias di profondità per linee e punti
- Hide uncaptured error DevTools warning if preventDefault
- WGSL interpolate sampling first and either
- Aggiornamenti di Dawn
Chrome 127
- Supporto sperimentale per OpenGL ES su Android
- Attributo informazioni adattatore GPU
- Miglioramenti dell'interoperabilità di WebAssembly
- Errori del codificatore di comandi migliorati
- Aggiornamenti di Dawn
Chrome 126
- Aumenta il limite di maxTextureArrayLayers
- Ottimizzazione del caricamento del buffer per il backend Vulkan
- Miglioramenti del tempo di compilazione degli shader
- I buffer dei comandi inviati devono essere univoci
- Aggiornamenti di Dawn
Chrome 125
- Sottogruppi (funzionalità in fase di sviluppo)
- Esegui il rendering in una sezione della texture 3D
- Aggiornamenti di Dawn
Chrome 124
- Texture di archiviazione di sola lettura e di lettura/scrittura
- Supporto di service worker e worker condivisi
- Nuovi attributi delle informazioni sull'adattatore
- Correzioni di bug
- Aggiornamenti di Dawn
Chrome 123
- Supporto delle funzioni integrate DP4a in WGSL
- Parametri dei puntatori senza restrizioni in WGSL
- Zucchero sintattico per la dereferenziazione dei compositi in WGSL
- Stato di sola lettura separato per gli aspetti stencil e profondità
- Aggiornamenti di Dawn
Chrome 122
- Espandi la copertura con la modalità di compatibilità (funzionalità in fase di sviluppo)
- Aumenta il limite maxVertexAttributes
- Aggiornamenti di Dawn
Chrome 121
- Supporto di WebGPU su Android
- Utilizza DXC anziché FXC per la compilazione degli shader su Windows
- Query sui timestamp nei passaggi di calcolo e rendering
- Punti di accesso predefiniti ai moduli shader
- Supporto di display-p3 come spazio dei colori GPUExternalTexture
- Informazioni sugli heap di memoria
- Aggiornamenti di Dawn
Chrome 120
- Supporto per i valori a rappresentazione in virgola mobile a 16 bit in WGSL
- Supera i limiti
- Modifiche allo stato depth-stencil
- Aggiornamenti delle informazioni sull'adattatore
- Quantizzazione delle query con timestamp
- Funzionalità per le pulizie di primavera
Chrome 119
- Texture con valori in virgola mobile a 32 bit filtrabili
- Formato vertex unorm10-10-10-2
- Formato texture rgb10a2uint
- Aggiornamenti di Dawn
Chrome 118
- Supporto di HTMLImageElement e ImageData in
copyExternalImageToTexture() - Supporto sperimentale per texture di archiviazione di lettura/scrittura e di sola lettura
- Aggiornamenti di Dawn
Chrome 117
- Unset vertex buffer
- Annulla l'impostazione del gruppo di associazione
- Disattiva gli errori della creazione della pipeline asincrona quando il dispositivo viene perso
- Aggiornamenti sulla creazione del modulo shader SPIR-V
- Migliorare l'esperienza degli sviluppatori
- Pipeline di memorizzazione nella cache con layout generato automaticamente
- Aggiornamenti di Dawn
Chrome 116
- Integrazione di WebCodecs
- Dispositivo smarrito restituito da GPUAdapter
requestDevice() - Mantieni fluida la riproduzione dei video se viene chiamato
importExternalTexture() - Conformità alle specifiche
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti di Dawn
Chrome 115
- Estensioni del linguaggio WGSL supportate
- Supporto sperimentale per Direct3D 11
- Ottieni una GPU dedicata per impostazione predefinita con l'alimentazione CA
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti di Dawn
Chrome 114
- Ottimizza JavaScript
- getCurrentTexture() on unconfigured canvas throws InvalidStateError
- Aggiornamenti di WGSL
- Aggiornamenti di Dawn