Novità di WebGPU (Chrome 115)

François Beaufort
François Beaufort

Estensioni del linguaggio WGSL supportate

Il membro wgslLanguageFeatures dell'oggetto GPU elenca i nomi delle estensioni del linguaggio WGSL supportate. Le estensioni del linguaggio WGSL supportate vengono attivate automaticamente, pertanto non è necessario richiederne una in modo esplicito. Questo elenco è attualmente vuoto, ma in futuro potrai aspettarti molti problemi (ad esempio, do-while loops). Vedi issue dawn:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Supporto sperimentale per Direct3D 11

Il team di Chromium sta lavorando per aggiungere il supporto di WebGPU per Direct3D 11. Ora puoi sperimentare localmente eseguendo Chrome su Windows con i flag della riga di comando --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Vedi issue dawn:1705.

Ottenere la GPU discreta per impostazione predefinita con l'alimentazione CA

Sui dispositivi macOS con doppia GPU, se viene chiamato requestAdapter() senza un'opzione powerPreference, la GPU discreta viene restituita quando il dispositivo dell'utente è alimentato a corrente alternata. In caso contrario, viene restituita la GPU integrata. Vedi la modifica 4499307.

Migliorare l'esperienza degli sviluppatori

Nuovi avvisi di DevTools

Se il tasto depth viene utilizzato in un GPUExtend3DDict, nella console DevTools viene visualizzato un avviso perché il tasto corretto è depthOrArrayLayers. Vedi issue chromium:1440900.

Viene generato un avviso anche se un GPUBlendComponent ha un mix di membri espliciti e predefiniti. Vedi issue dawn:1785.

Anche se le distribuzioni e i draw di dimensioni zero sono validi, un avviso incoraggia gli sviluppatori a evitarli, se possibile. Vedi issue dawn:1786.

Messaggi di errore migliori

Ora viene fornito un messaggio di errore migliorato quando si utilizza un GPUCommandEncoder se finish() è già stato chiamato. Vedi issue dawn:1736.

Quando invii buffer di comando con oggetti distrutti, le etichette dei buffer di comando utilizzati in submit() sono ora visibili nel messaggio di errore. Vedi issue dawn:1747.

La parte non valida dello stato dello stencil di profondità è ora specificata nel messaggio di errore durante la convalida di depthStencil. Vedi issue dawn:1735.

Il messaggio di errore di convalida minBindingSize ora segnala il gruppo e il numero del binding la cui convalida non è riuscita, nonché il buffer. Vedi issue dawn:1604.

I messaggi di errore restituiti dal metodo mapAsync() su un oggetto GPUBuffer sono stati migliorati per aiutare gli sviluppatori durante il debug. Vedi un esempio di seguito e il problema chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

Etichette negli strumenti di debug di macOS

L'opzione di attivazione/disattivazione del debug use_user_defined_labels_in_backend ti consente di inoltrare le etichette degli oggetti al backend in modo che possano essere visualizzate in strumenti di debug specifici della piattaforma come RenderDoc, PIX o Instruments. D'ora in poi, su macOS viene fornita un'esperienza di debug migliore quando la abiliti per il debug. Vedi issue dawn:1784

Screenshot dell'app Instruments su macOS con etichette personalizzate provenienti da WebGPU.
Etichette definite dall'utente nell'app Instruments su macOS.

Registra HLSL se la compilazione non riesce

L'opzione di attivazione/disattivazione del debug dump_shaders consente di registrare gli shader WGSL di input e gli shader di backend tradotti. D'ora in poi, quando lo attivi per il debug, l'HLSL verrà scaricato se la compilazione non va a buon fine. Vedi issue dawn:1681

Aggiornamenti all'alba

Annulla l'impostazione del buffer dei vertici

Il passaggio di nullptr anziché di wgpu::Buffer a SetVertexBuffer() su wgpu::RenderPassEncoder o wgpu::RenderBundleEncoder consente di annullare l'impostazione di un buffer dei vertici precedentemente impostato in un determinato slot. Vedi issue dawn:1675.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

Allegati temporanei

Puoi creare allegati che consentano alle operazioni di rendering pass di rimanere nella memoria delle tessere, evitando il traffico VRAM e potenzialmente l'allocazione della VRAM per le texture impostando l'utilizzo di wgpu::TextureUsage::TransientAttachment. Questa funzionalità è supportata solo per Metal e Vulkan. Vedi issue dawn: 1695.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

Edificio senza depot_tools

Una nuova opzione DAWN_FETCH_DEPENDENCIES CMake consente di recuperare le dipendenze di Dawn utilizzando uno script Python che legge i file DEPS anziché richiedere l'installazione di depot_tools da parte di tutti i progetti che dipendono da esso. Vedi modifica 131750.

Novità di WebGPU

Un elenco di tutti gli argomenti trattati nella serie Novità di WebGPU.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113