Nowości w WebGPU (Chrome 149–150)

François Beaufort
François Beaufort

Opublikowano: 17 czerwca 2026 r.

Dane natychmiastowe

Dane natychmiastowe, nazywane też stałymi push lub stałymi głównymi, umożliwiają przekazywanie niewielkich ilości często zmieniających się danych bezpośrednio do shaderów. Ten proces omija obciążenie związane z tworzeniem buforów GPU i zarządzaniem grupami powiązań.

Aktualizowanie powiązań buforów jednolitych w przypadku danych, które zmieniają się przy każdym wywołaniu rysowania – np. unikalnego identyfikatora obiektu lub macierzy transformacji 3D dla setek obiektów – powoduje obciążenie procesora. Wstrzykuj surowe wartości bezpośrednio do kodera przekazywania, aby uniknąć zapisywania danych w pamięci i zarządzania wyszukiwaniami GPU.

Dane natychmiastowe zapewniają szybką ścieżkę dla małych, wysoce dynamicznych zmiennych. W przypadku dużych tablic danych, złożonych struktur oświetlenia lub ogromnych macierzy używaj buforów jednolitych lub buforów pamięci.

W shaderze WGSL przestrzeń adresowa <immediate> umożliwia zdefiniowanie danych natychmiastowych, które można przekazywać bezpośrednio do kodera przekazywania. Aby przekazać te dane bez wiązania grupy, przed wywołaniem rysowania wywołaj w JavaScript funkcję setImmediates(). Aby sprawdzić, czy funkcja jest obsługiwana, wykryj rozszerzenie języka WGSL immediate_address_space za pomocą navigator.gpu.wgslLanguageFeatures. Zapoznaj się z tym przykładem i intencją wysyłki.

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

Aby dowiedzieć się więcej o tej funkcji, zapoznaj się z artykułem WebGPUFundamentals Immediates.

Dziękujemy zespołowi Microsoft za wkład!

Bardziej rygorystyczna weryfikacja w przypadku tymczasowych załączników

W WebGPU niedawno wprowadzono flagę GPUTextureUsage TRANSIENT_ATTACHMENT, która umożliwia deweloperom tworzenie tymczasowych załączników renderowania, takich jak bufory głębi i szablonu czy obiekty docelowe z próbkowaniem wielokrotnym. Te załączniki pozostają w szybkiej pamięci układu scalonego bez przydzielania głównej pamięci VRAM.

Ostatnie aktualizacje (#6248 i #6267) udoskonalają reguły weryfikacji, aby zapobiec niewłaściwemu użyciu tych oszczędnych załączników tekstur:

  • Ze względu na ograniczenia platformy podczas tworzenia tymczasowych tekstur viewFormats musi być pustą tablicą. Alternatywne formaty widoków nie są potrzebne, ponieważ tymczasowe tekstury służą tylko do renderowania.
  • Utworzenie widoku tekstury nie ogranicza flag użycia. Gdy wywołasz createView() na tymczasowej teksturze, widok nie może zmienić sposobu użycia.
  • Tymczasowych załączników nie można używać jako resolveTarget w ramach przekazywania renderowania.

Aktualizacje Dawn

Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą commitów.

Co nowego w WebGPU

Lista wszystkich tematów omówionych w serii Co nowego w 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