Nouveautés de WebGPU (Chrome 127)

François Beaufort
François Beaufort

Compatibilité expérimentale avec OpenGL ES sur Android

Vous pouvez désormais accéder à un GPUAdapter à partir du backend OpenGL ES lorsque vous demandez le mode de compatibilité WebGPU expérimental dans Chrome pour Android. Cela est particulièrement utile pour les appareils Android qui ne sont pas compatibles avec Vulkan 1.1 ou version ultérieure. Consultez l'exemple suivant et l'problème dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
La page du rapport WebGPU affiche les informations GPUAdapter du backend OpenGL ES sur l'appareil Android.
Informations sur l'adaptateur OpenGL ES sur webgpureport.org

Cette fonctionnalité étant encore au stade expérimental, procédez comme suit:

  1. Activez les indicateurs Chrome suivants: "Compatibilité avec WebGPU non sécurisée", "Fonctionnalités WebGPU pour les développeurs" et "Activer la ligne de commande sur les appareils non en mode root".
  2. Activez le débogage USB sur votre appareil Android.
  3. Connectez votre appareil Android à votre station de travail, exécutez adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' pour privilégier le backend OpenGL ES à Vulkan, puis redémarrez Chrome.

Attribut "info" de GPUAdapter

Vous pouvez désormais obtenir des informations d'identification sur un adaptateur de manière synchrone avec l'attribut info GPUAdapter. Auparavant, l'appel de la méthode requestAdapterInfo() asynchrone de GPUAdapter était le seul moyen d'obtenir des informations sur l'adaptateur. Toutefois, requestAdapterInfo() a été supprimé de la spécification WebGPU et sera supprimé de Chrome plus tard cette année pour laisser aux développeurs Web suffisamment de temps pour effectuer la transition nécessaire. Consultez l'exemple suivant, l'état de Chrome et l'erreur 335383516.

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

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Améliorations de l'interopérabilité WebAssembly

Pour prendre en charge les tas WebAssembly transmis directement à WebGPU, les tailles des arguments BufferSource suivants ne sont plus limitées à 2 Go: dynamicOffsetsData dans setBindGroup(), la source data dans writeBuffer() et l'épingle de source data writeTexture(). Voir le problème 339049388.

Amélioration des erreurs liées à l'encodeur de commande

Certaines erreurs de validation générées par les encodeurs de commandes bénéficieront désormais d'informations contextuelles améliorées. Par exemple, la tentative de démarrage d'une passe de calcul alors qu'une passe de rendu était encore ouverte a généré l'erreur suivante.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Cette information décrit la raison de l'erreur, mais n'indique pas quel appel a réellement causé l'erreur de validation. L'erreur suivante affiche le message amélioré, qui inclut la commande ayant déclenché l'erreur. Voir la modification 192245.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Actualités de l'aube

L'API C webgpu.h n'expose plus wgpuSurfaceGetPreferredFormat(), l'équivalent C de wgpu::Surface::GetPreferredFormat() de Dawn. Utilisez plutôt wgpu::Surface::GetCapabilities() pour obtenir la liste des formats compatibles, puis formats[0] pour obtenir le format de texture préféré pour cette surface. En attendant, l'appel de wgpu::Surface::GetPreferredFormat() émet un avertissement d'abandon. Voir l'article 290.

Les utilisations de texture acceptées pour une surface sont désormais disponibles via wgpu::SurfaceCapabilities::usages lors de l'appel de wgpu::Surface::GetCapabilities(). Ils doivent toujours inclure wgpu::TextureUsage::RenderAttachment. Voir le problème 301.

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