Nouveautés du GPU Web (Chrome 115)

François Beaufort
François Beaufort

Extensions de langage WGSL compatibles

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 une explicitement. Cette liste est actuellement vide, mais vous pouvez vous attendre à de nombreuses autres (do-while loops, par exemple). Consultez l'article dawn:1777.

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

Prise en charge expérimentale de Direct3D 11

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

Obtenir un GPU distinct par défaut sur une alimentation 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 alimenté par courant alternatif. Sinon, le GPU intégré est renvoyé. Consultez la modification 4499307.

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

Nouveaux avertissements DevTools

Si la clé depth est utilisée dans un GPUExtend3DDict, un avertissement s'affiche dans la console DevTools, car la clé appropriée est depthOrArrayLayers. Consultez le problème chromium:1440900.

Un avertissement s'affiche également si une GPUBlendComponent contient des membres explicites et par défaut. Voir le problème dawn:1785.

Même si les distributions et les dessins de taille nulle sont valides, un avertissement encourage les développeurs à les éviter dans la mesure du possible. Voir le problème dawn:1786.

Amélioration des messages d'erreur

Un message d'erreur amélioré est désormais fourni lorsque vous utilisez une GPUCommandEncoder si finish() a déjà été appelé. Voir problème 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 tampon de profondeur est désormais spécifiée dans le message d'erreur lors de la validation de depthStencil. Voir 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. Voir 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 l'issue 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 de débogage use_user_defined_labels_in_backend vous permet de transférer les libellés d'objets vers le backend afin qu'ils soient visibles dans les outils de débogage spécifiques à la plate-forme, tels que RenderDoc, PIX ou Instruments. Désormais, une meilleure expérience de débogage est proposée sur macOS lorsque vous l'activez pour le débogage. Voir le problème dawn:1784

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

Enregistrer le HLSL en cas d'échec de la compilation

Le bouton 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 code HLSL est généré si la compilation échoue. Voir le problème dawn:1681

Informations Dawn

Définir le tampon de sommets

Transmettre nullptr plutôt qu'un wgpu::Buffer à SetVertexBuffer() sur wgpu::RenderPassEncoder ou wgpu::RenderBundleEncoder vous permet de désactiver un tampon de sommets précédemment défini dans un emplacement donné. Voir 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 passage de rendu de rester dans la mémoire de tuile, ce qui évite le trafic VRAM et, potentiellement, l'allocation de VRAM pour les textures en définissant l'utilisation de wgpu::TextureUsage::TransientAttachment. Cette fonctionnalité n'est compatible qu'avec Metal et Vulkan. Voir aube du problème: 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.

Compilation sans depot_tools

Une nouvelle option CMake DAWN_FETCH_DEPENDENCIES vous permet de récupérer 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 éléments abordés 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