Wat is er nieuw in WebGPU (Chrome 144)?

François Beaufort
François Beaufort

Gepubliceerd: 7 januari 2026

WGSL subgroup_id-extensie

Met de WGSL-taalextensie subgroup_id kunt u de volgende nieuwe ingebouwde waarden in werkgroepen gebruiken wanneer de subgroups extensie is ingeschakeld:

  • subgroup_id : Geeft de ID van de subgroep van een aanroep binnen de huidige werkgroep weer.
  • num_subgroups : Geeft het aantal subgroepen weer dat aanwezig is in de werkgroep.

Voorheen moest je, om geheugen te indexeren met behulp van subgroep-aanroep-ID's, een subgroep-ID reconstrueren (meestal via atomaire bewerkingen ) om 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 zou veilig moeten zijn om een ​​equivalent van local_invocation_index te creëren als subgroup_invocation_id + subgroup_size * subgroup_id . Houd er rekening mee dat er gevallen kunnen zijn waarin subgroepen niet volledig gevuld zijn.

Deze taaluitbreiding kan 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 subgroup_id; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en de intentie om dit te implementeren .

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 uniform_buffer_standard_layout-extensie

De WGSL-taalextensie uniform_buffer_standard_layout zorgt ervoor dat uniforme buffers dezelfde geheugenindelingbeperkingen kunnen gebruiken als opslagbuffers, waardoor het gemakkelijker wordt om datastructuren in beide soorten buffers te delen. Dit betekent dat uniforme buffers niet langer een uitlijning van 16 bytes op array-elementen hoeven te hebben, of dat ze de offsets van geneste structuren hoeven op te vullen tot een veelvoud van 16 bytes.

Deze taaluitbreiding kan 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 uniform_buffer_standard_layout; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en de intentie om dit te implementeren .

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 voor Linux geleidelijk uit, te beginnen met ondersteuning voor Intel Gen12+ GPU's, maar met een voorlopig plan om dit uit te breiden naar meer apparaten (AMD, NVIDIA). Deze implementatie maakt gebruik van een architectuur waarbij WebGPU Vulkan gebruikt en de rest van Chromium op OpenGL blijft draaien, waarbij gebruik wordt gemaakt van bestaande, beproefde code. Zie issue 442791440 .

Snellere writeBuffer en writeTexture

writeBuffer() en writeTexture() zijn geoptimaliseerd in Chrome, wat resulteert in prestatieverbeteringen tot wel twee keer beter dan de vorige versie, afhankelijk van de grootte van de overgedragen gegevens. Deze wijziging heeft ook gevolgen voor alle gebruikers van de Dawn Wire- implementatie. Zie issue 441900745 .

Dawn-updates

Het Android GPU-team heeft de eerste alfaversie van Kotlin-bindings voor WebGPU op Android uitgebracht, beschikbaar via Jetpack. Het pakket androidx.webgpu geeft Android-ontwikkelaars toegang tot een moderne GPU-API met Kotlin, waarmee de problemen van OpenGL of de complexiteit van Vulkan worden omzeild – een veelbelovende ontwikkeling voor het ecosysteem!

Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU?

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

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