Nouveautés de WebGPU (Chrome 125)

François Beaufort
François Beaufort

Le nombre de fonctionnalités WebGPU peut sembler un peu faible cette fois-ci, mais des avancées majeures sont à venir ! Les futures versions incluront des fonctionnalités telles que des améliorations de la vitesse de compilation des nuanceurs et des modifications du modèle asynchrone de l'implémentation à l'aide de WGPUFuture.

Sous-groupes (fonctionnalité en cours de développement)

La fonctionnalité de sous-groupes permet de paralléliser les threads au niveau SIMD, ce qui leur permet de communiquer et d'effectuer des opérations mathématiques collectives (par exemple, calculer la somme de 16 nombres). Cela permet de partager des données entre les threads de manière très efficace.

Les opérations de sous-groupe sont compatibles avec les API GPU modernes, mais les détails de dénomination et d'implémentation varient. L'équipe Chrome a identifié les points communs et travaille actuellement à la standardisation de cette fonctionnalité. Consultez la proposition et commentez si vous avez des questions.

Une implémentation minimale et non standardisée des sous-groupes se trouve derrière l'indicateur "Fonctionnalités expérimentales de la plate-forme Web" à chrome://flags/#enable-experimental-web-platform-features afin que les développeurs puissent l'essayer et partager leurs commentaires, car les avantages concrets n'ont pas encore été prouvés dans le contexte de WebGPU.

Lorsque la fonctionnalité "chromium-experimental-subgroups" est disponible dans un GPUAdapter, demandez un GPUDevice avec cette fonctionnalité pour obtenir la prise en charge des sous-groupes expérimentaux dans WGSL et vérifiez ses limites minSubgroupSize et maxSubgroupSize.

Vous devez également activer explicitement cette extension dans votre code WGSL avec enable chromium_experimental_subgroups. Si vous l'activez, vous avez accès aux ajouts suivants:

  • subgroup_invocation_id: valeur intégrée pour l'indice du fil dans le sous-groupe.
  • subgroup_size: valeur intégrée pour l'accès à la taille du sous-groupe.
  • subgroupBallot(value): renvoie un ensemble de champs de bits où le bit correspondant à subgroup_invocation_id est défini sur 1 si value est défini sur "true" pour cette invocation active, et sur 0 dans le cas contraire.
  • subgroupBroadcast(value, id): diffuse le value de l'appel avec subgroup_invocation_id correspondant à id à toutes les invocations du sous-groupe. Remarque: id doit être une constante de temps de compilation.

L'extrait de code suivant fournit une base pour bricoler et découvrir le potentiel des sous-groupes.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

Rendu en tranche de texture 3D

Vous pouvez désormais effectuer un rendu directement sur une ou plusieurs tranches de textures 3D dans les passes de rendu, en étendant ses fonctionnalités au-delà du rendu de texture 2D standard, grâce au nouveau membre depthSlice dans un GPURenderPassColorAttachment. Cette fonctionnalité vous permet, par exemple, de créer des scènes et des effets basés sur des voxels en effectuant un rendu directement dans des volumes de texture 3D. Voir le problème dawn:1020.

Informations Dawn

Consultez la liste exhaustive des commits.

Nouveautés de WebGPU

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

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