Nouveautés de WebGPU (Chrome 125)

François Beaufort
François Beaufort

Le nombre de fonctionnalités WebGPU peut sembler un peu creux 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 du nuanceur 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 active le parallélisme au niveau du SIMD, ce qui permet aux threads d'un groupe de communiquer et d'effectuer des opérations mathématiques collectives (par exemple, le calcul de la somme de 16 nombres). Cela constitue une forme très efficace de partage de données interthread.

Les opérations de sous-groupe 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 actuellement de standardiser cette fonctionnalité. Consultez la proposition et commentez si vous avez des questions.

Il existe une implémentation minimale et non standardisée des sous-groupes derrière les « Fonctionnalités expérimentales de la plateforme Web ». sur chrome://flags/#enable-experimental-web-platform-features afin que les développeurs puissent essayer et donner leur avis, 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érifier 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 pour 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 dans lequel le bit correspondant à subgroup_invocation_id est égal à 1 si value est vrai pour cet appel actif, et à 0 dans le cas contraire.
  • subgroupBroadcast(value, id): diffuse value à partir 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().
  }`,
});

Afficher 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, étendant ainsi ses capacités au-delà du rendu de texture 2D standard, avec le nouveau membre depthSlice dans un GPURenderPassColorAttachment. Cette nouveauté vous permet, par exemple, de créer des scènes et des effets basés sur le voxel en effectuant le rendu directement dans des volumes de texture 3D. Voir issue dawn:1020.

Actualités 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 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