Nouveautés de WebGPU (Chrome 136)

François Beaufort
François Beaufort

Publié le 23 avril 2025

Attribut GPUAdapterInfo isFallbackAdapter

L'attribut booléen isFallbackAdapter de GPUAdapterInfo indique si un GPUAdapter présente des limites de performances importantes en échange d'une compatibilité plus large, d'un comportement plus prévisible ou d'une confidentialité améliorée. Cette addition était nécessaire, car les bibliothèques qui utilisent des objets GPUDevice fournis par l'utilisateur ne pouvaient pas accéder à ces informations via l'attribut adapterInfo sur GPUDevice. Consultez l'exemple suivant et l'problème 403172841.

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Chrome n'ayant pas encore pris en charge les adaptateurs de remplacement, isFallbackAdapter est actuellement toujours faux sur les appareils des utilisateurs. Nous étudions la possibilité de supprimer l'attribut isFallbackAdapter de GPUAdapter. Voir Intent to ship.

Amélioration du temps de compilation des nuanceurs sur D3D12

L'équipe Chrome continue d'améliorer Tint, le compilateur du langage de nuanceurs WebGPU, en ajoutant une représentation intermédiaire (IR) pour les appareils compatibles avec WebGPU avec le backend D3D12. Ce code intermédiaire, situé entre l'arbre syntaxique abstrait (AST) de Tint et l'écrivain de backend HLSL, rendra le compilateur plus efficace et plus facile à gérer, ce qui profitera à la fois aux développeurs et aux utilisateurs. Les premiers tests montrent que la nouvelle version de Tint est jusqu'à 10 fois plus rapide lors de la traduction des nuanceurs WGSL d'Unity en HLSL.

Un organigramme illustre le processus de conversion du code de nuanceur WGSL en instructions de GPU bas niveau.
Création d'un pipeline de rendu sous Windows.

Ces améliorations, déjà disponibles sur Android, ChromeOS et macOS, sont progressivement déployées sur les appareils Windows compatibles avec WebGPU avec le backend D3D12. Consultez le problème 42251045.

Enregistrer et copier des images sur toile

Les utilisateurs de Chrome peuvent désormais effectuer un clic droit sur un canevas WebGPU et accéder aux options du menu contextuel Enregistrer l'image sous ou Copier l'image. Voir le problème 40902474.

Le
L'utilisateur a sélectionné le menu contextuel "Enregistrer l'image sous…".

Lever les restrictions du mode de compatibilité

Lorsque la fonctionnalité expérimentale "core-features-and-limits" est disponible sur un GPUDevice, elle lève toutes les restrictions du mode de compatibilité (fonctionnalités et limites) lorsque l'indicateur chrome://flags/#enable-unsafe-webgpu est activé. Voir le problème 395855517.

Demander un GPUAdapter avec l'option featureLevel: "compatibility" indique au navigateur de sélectionner le mode de compatibilité WebGPU expérimental. Si l'opération réussit, l'adaptateur obtenu est "compatibility-defaulting". Sinon, il s'agit de "core-defaulting", ce qui revient à utiliser l'option featureLevel: "core". De plus, l'appel de requestDevice() sans requiredFeatures et requiredLimits demande un GPUDevice avec les fonctionnalités par défaut du GPUAdapter.

Les adaptateurs par défaut du noyau sont toujours compatibles avec la fonctionnalité "core-features-and-limits", qui est automatiquement activée sur les GPUDevices créés à partir d'eux. Pour les adaptateurs compatibles par défaut, la fonctionnalité "core-features-and-limits" peut être prise en charge et peut être demandée sur les GPUDevices créés à partir d'eux. Les deux types d'adaptateurs peuvent également prendre en charge des fonctionnalités telles que "float32-blendable", qui est facultative en mode principal et en mode de compatibilité.

L'exemple suivant concerne une application qui nécessite "float32-blendable" et qui accepte l'utilisation des fonctionnalités de base si elles sont disponibles, mais qui n'utilise que les fonctionnalités de compatibilité si les fonctionnalités de base ne sont pas disponibles.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Les attributs GPUAdapter featureLevel et isCompatibilityMode expérimentaux ont été supprimés au profit de la fonctionnalité "core-features-and-limits". Voir le problème 395855516.

Informations Dawn

L'énumération InstanceDropped de l'état du rappel a été rebaptisée CallbackCancelled pour indiquer clairement que le rappel a été annulé, mais que le traitement en arrière-plan associé à l'événement, tel que la compilation du pipeline, peut toujours s'exécuter. Le nouveau nom est plus général, au cas où un autre mécanisme d'annulation serait ajouté ultérieurement. Voir le problème 520.

L'énumération wgpu::PopErrorScopeStatus::EmptyStack qui indique que la pile de portée d'erreur n'a pas pu être supprimée a été rebaptisée wgpu::PopErrorScopeStatus::Error (qui est également plus applicable). Le rappel inclut désormais également un message d'explication d'erreur correspondant pour faciliter le débogage. Consultez le problème 369.

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

Nouveautés de WebGPU

Liste de tout ce qui a été abordé dans la série Nouveautés de WebGPU.

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