Fonctionnalités pour les développeurs WebGPU

François Beaufort
François Beaufort

Publié le 3 juin 2025

L'implémentation de l'API WebGPU de Chrome inclut des fonctionnalités destinées uniquement au développement et aux tests. Ces fonctionnalités ne font pas partie de la spécification WebGPU standard. N'utilisez pas ces fonctionnalités en production.

Ce document explique comment activer les fonctionnalités pour les développeurs WebGPU et fournit une liste complète.

Conditions préalables

Pour activer les fonctionnalités pour les développeurs WebGPU dans Chrome, procédez comme suit :

  1. Activez l'indicateur "WebGPU Developer Features" (Fonctionnalités pour les développeurs WebGPU) sur chrome://flags/#enable-webgpu-developer-features.
  2. Redémarrez le navigateur Chrome.

Désactiver la quantification des requêtes de code temporel

Les requêtes d'horodatage permettent aux applications WebGPU de mesurer précisément (à la nanoseconde près) le temps d'exécution des commandes GPU lors des passes de calcul et de rendu. Ces requêtes sont essentielles pour analyser les performances et le comportement des charges de travail des GPU. Pour en savoir plus, consultez Requêtes d'horodatage dans les passes de calcul et de rendu.

En raison des préoccupations liées aux attaques par temporisation, les requêtes d'horodatage sont quantifiées avec une résolution de 100 microsecondes, ce qui constitue un bon compromis entre précision et sécurité. Cette quantification est automatiquement désactivée lorsque l'indicateur "Fonctionnalités pour les développeurs WebGPU" est activé.

Informations étendues sur l'adaptateur

Pour mieux comprendre l'adaptateur utilisé, GPUAdapterInfo expose les attributs suivants :

  • L'attribut device (standardisé) est un identifiant d'adaptateur spécifique au fournisseur.
  • L'attribut description (standardisé) est une chaîne lisible qui fournit des informations sur l'adaptateur.
  • L'attribut driver (non standardisé) est une chaîne de texte décrivant le pilote.
  • L'attribut backend (non standardisé) indique le backend graphique, tel que "WebGPU", "D3D11", "D3D12", "metal", "vulkan", "openGL", "openGLES" ou "null".
  • L'attribut type (non standardisé) identifie le type de GPU : "discrete GPU", "integrated GPU", "CPU" ou "unknown".
  • L'attribut d3dShaderModel (non standardisé) spécifie le numéro de modèle de nuanceur D3D maximal accepté. Par exemple, 62 indique la compatibilité avec HLSL SM 6.2.
  • L'attribut vkDriverVersion (non standardisé) correspond à la version du pilote Vulkan spécifiée par le fournisseur.
  • L'attribut powerPreference (non standardisé) est "low-power" ou "high-performance", en fonction de GPUPowerPreference dans GPURequestAdapterOptions.

Pour anticiper les limites de mémoire lors de l'allocation de grandes quantités pendant le développement de votre application, GPUAdapterInfo expose des informations non standardisées memoryHeaps telles que la taille et le type de tas de mémoire disponibles sur l'adaptateur.

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

for (const { size, properties } of adapter.info.memoryHeaps) {
  console.log(size); // memory heap size in bytes
  if (properties & GPUHeapProperty.DEVICE_LOCAL)  { /* ... */ }
  if (properties & GPUHeapProperty.HOST_VISIBLE)  { /* ... */ }
  if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
  if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
  if (properties & GPUHeapProperty.HOST_CACHED)   { /* ... */ }
}

Option de compilation de module de nuanceur "strict math"

Le GPUShaderModuleDescriptor inclut une option booléenne non standardisée strictMath, qui active ou désactive la précision mathématique stricte lors de la compilation du module de nuanceur. Cette option est compatible avec Metal et Direct3D. Lorsque strictMath est activé, le compilateur respecte des règles mathématiques précises. À l'inverse, la désactivation permet au compilateur d'optimiser les nuanceurs en :

  • en ignorant la possibilité de valeurs NaN et Infinity.
  • Traitement de -0 comme +0.
  • Remplacer la division par une multiplication plus rapide par l'inverse.
  • Réorganiser les opérations en fonction des propriétés associatives et distributives.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const code = `
  // Examines the bit pattern of the floating-point number to
  // determine if it represents a NaN according to the IEEE 754 standard.
  fn isNan(x : f32) -> bool {
    bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
    bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
    return ones_exp && non_zero_sig;
  }
  // ...
`;

// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });

Importer une vidéo sans copie

L'attribut booléen non standardisé GPUExternalTexture isZeroCopy vous indique si la GPU a accédé directement à la vidéo importée avec importExternalTexture() sans avoir besoin d'une copie intermédiaire.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const video = document.querySelector('video');
const externalTexture = device.importExternalTexture({ source: video });

if (externalTexture.isZeroCopy) {
  console.log('Video frame was accessed directly by the GPU');
}