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 depuis le 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 les informations GPUAdapter du backend OpenGL ES sur l'appareil Android.
Informations sur l'adaptateur OpenGL ES sur webgpureport.org

Comme cette fonctionnalité est encore en phase expérimentale, vous devez effectuer les étapes suivantes :

  1. Activez les indicateurs Chrome suivants : "Unsafe WebGPU Support" (Compatibilité WebGPU non sécurisée), "WebGPU Developer Features" (Fonctionnalités pour les développeurs WebGPU) et "Enable command line on non-rooted devices" (Activer la ligne de commande sur les appareils non rootés).
  2. Activez le débogage USB sur votre appareil Android.
  3. Connectez votre appareil Android à votre poste de travail, exécutez adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' pour préférer le backend OpenGL ES à Vulkan, puis redémarrez Chrome.

Attribut info de GPUAdapter

Il est désormais possible d'obtenir des informations d'identification sur un adaptateur de manière synchrone avec l'attribut GPUAdapter info. Auparavant, l'appel de la méthode asynchrone GPUAdapter requestAdapterInfo() était le seul moyen d'obtenir des informations sur l'adaptateur. Toutefois, requestAdapterInfo() a été supprimée de la spécification WebGPU et le sera également de Chrome plus tard cette 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 le 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 permettre aux tas WebAssembly d'être 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 d'encodeur de commandes

Certaines erreurs de validation générées par les encodeurs de commandes seront désormais associées à des informations contextuelles améliorées. Par exemple, la tentative de démarrage d'un pass de calcul alors qu'un pass de rendu était encore ouvert entraînait 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)

Cela décrit la raison de l'erreur, mais n'indique pas quel appel a réellement provoqué l'erreur de validation. Le message d'erreur suivant montre l'amélioration apportée, qui inclut la commande ayant déclenché l'erreur. Consultez la modification 192245.

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

Mises à jour 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'obsolescence. Voir le problème 290.

Les utilisations de textures compatibles d'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 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