Wat is er nieuw in WebGPU (Chrome 153-154)?

François Beaufort
François Beaufort

Gepubliceerd: 15 september 2026

WGSL buffer_view-extensie

De WGSL-taalextensie buffer_view maakt het mogelijk om de gegevens van een uniform-, opslag- of werkgroepvariabele te interpreteren als meerdere verschillende typen. Dit heeft een breed scala aan toepassingen, van conventioneel gebruik van typeconversie tot het opsplitsen van een variabele in meerdere logische variabelen.

Voor de veiligheid en om de implementatie te vereenvoudigen, zijn geherinterpreteerde typen alleen toegankelijk via de volgende ingebouwde functies:

  • bufferView<T>() interpreteert geheugen op een specifieke byte-offset als een pointer naar type T.
  • bufferArrayView<T>() maakt een begrensde arraypointer aan met een expliciet aantal elementen.
  • bufferLength() retourneert de bytegrootte van de buffer.

Deze taaluitbreiding kan in JavaScript worden gedetecteerd met behulp van navigator.gpu.wgslLanguageFeatures . Het is aan te raden een `requires`-richtlijn te gebruiken om de mogelijke niet-portabiliteit aan te geven met requires buffer_view ;` bovenaan uw WGSL-shadercode. Zie het volgende WGSL-voorbeeld en de intentie om dit te implementeren .

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

Je kunt ook het bufferweergavevoorstel bekijken voor meer details en experimenteren met het Wireframe WebGPU-voorbeeld .

WGSL swizzle_assignment-extensie

Als antwoord op een van de meest gevraagde functies vanuit de community, maakt de WGSL-extensie swizzle_assignment het mogelijk om rechtstreeks naar vector-swizzles te schrijven, waardoor je meerdere componenten in één instructie kunt bijwerken. Dit vermindert de hoeveelheid boilerplate-code aanzienlijk en verbetert de leesbaarheid van shaders, terwijl WGSL tegelijkertijd in lijn wordt gebracht met andere shading-talen.

Deze taaluitbreiding kan in JavaScript worden gedetecteerd met behulp van navigator.gpu.wgslLanguageFeatures . Het is aan te raden een `requires`-richtlijn te gebruiken om de mogelijke niet-portabiliteit aan te geven met requires swizzle_assignment ;` bovenaan uw WGSL-shadercode. Zie het volgende WGSL-voorbeeld en de intentie om dit te implementeren .

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires swizzle_assignment;

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

Updates voor WGSL-extensies

De taalextensie texture-formats-tier1 wordt weliswaar ondersteund in WGSL-code, maar werd voorheen niet correct toegewezen aan navigator.gpu.wgslLanguageFeatures (als texture_formats_tier1 ) in JavaScript. Dit toewijzingsprobleem is nu opgelost. Zie Chromium CL 8159562 .

De taaluitbreiding subgroups wordt nu automatisch ingeschakeld wanneer subgroup_size_control is ingeschakeld in WGSL. Zie issue dawn:545285663 .

Dawn-updates

De nieuwe experimentele functie wgpu::FeatureName::BufferMapWriteExtendedUsages maakt het mogelijk om een ​​buffer te creëren met wgpu::BufferUsage::MapWrite in combinatie met elke andere wgpu::BufferUsage , behalve wgpu::BufferUsage::MapRead , om direct naar een mapbare buffer te schrijven die ook door de GPU kan worden gebruikt. Dit elimineert de stagingbuffer en de extra kopieerbewerking op Vulkan- en D3D12-backends. Zie Buffer Map Write Extended Usages en issue dawn:386255678 voor meer informatie.

Je kunt nu de webgpu_cpp.h bindingen gebruiken bovenop elke webgpu.h implementatie in plaats van gebonden te zijn aan de Dawn-variant, door gebruik te maken van de nieuwe webgpu_upstream_cpp_headers . Zie webgpu-headers issue #596 .

Dawn vereist nu macOS 13.0 of hoger. Zie Dawn CL 334415 .

Dit is slechts een greep uit de belangrijkste punten. Bekijk de volledige lijst met commits voor meer details.

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

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