Nieuw in WebGPU (Chrome 153-154)

François Beaufort
François Beaufort

Gepubliceerd: 15 september 2026

WGSL-extensie buffer_view

Met de WGSL-taalextensie buffer_view kunnen de gegevens van een uniforme, opslag- of werkgroepvariabele worden geïnterpreteerd als meerdere verschillende typen. Dit heeft een breed scala aan toepassingen, van conventioneel type-punning-gebruik tot het verdelen van een variabele in meerdere logische variabelen.

Voor de veiligheid en eenvoudige implementatie heb je alleen toegang tot opnieuw geïnterpreteerde typen via de volgende ingebouwde functies:

  • bufferView<T>() interpreteert het geheugen op een specifieke byte-offset als een pointer naar het type T.
  • bufferArrayView<T>() maakt een gebonden matrixpointer met een expliciet aantal elementen.
  • bufferLength() retourneert de grootte van de buffer in bytes.

Deze taalexensie kan in JavaScript worden gedetecteerd met navigator.gpu.wgslLanguageFeatures. We raden je aan een requires-richtlijn te gebruiken om de mogelijkheid van niet-overdraagbaarheid aan te geven met requires buffer_view bovenaan je WGSL-shadercode. Neem het volgende WGSL-voorbeeld en het intent to ship door.

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 voorstel voor bufferweergave doornemen voor meer informatie en de Wireframe WebGPU-voorbeeld uitproberen.

WGSL-extensie swizzle_assignment

Als reactie op een van de meest gevraagde communityfuncties kunt u met de WGSL-extensie swizzle_assignment rechtstreeks naar vector-swizzles schrijven, zodat u meerdere componenten in één instructie kunt updaten. Het vermindert de boilerplate aanzienlijk en verbetert de leesbaarheid van shaders, terwijl WGSL in lijn wordt gebracht met andere shadingtalen.

Deze taalexensie kan in JavaScript worden gedetecteerd met navigator.gpu.wgslLanguageFeatures. We raden je aan een requires-richtlijn te gebruiken om de mogelijkheid van niet-overdraagbaarheid aan te geven met requires swizzle_assignment bovenaan je WGSL-shadercode. Neem het volgende WGSL-voorbeeld en het intent to ship door.

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 texture-formats-tier1-taalextensie werd wel ondersteund in WGSL-code, maar werd eerder niet correct toegewezen aan navigator.gpu.wgslLanguageFeatures (als texture_formats_tier1) in JavaScript. Dit toewijzingsprobleem is nu opgelost. Ga naar Chromium CL 8159562.

De subgroups-taalextensie wordt nu automatisch aangezet als subgroup_size_control aanstaat in WGSL. Ga naar probleem dawn:545285663.

Updates voor Dawn

Met de nieuwe wgpu::FeatureName::BufferMapWriteExtendedUsagesexperimentele functie kun je een buffer maken met wgpu::BufferUsage::MapWrite in combinatie met een andere wgpu::BufferUsage, behalve wgpu::BufferUsage::MapRead, om rechtstreeks naar een toewijsbare buffer te schrijven die ook door de GPU kan worden gebruikt. Hierdoor is de tijdelijke buffer en de extra kopie op Vulkan- en D3D12-backends niet meer nodig. Ga voor meer informatie naar Buffer Map Write Extended Usages en probleem dawn:386255678.

U kunt nu de webgpu_cpp.h-bindingen bovenop elke webgpu.h-implementatie gebruiken in plaats van gebonden te zijn aan de smaak van Dawn door nieuwe webgpu_upstream_cpp_headers te gebruiken. Ga naar webgpu-headers issue #596.

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

Dit zijn maar enkele van de belangrijkste punten. Ga naar de uitgebreide lijst met doorvoeringen voor meer informatie.

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