Nieuw in WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

Gepubliceerd: 17 juni 2026

Immediates

Met Immediates, ook wel push-constanten of root-constanten genoemd, kun je kleine hoeveelheden vaak veranderende gegevens rechtstreeks doorgeven aan shaders. Dit proces omzeilt de overhead van het maken van GPU-buffers en het beheren van bindingsgroepen.

Als je uniforme bufferbindingen updatet voor gegevens die bij elke tekenaanroep veranderen, zoals een unieke object-ID of een 3D-transformatiematrix voor honderden objecten, leidt dit tot CPU-overhead. Injecteer onbewerkte waarden rechtstreeks in de pascodering om te voorkomen dat gegevens naar het geheugen worden geschreven en GPU-zoekopdrachten worden beheerd.

Immediates bieden een snel pad voor kleine, zeer dynamische variabelen. Gebruik uniforme buffers of opslagbuffers voor grote gegevensarrays, complexe lichtstructuren of enorme matrices.

In je WGSL-shader kun je met de adresruimte <immediate> onmiddellijke gegevens definiëren die rechtstreeks naar de doorgeefcoder kunnen worden gestuurd. Roep setImmediates() aan in JavaScript vóór een tekenaanroep om deze gegevens te leveren zonder een groep te binden. Als je wilt checken of de immediate_address_space WGSL-taalextensie wordt ondersteund, gebruik je navigator.gpu.wgslLanguageFeatures om de functie te detecteren. Neem het volgende voorbeeld en het intent to ship door.

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();

Ga naar WebGPUFundamentals Immediates voor meer informatie over deze functie.

We willen het team van Microsoft bedanken voor hun bijdragen.

Strengere validatie voor tijdelijke bijlagen

WebGPU heeft onlangs de vlag TRANSIENT_ATTACHMENTGPUTextureUsage geïntroduceerd, waarmee ontwikkelaars tijdelijke weergavebijlagen kunnen maken, zoals diepte-stencilbuffers of doelen met meerdere samples. Deze bijlagen blijven in het snelle geheugen op de chip zonder dat er hoofd-VRAM wordt toegewezen.

In recente updates (#6248 en #6267) zijn de validatieregels verfijnd om misbruik van deze geheugenefficiënte textuurbijlagen te voorkomen:

  • Vanwege platformbeperkingen moet viewFormats een lege matrix zijn als je tijdelijke texturen maakt. Er zijn geen alternatieve weergave-indelingen nodig, omdat tijdelijke texturen alleen voor weergave zijn.
  • Als u een textuurweergave maakt, worden de gebruiksmarkeringen niet beperkt. Als je createView() aanroept voor een tijdelijke textuur, kan de weergave het gebruik ervan niet wijzigen.
  • Tijdelijke bijlagen kunnen niet worden gebruikt als resolveTarget in een weergave-pass.

Updates voor Dawn

Dit zijn maar enkele van de belangrijkste punten. Neem de uitgebreide lijst met doorvoeringen door.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

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