Nouveautés de WebGPU (Chrome 144)

François Beaufort
François Beaufort

Publié le 7 janvier 2026

Extension subgroup_id WGSL

L'extension de langage WGSL subgroup_id vous permet d'utiliser les nouvelles valeurs intégrées suivantes dans les groupes de travail lorsque l'extension subgroups est activée :

  • subgroup_id : fournit l'ID du sous-groupe d'une invocation au sein du groupe de travail actuel.
  • num_subgroups : indique le nombre de sous-groupes présents dans le groupe de travail.

Auparavant, pour indexer la mémoire à l'aide des ID d'invocation de sous-groupe, vous deviez reconstruire un ID de sous-groupe (généralement par le biais d' opérations atomiques) pour éviter les accès mémoire qui se chevauchent. Vous pouvez désormais utiliser subgroup_id pour compléter l'autre moitié de l'équation. Comme cette fonctionnalité n'est pas encore disponible sur le backend D3D, elle y est émulée. Il devrait être possible de créer une équivalence à local_invocation_index en tant que subgroup_invocation_id + subgroup_size * subgroup_id. Notez que dans certains cas, les sous-groupes peuvent ne pas être complets.

Cette extension de langue peut être détectée à l'aide de navigator.gpu.wgslLanguageFeatures. Il est recommandé d'utiliser une directive "requires" pour signaler le risque de non-portabilité avec requires subgroup_id; en haut de votre code de nuanceur WGSL. Consultez l'exemple suivant et l'intention d'expédition.

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.
  }`,
});

Extension WGSL uniform_buffer_standard_layout

L'extension de langage WGSL uniform_buffer_standard_layout permet aux tampons uniformes d'utiliser les mêmes contraintes de mise en page de mémoire que les tampons de stockage, ce qui facilite le partage des structures de données dans les deux types de tampons. Cela signifie que les tampons uniformes ne sont plus tenus d'avoir un alignement sur 16 octets pour les éléments de tableau, ni de remplir les décalages de structure imbriquée sur un multiple de 16 octets.

Cette extension de langue peut être détectée à l'aide de navigator.gpu.wgslLanguageFeatures. Il est recommandé d'utiliser une directive "requires" pour signaler le risque de non-portabilité avec requires uniform_buffer_standard_layout; en haut de votre code de nuanceur WGSL. Consultez l'exemple suivant et l'intention d'expédition.

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 sur Linux

L'équipe Chrome déploie WebGPU pour Linux avec soin, en commençant par la prise en charge des GPU Intel Gen12+, mais prévoit de l'étendre à d'autres appareils (AMD, NVIDIA). Cette implémentation utilise une architecture dans laquelle WebGPU utilise Vulkan et le reste de Chromium reste sur OpenGL, en utilisant les bons chemins de code existants et bien connus. Consultez le problème 442791440.

writeBuffer et writeTexture plus rapides

writeBuffer() et writeTexture() ont été optimisés dans Chrome, ce qui a permis d'améliorer les performances jusqu'à deux fois par rapport à la version précédente, en fonction de la taille des données transférées. Cette modification affecte également tous les utilisateurs de l'implémentation Dawn Wire. Consultez le problème 441900745.

Mises à jour de l'Aube

L'équipe Android GPU a publié la première version alpha des liaisons Kotlin pour WebGPU sur Android, disponible avec Jetpack. Le package androidx.webgpu permet aux développeurs Android d'accéder à une API GPU moderne à l'aide de Kotlin, en contournant les anciens problèmes d'OpenGL ou la complexité de Vulkan. Il s'agit d'une évolution intéressante pour l'écosystème.

Il ne s'agit que de quelques points clés. Consultez la liste exhaustive des commits.

Nouveautés de WebGPU

Liste de tous les sujets abordés dans la série Nouveautés de WebGPU.

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