Pubblicato il 26 maggio 2025
Utilizzare la visualizzazione della trama per l'associazione di externalTexture
Ora è consentito utilizzare una GPUTextureView (2D, singola risorsa secondaria) compatibile al posto di un vincolo GPUExternalTexture durante la creazione di un GPUBindGroup.
In questo modo, la logica degli shader nelle pipeline degli effetti video viene semplificata, poiché è necessario gestire sia GPUExternalTexture (per il video di origine) sia GPUTextureView (per l'elaborazione intermedia). Inoltre, riduce la necessità di compilare dinamicamente gli shader a seconda della provenienza della texture. Consulta Intent to Ship: WebGPU: GPUTextureView for externalTexture binding.
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
Esegue la copia dei buffer senza specificare gli offset e le dimensioni
Un nuovo sovraccarico del metodo GPUCommandEncoder consente agli sviluppatori di omettere i parametri di offset e dimensione quando utilizzano copyBufferToBuffer()
per semplificare la copia di interi buffer. Consulta Intent to Ship: WebGPU: copyBufferToBuffer overload.
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
WGSL workgroupUniformLoad che utilizza un puntatore ad atomic
Per comodità degli sviluppatori, è stata aggiunta una nuova sovraccarica workgroupUniformLoad(ptr)
in WGSL. Carica atomicamente il valore a cui fa riferimento ptr
e lo restituisce a tutte le invocazioni nel gruppo di lavoro, dove ptr
è un puntatore ad atomico all'interno di una variabile del gruppo di lavoro. Consulta il problema 408241039.
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
Attributo powerPreference di GPUAdapterInfo
L'attributo stringa non standard powerPreference
GPUAdapterInfo è ora disponibile se l'utente ha attivato il flag "Funzionalità per sviluppatori WebGPU" in chrome://flags/#enable-webgpu-developer-features
. Se supportato, il valore powerPreference
può essere "low-power"
o "high-performance"
a seconda del valore GPUPowerPreference utilizzato in GPURequestAdapterOptions. Consulta la CL 6438860.
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
Rimuovere l'attributo compatibilityMode di GPURequestAdapterOptions
L'attributo sperimentale GPURequestAdapterOptions compatibilityMode
è stato rimosso a favore dell'attributo standardizzato featureLevel
aggiunto in Chrome 133. Consulta il problema 366151404.
Aggiornamenti di Dawn
Gli sviluppatori possono creare progetti WebGPU in linguaggi come C++, utilizzando webgpu.h per scegliere come target sia WebAssembly che piattaforme specifiche. La funzionalità "emdawnwebgpu " ("Emscripten Dawn WebGPU") di Dawn, appena rilasciata, implementa la versione più recente di webgpu.h standardizzata nell'API del browser.
Emdawnwebgpu è un fork (mantenuto) delle associazioni predefinite (USE_WEBGPU
) di Emscripten (ora non più mantenute). Tutti i nuovi sviluppi vengono eseguiti su emdawnwebgpu e le associazioni predefinite di Emscripten verranno rimosse durante la transizione degli sviluppatori a emdawnwebgpu. L'intestazione C di Emdawnwebgpu è molto simile a quella di Dawn, mentre le associazioni integrate sono notevolmente obsolete.
Scarica emdawnwebgpu dalla pagina delle release di GitHub di Dawn e leggi il file README.md del pacchetto per informazioni su come utilizzarlo. I file di origine sono disponibili nel repository Dawn.
Per una guida completa, consulta la documentazione aggiornata su come creare un'app con WebGPU.
Sono riportati solo alcuni 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 138
- Scrittura abbreviata per l'utilizzo di un buffer come risorsa di associazione
- Modifiche ai requisiti relativi alle dimensioni dei buffer mappati al momento della creazione
- Report sull'architettura per le GPU recenti
- Deprecare l'attributo isFallbackAdapter di GPUAdapter
- Aggiornamenti di Dawn
Chrome 137
- Utilizzare la visualizzazione della texture per l'associazione di externalTexture
- Esegue la copia in buffer senza specificare gli offset e le dimensioni
- WGSL workgroupUniformLoad che utilizza il puntatore all'atomico
- Attributo powerPreference di GPUAdapterInfo
- Rimozione dell'attributo compatibilityMode di GPURequestAdapterOptions
- Aggiornamenti di Dawn
Chrome 136
- Attributo isFallbackAdapter di GPUAdapterInfo
- Miglioramenti ai tempi di compilazione degli shader su D3D12
- Salvare e copiare le immagini su tela
- Limitazioni della modalità di compatibilità dell'impatto
- Aggiornamenti di Dawn
Chrome 135
- Consenti la creazione del layout della pipeline con layout del gruppo di associazione nullo
- Consenti ai viewport di estendersi oltre i limiti dei target di rendering
- Accesso più facile alla modalità di compatibilità sperimentale su Android
- Rimuovere il limite maxInterStageShaderComponents
- Aggiornamenti di Dawn
Chrome 134
- Migliora i carichi di lavoro di machine learning con i sottogruppi
- Rimuovi il supporto dei tipi di texture filtrabili con valori float come miscelabili
- Aggiornamenti di Dawn
Chrome 133
- Formati di vertici unorm8x4-bgra e a 1 componente aggiuntivi
- Consenti la richiesta di limiti sconosciuti con valore non definito
- Modifiche alle regole di allineamento WGSL
- Miglioramenti del rendimento di WGSL con l'eliminazione
- Utilizzare displaySize di VideoFrame per le texture esterne
- Gestire le immagini con orientamenti non predefiniti utilizzando copyExternalImageToTexture
- Miglioramento dell'esperienza degli sviluppatori
- Attivare la modalità di compatibilità con featureLevel
- Pulizia delle funzionalità dei sottogruppi sperimentali
- Ritiro del limite maxInterStageShaderComponents
- Aggiornamenti di Dawn
Chrome 132
- Utilizzo della visualizzazione delle texture
- Mescolanza di texture con formato a virgola mobile 32 bit
- Attributo adapterInfo di GPUDevice
- La configurazione del contesto della tela con un formato non valido genera un errore JavaScript
- Limitazioni dei filtri di campionamento nelle texture
- Sperimentazione dei sottogruppi estesi
- Miglioramento dell'esperienza degli sviluppatori
- Supporto sperimentale per i formati delle texture normalizzate a 16 bit
- Aggiornamenti di Dawn
Chrome 131
- Tagliare le distanze in WGSL
- GPUCanvasContext getConfiguration()
- Gli elementi primitivi punto e linea non devono avere bias di profondità
- Funzioni integrate di scansione inclusiva per i sottogruppi
- Supporto sperimentale per il rendering indiretto multi-draw
- Opzione di compilazione del modulo shader matematica rigorosa
- Rimuovi requestAdapterInfo() di GPUAdapter
- Aggiornamenti di Dawn
Chrome 130
- Combinazione di due origini
- Miglioramenti ai tempi di compilazione degli shader su Metal
- Obsoletezza di requestAdapterInfo() di GPUAdapter
- Aggiornamenti di Dawn
Chrome 129
- Supporto HDR con modalità di mappatura tonale della tela
- Supporto dei sottogruppi ampliato
- Aggiornamenti di Dawn
Chrome 128
- Sperimentazione con i sottogruppi
- Ritiro dell'impostazione della bias di profondità per linee e punti
- Nascondere l'avviso DevTools relativo a un errore non rilevato se preventDefault
- WGSL esegue prima l'interpolazione del campionamento e poi
- Aggiornamenti di Dawn
Chrome 127
- Supporto sperimentale per OpenGL ES su Android
- Attributo info di GPUAdapter
- Miglioramenti all'interoperabilità di WebAssembly
- Errori relativi all'encoder dei comandi migliorati
- Aggiornamenti di Dawn
Chrome 126
- Aumentare il limite di maxTextureArrayLayers
- Ottimizzazione del caricamento del buffer per il backend Vulkan
- Miglioramenti ai tempi di compilazione degli shader
- Gli spazi dei comandi inviati devono essere univoci
- Aggiornamenti di Dawn
Chrome 125
- Sottogruppi (funzionalità in fase di sviluppo)
- Eseguire il rendering di una sezione della texture 3D
- Aggiornamenti di Dawn
Chrome 124
- Texture di archiviazione di sola lettura e di lettura e scrittura
- Supporto di worker di servizio 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 del cursore non soggetti a restrizioni in WGSL
- Sintassi alternativa per il dereferenziamento dei compositi in WGSL
- Stato di sola lettura separato per gli aspetti di stencil e profondità
- Aggiornamenti di Dawn
Chrome 122
- Ampliare la copertura con la modalità di compatibilità (funzionalità in fase di sviluppo)
- Aumentare il limite di maxVertexAttributes
- Aggiornamenti di Dawn
Chrome 121
- Supporto di WebGPU su Android
- Utilizzare DXC anziché FXC per la compilazione degli shader su Windows
- Query sui timestamp nei passaggi di calcolo e rendering
- Punti di contatto 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 virgola mobile a 16 bit in WGSL
- Spingere i limiti al massimo
- Modifiche allo stato della maschera di profondità
- Aggiornamenti delle informazioni sugli adattatori
- Quantizzazione delle query sui timestamp
- Funzionalità per le pulizie di primavera
Chrome 119
- Texture con formato a virgola mobile 32 bit filtrabili
- Formato vertice unorm10-10-10-2
- Formato texture rgb10a2uint
- Aggiornamenti di Dawn
Chrome 118
- Supporto di HTMLImageElement e ImageData in
copyExternalImageToTexture()
- Supporto sperimentale per le texture di archiviazione in lettura/scrittura e di sola lettura
- Aggiornamenti di Dawn
Chrome 117
- Buffer di vertici non impostato
- Reimpostare il gruppo di associazione
- Ignorare gli errori della creazione della pipeline asincrona quando il dispositivo viene smarrito
- Aggiornamenti alla creazione di moduli shader SPIR-V
- Miglioramento dell'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()
- Mantenere la riproduzione video fluida se viene chiamato
importExternalTexture()
- Conformità alle specifiche
- Miglioramento dell'esperienza degli sviluppatori
- Aggiornamenti di Dawn
Chrome 115
- Estensioni di lingua WGSL supportate
- Supporto sperimentale per Direct3D 11
- Ottenere una GPU discreta per impostazione predefinita con alimentazione CA
- Miglioramento dell'esperienza degli sviluppatori
- Aggiornamenti di Dawn
Chrome 114
- Ottimizza JavaScript
- getCurrentTexture() su canvas non configurato genera un errore InvalidStateError
- Aggiornamenti WGSL
- Aggiornamenti di Dawn