Texture con formato a virgola mobile 32 bit filtrabili
Le texture in virgola mobile a 32 bit vengono utilizzate per archiviare dati ad alta precisione, come immagini HDR e mappe di profondità. Sono particolarmente importanti per le GPU utilizzate in applicazioni professionali e di gioco di fascia alta.
Il supporto delle texture con valori float a 32 bit filtrabili descrive la capacità di una GPU di filtrare le texture con valori in virgola mobile a 32 bit. Ciò significa che la GPU può smussare i bordi delle texture a virgola mobile, rendendoli meno frastagliati. È simile all'estensione "OES_texture_float_linear" in WebGL.
Non tutte le GPU supportano le texture con valori float a 32 bit filtrabili. Quando la funzionalità "float32-filterable"
è disponibile in un GPUAdapter
, ora puoi richiedere un GPUDevice
con questa funzionalità e filtrare le texture con i formati "r32float", "rg32float" e "rgba32float". Vedi l'esempio seguente e issue dawn:1664.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-filterable")) {
throw new Error("Filterable 32-bit float textures support is not available");
}
// Explicitly request filterable 32-bit float textures support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-filterable"],
});
// Create a sampler with linear filtering.
const sampler = device.createSampler({
magFilter: "linear",
});
// Create a texture with rgba32float format.
const texture = device.createTexture({
size: [100, 100],
format: "rgba32float",
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});
// Write data to texture, create a bindgroup with sampler and texture and
// send the appropriate commands to the GPU....
Formato del vertice unorm10-10-10-2
Un nuovo formato di vertici denominato "unorm10-10-10-2", noto anche come "rgb10a2", è stato aggiunto alla specifica WebGPU. È costituito da un valore pacchettizzato a 32 bit con quattro valori interi non firmati normalizzati, disposti come 10 bit, 10 bit, 10 bit e 2 bit. Vedi l'esempio seguente e issue dawn:2044.
// Define the layout of vertex attribute data with unorm10-10-10-2 format.
const buffers = [
{
arrayStride: 0,
attributes: [
{ format: "unorm10-10-10-2", offset: 0, shaderLocation: 0 },
],
},
];
// Describe the vertex shader entry point and its input buffer layouts.
const vertex = {
module: myVertexShaderModule,
entryPoint: "main",
buffers,
};
// Pass vertex to device.createRenderPipeline() and
// use vec4<f32> type in WGSL shader code to manipulate data.
Formato della texture rgb10a2uint
Alla specifica WebGPU è stato aggiunto un nuovo formato di texture denominato "rgb10a2uint". È costituito da un formato di pixel con imballaggio a 32 bit con quattro componenti interi non firmati: rosso a 10 bit, verde a 10 bit, blu a 10 bit e alfa a 2 bit. Vedi l'esempio seguente e issue dawn:1936.
// Create a texture with rgb10a2uint format.
const texture = device.createTexture({
size: [100, 100],
format: "rgb10a2uint",
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});
// Write data to texture, create a bindgroup with texture and
// send the appropriate commands to the GPU....
Aggiornamenti di Dawn
Le query timestamp consentono alle applicazioni WebGPU di misurare con precisione (fino al nanosecondo) il tempo necessario per l'esecuzione dei comandi GPU. La forma dell'API per acquisire le query sui timestamp all'inizio e alla fine dei passaggi è stata aggiornata in modo da corrispondere alla specifica WebGPU. Vedi l'esempio seguente e issue dawn:1800.
// Create a timestamp query set that will store the timestamp values.
wgpu::QuerySetDescriptor querySetDescriptor = {
.count = 2,
.type = wgpu::QueryType::Timestamp};
wgpu::QuerySet querySet = device.CreateQuerySet(&querySetDescriptor);
wgpu::RenderPassTimestampWrites timestampWrites = {
.querySet = querySet,
.beginningOfPassWriteIndex = 0,
.endOfPassWriteIndex = 1};
wgpu::ComputePassDescriptor pass{.timestampWrites = ×tampWrites};
// Write the queue timestamp into beginningOfPassWriteIndex and
// endOfPassWriteIndex of myQuerySet respectively before and after the pass
// commands execute.
myEncoder.BeginComputePass(&pass);
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 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 per la compilazione del modulo di ombreggiatura matematica rigorosa
- Rimuovi requestAdapterInfo() di GPUAdapter
- Aggiornamenti di Dawn
Chrome 130
- Combinazione di due sorgenti
- Miglioramenti dei tempi di compilazione degli Shader su metal
- Ritiro di GPUAdapter requestAdapterInfo()
- Aggiornamenti di Dawn
Chrome 129
- Supporto HDR con la modalità di mappatura dei toni 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 interpola prima il campionamento e
- Aggiornamenti di Dawn
Chrome 127
- Supporto sperimentale per OpenGL ES su Android
- Attributo info di GPUAdapter
- Miglioramenti all'interoperabilità di WebAssembly
- Errori dell'encoder dei comandi migliorati
- Aggiornamenti di Dawn
Chrome 126
- Aumenta il limite di maxTextureArrayLevel
- 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 di puntatore senza limitazioni in WGSL
- Sintassi alternativa per il dereferenziamento dei compositi in WGSL
- Separa lo stato di sola lettura per gli aspetti relativi allo stencil e alla 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 sull'alba
Chrome 121
- Supporto di WebGPU su Android
- Utilizzare DXC anziché FXC per la compilazione degli shader su Windows
- Query con timestamp nei passaggi di computing e rendering
- Punti di ingresso predefiniti ai moduli Shar
- Supporta 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 Profondità dello stencil
- Aggiornamenti delle informazioni sull'adattatore
- Quantizzazione delle query sui timestamp
- Funzionalità per le pulizie di primavera
Chrome 119
- Trame in virgola mobile a 32 bit filtrabili
- formato vertex unorm10-10-10-2
- Formato texture RGB 10a2uint
- 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
- Annulla impostazione vertex buffer
- Annulla impostazione gruppo di associazione
- Ignorare gli errori della creazione della pipeline asincrona quando il dispositivo viene smarrito
- Aggiornamenti sulla creazione di moduli shader SPIR-V
- Miglioramento dell'esperienza degli sviluppatori
- Pipeline di memorizzazione nella cache con layout generato automaticamente
- Aggiornamenti sull'alba
Chrome 116
- Integrazione di WebCodecs
- Dispositivo smarrito restituito da GPUAdapter
requestDevice()
- Mantieni una riproduzione video fluida se viene chiamato
importExternalTexture()
- Conformità alle specifiche
- Miglioramento dell'esperienza degli sviluppatori
- Aggiornamenti sull'alba
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
- Ottimizzare JavaScript
- getCurrentTexture() su canvas non configurato genera un errore InvalidStateError
- Aggiornamenti WGSL
- Aggiornamenti di Dawn