Novità di WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

Pubblicato: 17 giugno 2026

Immediates

Le costanti immediate, note anche come costanti push o costanti radice, consentono di passare piccole quantità di dati che cambiano frequentemente direttamente agli shader. Questo processo evita il sovraccarico della creazione di buffer GPU e della gestione dei gruppi di binding.

L'aggiornamento dei binding dei buffer uniformi per i dati che cambiano a ogni chiamata di disegno, ad esempio un ID oggetto univoco o una matrice di trasformazione 3D per centinaia di oggetti, crea un sovraccarico della CPU. Inserisci i valori non elaborati direttamente nel codificatore della tessera per evitare di scrivere dati nella memoria e gestire le ricerche della GPU.

Le variabili immediate forniscono un percorso rapido per variabili piccole e altamente dinamiche. Utilizza buffer uniformi o buffer di archiviazione per grandi array di dati, strutture di illuminazione complesse o matrici di grandi dimensioni.

Nello shader WGSL, lo spazio degli indirizzi <immediate> ti consente di definire i dati immediati che possono essere passati direttamente al codificatore di pass. Chiama setImmediates() in JavaScript prima di una chiamata di disegno per fornire questi dati senza associare un gruppo. Per verificare il supporto, rileva la funzionalità dell'estensione del linguaggio WGSL tramite navigator.gpu.wgslLanguageFeatures.immediate_address_space Vedi l'esempio seguente e l'intent to ship.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

Per un approfondimento di questa funzionalità, consulta WebGPUFundamentals Immediates.

Complimenti al team di Microsoft per i suoi contributi.

Convalida più rigorosa per gli allegati temporanei

WebGPU ha recentemente introdotto il flag TRANSIENT_ATTACHMENT GPUTextureUsage, che consente agli sviluppatori di creare allegati di rendering temporanei, come buffer di profondità-stencil o target multisample. Questi allegati rimangono nella memoria delle tessere rapida e on-chip senza allocare la VRAM principale.

Gli aggiornamenti recenti (#6248 e #6267) perfezionano le regole di convalida per impedire l'uso improprio di questi allegati di texture efficienti in termini di memoria:

  • A causa delle limitazioni della piattaforma, viewFormats deve essere un array vuoto durante la creazione di texture temporanee. Non sono necessari formati di visualizzazione alternativi perché le texture temporanee sono solo per il rendering.
  • La creazione di una visualizzazione delle texture non restringe i flag di utilizzo. Quando viene chiamato createView() su una texture temporanea, la visualizzazione non può modificarne l'utilizzo.
  • Gli allegati temporanei non possono essere utilizzati come resolveTarget all'interno di una pass di rendering.

Aggiornamenti all'alba

Questi sono solo alcuni dei punti salienti. Consulta l'elenco completo 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

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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