Nouveautés du GPU Web (Chrome 115)

François Beaufort
François Beaufort

Extensions de langage WGSL acceptées

Le membre wgslLanguageFeatures de l'objet GPU liste les noms des extensions de langage WGSL compatibles. Les extensions de langage WGSL compatibles sont automatiquement activées. Vous n'avez donc pas besoin d'en demander explicitement. Cette liste est actuellement vide, mais vous pouvez vous attendre à en voir beaucoup à l'avenir (par exemple, do-while loops). Consultez issue dawn:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Compatibilité expérimentale avec Direct3D 11

L'équipe Chromium travaille à l'ajout de la compatibilité WebGPU pour Direct3D 11. Vous pouvez désormais l'expérimenter en local en exécutant Chrome sur Windows avec les indicateurs de ligne de commande --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Consultez le problème dawn:1705.

Obtenir un GPU discret par défaut sur secteur

Sur les appareils macOS à double GPU, si requestAdapter() est appelé sans option powerPreference, le GPU discret est renvoyé lorsque l'appareil de l'utilisateur est branché sur le secteur. Sinon, le GPU intégré est renvoyé. Consultez la modification 4499307.

Améliorer l'expérience des développeurs

Nouveaux avertissements dans les outils de développement

Si la clé depth est utilisée dans un GPUExtend3DDict, un avertissement s'affiche dans la console des outils de développement, car la clé correcte est depthOrArrayLayers. Consultez le problème chromium:1440900.

Un avertissement s'affiche également si un GPUBlendComponent comporte à la fois des membres explicites et des membres par défaut. Consultez le problème dawn:1785.

Bien que les distributions et les tirages de taille nulle soient valides, un avertissement encourage les développeurs à les éviter dans la mesure du possible. Consultez le problème dawn:1786.

Messages d'erreur améliorés

Un message d'erreur amélioré s'affiche désormais lorsque vous utilisez une GPUCommandEncoder si finish() a déjà été appelé. Voir issue dawn:1736.

Lorsque vous envoyez des tampons de commandes avec des objets détruits, les libellés des tampons de commandes utilisés dans submit() sont désormais visibles dans le message d'erreur. Consultez le problème dawn:1747.

La partie non valide de l'état du stencil de profondeur est désormais spécifiée dans le message d'erreur lors de la validation de depthStencil. Consultez le problème dawn:1735.

Le message d'erreur de validation minBindingSize indique désormais le groupe et le numéro de la liaison dont la validation a échoué, ainsi que le tampon. Consultez le problème dawn:1604.

Les messages d'erreur renvoyés par la méthode mapAsync() sur un objet GPUBuffer ont été améliorés pour aider les développeurs lors du débogage. Consultez l'exemple ci-dessous et le problème chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

Libellés dans les outils de débogage macOS

Le bouton bascule de débogage use_user_defined_labels_in_backend vous permet de transférer les libellés d'objet au backend afin qu'ils puissent être vus dans des outils de débogage spécifiques à la plate-forme tels que RenderDoc, PIX ou Instruments. Désormais, vous bénéficiez d'une meilleure expérience de débogage sur macOS lorsque vous l'activez pour le débogage. Consultez le problème dawn:1784.

Capture d'écran de l'application Instruments sur macOS avec des libellés personnalisés provenant de WebGPU.
Libellés définis par l'utilisateur dans l'application Instruments sur macOS.

Enregistrer HLSL en cas d'échec de la compilation

Le bouton bascule de débogage dump_shaders vous permet de consigner les nuanceurs WGSL d'entrée et les nuanceurs de backend traduits. Désormais, lorsque vous l'activez pour le débogage, le HLSL est vidé en cas d'échec de la compilation. Consultez le problème dawn:1681.

Mises à jour de l'Aube

Annuler la définition du tampon de sommets

Transmettre nullptr plutôt qu'un wgpu::Buffer à SetVertexBuffer() sur wgpu::RenderPassEncoder ou wgpu::RenderBundleEncoder vous permet de supprimer un tampon de vertex précédemment défini dans un emplacement donné. Consultez le problème dawn:1675.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

Pièces jointes temporaires

Vous pouvez créer des pièces jointes qui permettent aux opérations de passe de rendu de rester dans la mémoire des tuiles, ce qui évite le trafic VRAM et potentiellement l'allocation VRAM pour les textures en définissant l'utilisation wgpu::TextureUsage::TransientAttachment. Cette fonctionnalité n'est disponible que pour Metal et Vulkan. Consultez le problème dawn: 1695.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

Compiler sans depot_tools

Une nouvelle option CMake DAWN_FETCH_DEPENDENCIES vous permet d'extraire les dépendances Dawn à l'aide d'un script Python qui lit les fichiers DEPS au lieu d'exiger l'installation de depot_tools par tous les projets qui en dépendent. Consultez la modification 131750.

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