Nouveautés de WebGPU (Chrome 127)

François Beaufort
François Beaufort

Compatibilité expérimentale pour 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 le problème dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
La page du rapport WebGPU affiche des informations sur GPUAdapter provenant du backend OpenGL ES sur un 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é", "Fonctionnalités pour les développeurs WebGPU" et "Activer la ligne de commande sur les appareils qui ne sont pas 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 d'informations GPUAdapter

Vous pouvez désormais obtenir des informations d'identification sur un adaptateur de manière synchrone à l'aide de l'attribut info de GPUAdapter. Auparavant, appeler la méthode requestAdapterInfo() asynchrone de GPUAdapter était le seul moyen d'obtenir des informations sur l'adaptateur. Cependant, requestAdapterInfo() a été supprimé de la spécification WebGPU et sera supprimé de Chrome dans le courant de l'année afin de laisser suffisamment de temps aux développeurs Web pour effectuer la transition nécessaire. Consultez l'exemple suivant, État de Chrome, et problème 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 tenir compte du fait que les tas de mémoire WebAssembly sont transmis directement à WebGPU, la taille des arguments BufferSource suivants n'est plus limitée à 2 Go: dynamicOffsetsData dans setBindGroup(), source data dans writeBuffer() et source data Pin writeTexture(). Consultez 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 commande disposent 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)

Il indique la raison de l'erreur, mais n'indique pas quel appel est à l'origine de l'erreur de validation. L'erreur suivante illustre les améliorations apportées aux messages, qui incluent la commande qui a 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 du 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. Consultez le problème 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. Consultez le problème 301.

Cette présentation ne porte que sur certains 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 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