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 quelques 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 d'implémentation à l'aide de WGPUFuture.

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

La fonctionnalité de sous-groupes active le parallélisme au niveau de la 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 offre une forme très efficace de partage de données entre threads.

Les opérations de sous-groupe sont compatibles avec les API GPU modernes, mais les noms et les détails d'implémentation varient. L'équipe Chrome a identifié les points communs et s'efforce actuellement de standardiser cette fonctionnalité. Consultez la proposition et envoyez un commentaire si vous avez des questions.

WebGPU inclut une implémentation minimale et non standardisée des sous-groupes derrière l'indicateur "Experimental Web Platform Features" (Fonctionnalités expérimentales de la plate-forme Web) sur 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 que les sous-groupes expérimentaux soient compatibles avec 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. Lorsque cette option est activée, vous avez accès aux ajouts suivants:

  • subgroup_invocation_id: valeur intégrée de l'index du thread dans le sous-groupe.
  • subgroup_size: valeur intégrée pour l'accès à la taille des sous-groupes.
  • subgroupBallot(value): Renvoie un ensemble de champs de bits où le bit correspondant à subgroup_invocation_id est 1 si value est vrai pour cet appel actif et 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 connue à la 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().
  }`,
});

Effectuer le rendu sur une tranche de texture 3D

Vous pouvez désormais effectuer le rendu directement sur une ou plusieurs tranches de textures 3D dans les passes de rendu, ce qui étend ses capacités au-delà du rendu de texture 2D courant, avec le nouveau membre depthSlice dans un GPURenderPassColorAttachment. Cet ajout vous permet, par exemple, de créer des scènes et des effets basés sur des voxels en effectuant le rendu directement dans les volumes de texture 3D. Voir issue dawn:1020.

Mises à jour de l'aube

Consultez la liste exhaustive des commits.

Nouveautés de WebGPU

Liste des points abordés dans la série Nouveautés de WebGPU.

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