Texture di archiviazione di sola lettura e lettura-scrittura
Il tipo di binding della texture di archiviazione consente agli shader di leggere le texture di archiviazione senza aggiungere l'utilizzo TEXTURE_BINDING ed eseguire letture e scritture miste su determinati formati. Quando l'"readonly_and_readwrite_storage_textures" estensione del linguaggio WGSL è presente in navigator.gpu.wgslLanguageFeatures, ora puoi impostare l'accesso GPUStorageTexture su "read-write" o "read-only" durante la creazione di un layout del gruppo di binding. In precedenza, questa opzione era limitata a "write-only".
Il codice dello shader WGSL può quindi utilizzare i qualificatori di accesso read_write e read per le texture di archiviazione, le funzioni integrate textureLoad() e textureStore() si comportano di conseguenza ed è disponibile una nuova funzione integrata textureBarrier() per sincronizzare gli accessi alla memoria delle texture in un workgroup.
Ti consigliamo di utilizzare una direttiva requires per segnalare la potenziale non portabilità con requires readonly_and_readwrite_storage_textures; nella parte superiore del codice dello shader WGSL. Vedi l'esempio seguente e il problema dawn:1972.
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
Supporto di service worker e shared worker
WebGPU in Chrome porta il supporto dei web worker a un livello superiore, offrendo ora il supporto sia per i service worker sia per i shared worker. Puoi utilizzare i service worker per migliorare le attività in background e le funzionalità offline e i shared worker per la condivisione efficiente delle risorse tra gli script. Vedi il problema chromium:41494731.
Dai un'occhiata all'esempio di estensione di Chrome e all'estensione di Chrome WebLLM per scoprire come utilizzare WebGPU in un service worker di estensione.
Nuovi attributi delle informazioni sull'adattatore
Gli attributi delle informazioni sull'adattatore non standard d3dShaderModel e vkDriverVersion sono ora disponibili quando chiami requestAdapterInfo() se l'utente ha attivato il flag "Funzionalità per sviluppatori WebGPU" all'indirizzo chrome://flags/#enable-webgpu-developer-features. Quando sono supportati:
d3dShaderModelè il numero massimo del modello di shader D3D supportato. Ad esempio, il valore 62 indica che il driver attuale supporta HLSL SM 6.2. Consulta la documentazione e il problema dawn:1254.vkDriverVersionè il numero di versione del driver Vulkan specificato dal fornitore. Consulta la documentazione e il problema chromium:327457605.
vkDriverVersion mostrate su https://webgpureport.org.Correzioni di bug
La creazione di due pipeline con gruppi di binding corrispondenti utilizzando layout: "auto", quindi la creazione di un gruppo di binding con la prima pipeline e il suo utilizzo nella seconda pipeline ora genera un GPUValidationError. Consentire questa operazione era un bug di implementazione che ora è stato corretto con test appropriati. Vedi il problema dawn:2402.
Aggiornamenti di Dawn
Nell'API Dawn, la callback di errore non acquisita impostata con wgpuDeviceSetUncapturedErrorCallback ora non viene chiamata dopo che il dispositivo GPU è andato perso. Questa correzione allinea Dawn alla specifica dell'API JavaScript e all'implementazione di Blink. Vedi il problema dawn:2459.
Questi sono solo alcuni dei punti salienti principali. Consulta l'elenco esaustivo dei commit.
Novità di WebGPU
Un elenco di tutti gli argomenti trattati nella serie Novità di WebGPU.
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
- Mapping dei buffer sincrono sperimentale nei worker
- Aggiornamenti di Dawn
Chrome 144
- Estensione WGSL subgroup_id
- Estensione WGSL uniform_buffer_standard_layout
- WebGPU su Linux
- writeBuffer e writeTexture più veloci
- Aggiornamenti di Dawn
Chrome 143
- Swizzle dei componenti delle texture
- Rimozione dell'utilizzo della texture di archiviazione di sola lettura bgra8unorm
- Aggiornamenti di Dawn
Chrome 142
- Funzionalità di supporto del formato delle 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
- Le richieste di dispositivi consumano l'adattatore
- Abbreviazione per l'utilizzo della texture quando viene utilizzata la visualizzazione della texture
- WGSL textureSampleLevel supporta le texture 1D
- Ritiro dell'utilizzo della texture di archiviazione di sola lettura bgra8unorm
- Rimozione dell'attributo GPUAdapter isFallbackAdapter
- Aggiornamenti di Dawn
Chrome 139
- Supporto delle texture 3D per i formati compressi BC e ASTC
- Nuova funzionalità "core-features-and-limits"
- Prova dell'origine per la modalità di compatibilità WebGPU
- Aggiornamenti di Dawn
Chrome 138
- Abbreviazione per l'utilizzo del buffer come risorsa di binding
- Modifiche ai requisiti di dimensione per i buffer mappati durante la creazione
- Report sull'architettura per le GPU recenti
- Ritiro dell'attributo GPUAdapter isFallbackAdapter
- Aggiornamenti di Dawn
Chrome 137
- Utilizzo della visualizzazione della texture per il binding externalTexture
- Copia dei buffer senza specificare offset e dimensioni
- WGSL workgroupUniformLoad che utilizza il puntatore ad atomic
- Attributo GPUAdapterInfo powerPreference
- Rimozione dell'attributo GPURequestAdapterOptions compatibilityMode
- Aggiornamenti di Dawn
Chrome 136
- Attributo GPUAdapterInfo isFallbackAdapter
- Miglioramenti del tempo di compilazione degli shader su D3D12
- Salvataggio e copia delle immagini del canvas
- Rimozione delle limitazioni della modalità di compatibilità
- Aggiornamenti di Dawn
Chrome 135
- Consenti la creazione del layout della pipeline con il layout del gruppo di binding null
- Consenti alle finestre di visualizzazione di estendersi oltre i limiti delle destinazioni di rendering
- Accesso più facile alla modalità di compatibilità sperimentale su Android
- Rimozione del limite maxInterStageShaderComponents
- Aggiornamenti di Dawn
Chrome 134
- Miglioramento dei carichi di lavoro di machine learning con i sottogruppi
- Rimozione del supporto dei tipi di texture filtrabili in virgola mobile come combinabili
- Aggiornamenti di Dawn
Chrome 133
- Formati dei vertici unorm8x4-bgra e a 1 componente aggiuntivi
- Consenti di richiedere limiti sconosciuti con valore non definito
- Modifiche alle regole di allineamento WGSL
- Aumento del rendimento WGSL con discard
- Utilizzo di displaySize di VideoFrame per le texture esterne
- Gestione delle immagini con orientamenti non predefiniti utilizzando copyExternalImageToTexture
- Miglioramento dell'esperienza degli sviluppatori
- Attivazione della modalità di compatibilità con featureLevel
- Pulizia delle funzionalità sperimentali dei sottogruppi
- Ritiro del limite maxInterStageShaderComponents
- Aggiornamenti di Dawn
Chrome 132
- Utilizzo della visualizzazione della texture
- Blending delle texture in virgola mobile a 32 bit
- Attributo adapterInfo di GPUDevice
- La configurazione del contesto del canvas con un formato non valido genera un errore JavaScript
- Limitazioni del filtro dei campionatori sulle texture
- Sperimentazione estesa dei sottogruppi
- Miglioramento dell'esperienza degli sviluppatori
- Supporto sperimentale per i formati delle texture normalizzate a 16 bit
- Aggiornamenti di Dawn
Chrome 131
- Distanze di ritaglio in WGSL
- GPUCanvasContext getConfiguration()
- Le primitive di punti e linee non devono avere una distorsione della profondità
- Funzioni integrate di scansione inclusiva per i sottogruppi
- Supporto sperimentale per multi-draw indirect
- Opzione di compilazione del modulo shader strict math
- Rimozione di GPUAdapter requestAdapterInfo()
- Aggiornamenti di Dawn
Chrome 130
- Blending a doppia origine
- Miglioramenti del tempo di compilazione degli shader su Metal
- Ritiro di GPUAdapter requestAdapterInfo()
- Aggiornamenti di Dawn
Chrome 129
- Supporto HDR con la modalità di mappatura tonale del canvas
- Supporto esteso dei sottogruppi
- Aggiornamenti di Dawn
Chrome 128
- Sperimentazione con i sottogruppi
- Ritiro dell'impostazione della distorsione della profondità per linee e punti
- Nascondi l'avviso di errore non acquisito di DevTools se preventDefault
- WGSL interpolate sampling first and either
- Aggiornamenti di Dawn
Chrome 127
- Supporto sperimentale per OpenGL ES su Android
- Attributo info di GPUAdapter
- Miglioramenti dell'interoperabilità di WebAssembly
- Errori del codificatore di comandi migliorati
- Aggiornamenti di Dawn
Chrome 126
- Aumento del limite maxTextureArrayLayers
- Ottimizzazione del caricamento dei 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)
- Rendering sulla sezione della texture 3D
- Aggiornamenti di Dawn
Chrome 124
- Texture di archiviazione di sola lettura e lettura-scrittura
- Supporto di service worker e shared worker
- Nuovi attributi delle informazioni sull'adattatore
- Correzioni di bug
- Aggiornamenti di Dawn
Chrome 123
- Supporto delle funzioni integrate DP4a in WGSL
- Parametri del puntatore 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)
- Aumento del limite maxVertexAttributes
- Aggiornamenti di Dawn
Chrome 121
- Supporto di WebGPU su Android
- Utilizzo di DXC anziché FXC per la compilazione degli shader su Windows
- Query sui timestamp nei passaggi di calcolo e rendering
- Punti di ingresso predefiniti per i moduli shader
- Supporto di display-p3 come spazio colore GPUExternalTexture
- Informazioni sugli heap di memoria
- Aggiornamenti di Dawn
Chrome 120
- Supporto dei valori in rappresentazione in virgola mobile a 16 bit in WGSL
- Spingiti oltre i limiti
- Modifiche allo stato di profondità-stencil
- Aggiornamenti delle informazioni sull'adattatore
- Quantizzazione delle query sui timestamp
- Funzionalità di pulizia di primavera
Chrome 119
- Texture filtrabili in virgola mobile a 32 bit
- Formato dei vertici unorm10-10-10-2
- Formato della texture rgb10a2uint
- Aggiornamenti di Dawn
Chrome 118
- Supporto di HTMLImageElement e ImageData in
copyExternalImageToTexture() - Supporto sperimentale per la texture di archiviazione di lettura-scrittura e di sola lettura
- Aggiornamenti di Dawn
Chrome 117
- Annullamento dell'impostazione del buffer dei vertici
- Annullamento dell'impostazione del gruppo di binding
- Silenzia gli errori della creazione asincrona della pipeline quando il dispositivo è andato perso
- Aggiornamenti della creazione del modulo shader SPIR-V
- Miglioramento dell'esperienza degli sviluppatori
- Memorizzazione nella cache delle pipeline con layout generato automaticamente
- Aggiornamenti di Dawn
Chrome 116
- Integrazione di WebCodecs
- Dispositivo perso restituito da GPUAdapter
requestDevice() - Mantenimento della riproduzione video fluida se viene chiamato
importExternalTexture() - Conformità alle specifiche
- Miglioramento dell'esperienza degli sviluppatori
- Aggiornamenti di Dawn
Chrome 115
- Estensioni del linguaggio WGSL supportate
- Supporto sperimentale per Direct3D 11
- Ottieni la GPU discreta per impostazione predefinita con l'alimentazione CA
- Miglioramento dell'esperienza degli sviluppatori
- Aggiornamenti di Dawn
Chrome 114
- Ottimizzazione di JavaScript
- getCurrentTexture() su canvas non configurato genera InvalidStateError
- Aggiornamenti di WGSL
- Aggiornamenti di Dawn