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 prochaines versions incluront des fonctionnalités telles que l'amélioration 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 le parallélisme au niveau SIMD, ce qui permet aux threads d'un groupe 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-groupes sont compatibles avec les API GPU modernes, mais les détails de nommage et d'implémentation varient. L'équipe Chrome a identifié les points communs et s'efforce maintenant de standardiser cette fonctionnalité. Si vous avez des questions, consultez la proposition et le commentaire.

Une implémentation minimale et non standardisée des sous-groupes est disponible derrière le flag "Experimental Web Platform Features" (Fonctionnalités expérimentales de la plate-forme Web) à l'adresse chrome://flags/#enable-experimental-web-platform-features. Les développeurs peuvent ainsi 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 expérimentale des sous-groupes 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 aurez accès aux ajouts suivants :

  • subgroup_invocation_id : valeur intégrée pour l'index du thread 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 à tous les appels du sous-groupe. Remarque : id doit être une constante de temps de compilation.

L'extrait de code suivant fournit une base pour expérimenter 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 sur une tranche de texture 3D

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

Mises à jour de l'Aube

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