Il numero di funzionalità di WebGPU potrebbe sembrare un po' scarso questa volta, ma alcuni importanti progressi sono dietro l'angolo. Le versioni future includeranno funzionalità quali miglioramenti della velocità di compilazione dello ShaD e modifiche al modello asincrono dell'implementazione mediante WGPUFuture.
Sottogruppi (funzionalità in fase di sviluppo)
La funzionalità dei sottogruppi abilita il parallelismo a livello di SIMD, consentendo ai thread all'interno di un gruppo di comunicare ed eseguire operazioni matematiche collettive (ad esempio il calcolo della somma di 16 numeri). Ciò fornisce una forma estremamente efficiente di condivisione dei dati tra thread.
Le operazioni di sottogruppo sono supportate dalle moderne API GPU, ma i dettagli di denominazione e implementazione variano. Il team di Chrome ha identificato delle caratteristiche comuni e sta lavorando per standardizzare questa funzionalità. Consulta la proposta e il commento se hai domande.
Esiste un'implementazione minima e non standardizzata di sottogruppi dietro il flag "Funzionalità sperimentali della piattaforma web" su chrome://flags/#enable-experimental-web-platform-features
, in modo che gli sviluppatori possano provare e condividere il loro feedback poiché i vantaggi concreti non sono ancora stati dimostrati nel contesto di WebGPU.
Quando la funzionalità "chromium-experimental-subgroups"
è disponibile in GPUAdapter
, richiedi un GPUDevice
con questa funzionalità per ottenere il supporto sperimentale dei sottogruppi in WGSL e controlla i relativi limiti minSubgroupSize
e maxSubgroupSize
.
Devi anche attivare esplicitamente questa estensione nel codice WGSL con enable chromium_experimental_subgroups
. Quando l'opzione è attiva, puoi accedere alle seguenti aggiunte:
subgroup_invocation_id
: un valore integrato per l'indice del thread all'interno del sottogruppo.subgroup_size
: un valore integrato per l'accesso alle dimensioni dei sottogruppi.subgroupBallot(value):
Restituisce un insieme di campi di bit in cui il bit corrispondente asubgroup_invocation_id
è 1 sevalue
è true per la chiamata attiva e 0 negli altri casi.subgroupBroadcast(value, id)
: trasmette ilvalue
della chiamata consubgroup_invocation_id
corrispondenteid
a tutte le chiamate all'interno del sottogruppo. Nota:id
deve essere una costante di tempo di compilazione.
Il seguente snippet di codice fornisce una base su cui sperimentare e scoprire il potenziale dei sottogruppi.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_subgroups;
@compute @workgroup_size(64) fn main(
@builtin(global_invocation_id) global_id : vec3u,
@builtin(subgroup_size) sg_size : u32,
@builtin(subgroup_invocation_id) sg_id : u32) {
// TODO: Use subgroupBallot() and subgroupBroadcast().
}`,
});
Esegui il rendering su una fetta di texture 3D
Ora puoi eseguire il rendering direttamente su sezioni di texture 3D all'interno di pass di rendering, espandendo le sue funzionalità oltre il comune rendering di texture 2D, con il nuovo membro depthSlice
in un GPURenderPassColorAttachment
. Questa aggiunta consente, ad esempio, di creare scene ed effetti basati sul voxel, eseguendo il rendering direttamente nei volumi di texture 3D. Vedi issue dawn:1020.
Aggiornamenti da Dawn
Consulta l'elenco completo dei commit.
Novità di WebGPU
Un elenco di tutti gli argomenti trattati nella serie Novità di WebGPU.
Chrome 125
- Sottogruppi (funzionalità in fase di sviluppo)
- Eseguire il rendering su una fetta di texture 3D
- Aggiornamenti dell'alba
Chrome 124
- Texture di archiviazione di sola lettura e lettura/scrittura
- Assistenza per i Service worker e i worker condivisi
- Nuovi attributi delle informazioni sull'adattatore
- Correzioni di bug
- Aggiornamenti dell'alba
Chrome 123
- Supporto delle funzioni integrate DP4a in WGSL
- Parametri puntatore senza limitazioni in WGSL
- zucchero della sintassi per dereferenziare i compositi in WGSL
- Stato di sola lettura separato per aspetti stencil e di profondità
- Aggiornamenti dell'alba
Chrome 122
- Espandi la copertura con la modalità di compatibilità (funzionalità in fase di sviluppo)
- Aumenta il limite maxVertexAttributes
- Aggiornamenti dell'alba
Guida introduttiva di Chrome
- Supporto di WebGPU su Android
- Usare DXC anziché FXC per la compilazione dello Shader su Windows
- Query di timestamp nelle tessere di calcolo e rendering
- Punti di contatto predefiniti per i moduli Shadr
- Supporto display-p3 come spazio colore GPUExternalTexture
- Informazioni sui heap di memoria
- Aggiornamenti dell'alba
Chrome 120
- Supporto per valori in virgola mobile a 16 bit in WGSL
- Supera i limiti
- Modifiche allo stato dello stencil di profondità
- Aggiornamenti alle informazioni sull'alimentatore
- Quantizzazione delle query dei timestamp
- Funzionalità per le pulizie di primavera
Chrome 119
- Trame fluttuanti a 32 bit filtrabili
- formato unorm10-10-10-2 vertex
- Formato trama Memcache10a2uint
- Aggiornamenti dell'alba
Chrome 118
- Supporto di HTMLImageElement e ImageData in
copyExternalImageToTexture()
- Supporto sperimentale per la texture di archiviazione in lettura/scrittura e in sola lettura
- Aggiornamenti dell'alba
Chrome 117
- Impostazione del buffer del vertex non impostata
- Annulla impostazione gruppo di associazione
- Silenziare gli errori della creazione di pipeline asincrone in caso di perdita del dispositivo
- Aggiornamenti alla creazione del modulo shabby di SPIR-V
- Migliorare l'esperienza degli sviluppatori
- Memorizzazione nella cache delle pipeline con il layout generato automaticamente
- Aggiornamenti dell'alba
Chrome 116
- Integrazione di WebCodecs
- Dispositivo smarrito restituito da GPUAdapter
requestDevice()
- Mantieni la riproduzione video fluida se viene chiamato
importExternalTexture()
- Conformità alle specifiche
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti dell'alba
Versione 115 di Chrome
- Estensioni in lingua WGSL supportate
- Supporto sperimentale per Direct3D 11
- Ricevi una GPU discreta per impostazione predefinita tramite alimentazione CA
- Migliorare l'esperienza degli sviluppatori
- Aggiornamenti dell'alba
Chrome 114
- Ottimizzare JavaScript
- getCurrentTexture() su canvas non configurati genera InvalidStateError
- Aggiornamenti di WGSL
- Aggiornamenti dell'alba