Novità di WebGPU (Chrome 115)

François Beaufort
François Beaufort

Estensioni lingua WGSL supportate

Il membro wgslLanguageFeatures dell'oggetto GPU elenca i nomi delle estensioni di lingua WGSL supportate. Le estensioni di lingua WGSL supportate vengono attivate automaticamente, pertanto non è necessario richiederne esplicitamente una. Al momento questo elenco è vuoto, ma potresti riceverne molti in futuro (ad esempio, do-while loops). Vedi problema 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 all'aggiunta del supporto WebGPU per Direct3D 11. Ora puoi sperimentarlo localmente eseguendo Chrome su Windows con i flag della riga di comando --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Vedi problema dawn:1705.

Usa una GPU discreta per impostazione predefinita con alimentazione CA

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

Migliorare l'esperienza degli sviluppatori

Nuovi avvisi di DevTools

Se la chiave depth viene utilizzata in un GPUExtend3DDict, viene mostrato un avviso nella console DevTools poiché la chiave corretta è depthOrArrayLayers. Consulta il problema chromium:1440900.

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

Anche se i messaggi e le estrazioni a dimensione zero sono validi, un avviso incoraggia gli sviluppatori a evitarli quando possibile. Vedi issue dawn:1786.

Messaggi di errore migliori

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

Quando si inviano i buffer dei comandi con oggetti eliminati, le etichette dei buffer utilizzate 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 indica il gruppo e il numero dell'associazione che non ha superato la convalida, 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. Guarda un esempio di seguito e il problema relativo al 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 debug use_user_defined_labels_in_backend ti consente di inoltrare le etichette degli oggetti al backend in modo che siano visibili in strumenti di debug specifici della piattaforma come RenderDoc, PIX o Instruments. D'ora in poi, su macOS viene offerta un'esperienza di debug migliore se lo attivi per il debug. Vedi il problema dawn:1784

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

Registra HLSL se la compilazione non riesce

L'opzione di attivazione/disattivazione di debug dump_shaders ti consente di registrare gli streamr WGSL di input e gli streamr di backend tradotti. D'ora in poi, quando lo abiliti per il debug, il file HLSL verrà scaricato se non riesce a completare la compilazione. Vedi il problema dawn:1681

Aggiornamenti all'alba

Annulla impostazione vertex buffer

Il trasferimento di nullptr anziché di un wgpu::Buffer a SetVertexBuffer() su wgpu::RenderPassEncoder o wgpu::RenderBundleEncoder ti consente di annullare l'impostazione di un vertex buffer impostato in precedenza 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 di rimanere nella memoria dei riquadri, 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 Problema aurora: 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 CMake di DAWN_FETCH_DEPENDENCIES ti consente di recuperare le dipendenze Dawn utilizzando uno script Python che legge i file DEPS invece di richiedere l'installazione di depot_tools da parte di tutti i progetti che dipendono da questo. Vedi la modifica 131750.

Novità di WebGPU

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

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