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 limitations de performances importantes en échange d'une compatibilité plus large, d'un comportement plus prévisible ou d'une confidentialité améliorée. Cet ajout était nécessaire, car les bibliothèques qui acceptent les objets GPUDevice fournis par l'utilisateur ne pouvaient pas accéder à ces informations via l'attribut adapterInfo sur GPUDevice. Consultez l'exemple suivant et le 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.
}

Étant donné que Chrome n'est pas encore compatible avec les adaptateurs de secours, isFallbackAdapter est actuellement toujours défini sur "false" sur les appareils des utilisateurs. Nous cherchons à déterminer si l'attribut isFallbackAdapter de GPUAdapter peut être obsolète et supprimé. Voir Intention d'expédition.

Amélioration du temps de compilation des nuanceurs sur D3D12

L'équipe Chrome continue d'améliorer Tint, le compilateur de langage de nuanceurs WebGPU, en ajoutant une représentation intermédiaire (IR) pour les appareils compatibles avec WebGPU avec le backend D3D12. Ce RI, placé entre l'arbre syntaxique abstrait (AST) de Tint et le programme d'écriture du 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 pour traduire les nuanceurs WGSL d'Unity en HLSL.

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

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

Enregistrer et copier des images du canevas

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é l'option "Enregistrer l'image sous…" dans le menu contextuel.

Supprimer les restrictions du mode de compatibilité

La fonctionnalité expérimentale "core-features-and-limits", lorsqu'elle est disponible sur un GPUDevice, lève toutes les restrictions du mode de compatibilité (fonctionnalités et limites) lorsque l'indicateur chrome://flags/#enable-unsafe-webgpu est activé. Consultez 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 d'un "paramètre par défaut du cœur", ce qui revient à utiliser l'option featureLevel: "core". De plus, appeler requestDevice() sans requiredFeatures ni requiredLimits demande un GPUDevice avec les capacités par défaut du GPUAdapter.

Les adaptateurs par défaut du cœur prennent toujours en charge la fonctionnalité "core-features-and-limits", qui est automatiquement activée sur les GPUDevices créés à partir d'eux. Pour les adaptateurs par défaut de compatibilité, la fonctionnalité "core-features-and-limits" peut être prise en charge et peut être demandée sur les GPUDevices créés à partir de ceux-ci. Les deux types d'adaptateurs peuvent également prendre en charge des fonctionnalités telles que "float32-blendable", qui est facultative dans les modes Core et Compatibilité.

L'exemple suivant concerne une application qui nécessite "float32-blendable" et qui prend en charge 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 expérimentaux featureLevel et isCompatibilityMode de GPUAdapter ont été supprimés au profit de la fonctionnalité "core-features-and-limits". Consultez le problème 395855516.

Mises à jour de l'Aube

L'énumération callback status InstanceDropped a été renommé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 être en cours d'exécution. Le nouveau nom est plus général, au cas où un autre mécanisme de résiliation serait ajouté ultérieurement. Consultez 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 dépilée a été renommée wgpu::PopErrorScopeStatus::Error (qui est également plus généralement applicable). Le rappel inclut désormais un message d'explication de l'erreur correspondante pour faciliter le débogage. Consultez le problème 369.

Il ne s'agit que de quelques-uns des points clés. 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