Nieuw in WebGPU (Chrome 144)

François Beaufort
François Beaufort

Gepubliceerd: 7 januari 2026

WGSL-extensie subgroup_id

Met de WGSL-taalextensie subgroup_id kun je de volgende nieuwe ingebouwde waarden in werkgroepen gebruiken als de extensie subgroups aanstaat:

  • subgroup_id: Biedt de ID van de subgroep van een aanroep binnen de huidige werkgroep.
  • num_subgroups: Rapporteert het aantal subgroepen in de werkgroep.

Eerder moest je een subgroep-ID reconstrueren (meestal via atomaire bewerkingen) om geheugentoegang te indexeren met subgroep-aanroep-ID's en overlappende geheugentoegang te voorkomen. Je kunt nu subgroup_id gebruiken om de andere helft van die vergelijking in te vullen. Omdat deze functionaliteit nog niet beschikbaar is in de D3D-backend, wordt deze daar geëmuleerd. Het moet veilig zijn om een equivalent van local_invocation_index te maken als subgroup_invocation_id + subgroup_size * subgroup_id. Er kunnen gevallen zijn waarin subgroepen niet vol zijn.

Deze taalexteensie kan 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 subgroup_id; bovenaan je WGSL-shadercode. Neem het volgende voorbeeld en het intent to ship door.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

WGSL-extensie uniform_buffer_standard_layout

Met de WGSL-taalextensie uniform_buffer_standard_layout kunnen uniforme buffers dezelfde beperkingen voor de geheugenindeling gebruiken als opslagbuffers. Hierdoor is het makkelijker om gegevensstructuren te delen in beide soorten buffers. Dit betekent dat uniforme buffers niet meer hoeven te worden uitgelijnd op 16 bytes voor matrix-elementen of dat geneste structuuroffsets moeten worden opgevuld tot een veelvoud van 16 bytes.

Deze taalexteensie kan 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 uniform_buffer_standard_layout; bovenaan je WGSL-shadercode. Neem het volgende voorbeeld en het intent to ship door.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

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

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

WebGPU op Linux

Het Chrome-team rolt WebGPU zorgvuldig uit voor Linux. We beginnen met ondersteuning voor Intel Gen12+-GPU's, maar we hebben een voorlopig plan om de ondersteuning uit te breiden naar meer apparaten (AMD, NVIDIA). Deze implementatie gebruikt een architectuur waarbij WebGPU Vulkan gebruikt en de rest van Chromium op OpenGL blijft, waardoor bestaande, bekende goede codepaden worden gebruikt. Ga naar probleem 442791440.

Snellere writeBuffer en writeTexture

writeBuffer() en writeTexture() zijn geoptimaliseerd in Chrome. Dit leidt tot prestatieverbeteringen die tot 2 keer beter zijn dan de vorige versie, afhankelijk van de grootte van de overgezette gegevens. Deze wijziging is ook van invloed op alle gebruikers van de Dawn Wire-implementatie. Ga naar probleem 441900745.

Updates voor Dawn

Het Android GPU-team heeft de eerste alfafase van Kotlin-bindingen voor WebGPU op Android gepubliceerd. Deze zijn beschikbaar via Jetpack. Het androidx.webgpu-pakket geeft Android-ontwikkelaars toegang tot een moderne GPU API met Kotlin, waarbij de verouderde problemen van OpenGL of de complexiteit van Vulkan worden omzeild. Dit is een spannende ontwikkeling voor het ecosysteem.

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