Nouveautés de WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

Publié le : 17 juin 2026

Immédiats

Les valeurs immédiates, également appelées constantes push ou constantes racine, vous permettent de transmettre de petites quantités de données qui changent fréquemment directement aux nuanceurs. Ce processus évite la surcharge liée à la création de tampons GPU et à la gestion des groupes de liaison.

La mise à jour des liaisons de tampon uniforme pour les données qui changent à chaque appel de dessin (comme un ID d'objet unique ou une matrice de transformation 3D pour des centaines d'objets) crée une surcharge du processeur. Injectez des valeurs brutes directement dans l'encodeur de pass pour éviter d'écrire des données en mémoire et de gérer les recherches GPU.

Les immédiats offrent un chemin rapide pour les variables minuscules et très dynamiques. Utilisez des tampons uniformes ou de stockage pour les grands tableaux de données, les structures d'éclairage complexes ou les matrices volumineuses.

Dans votre nuanceur WGSL, l'espace d'adressage <immediate> vous permet de définir des données immédiates qui peuvent être transmises directement à l'encodeur de pass. Appelez setImmediates() en JavaScript avant un appel de dessin pour fournir ces données sans lier de groupe. Pour vérifier la compatibilité, détectez la fonctionnalité d'extension du langage WGSL immediate_address_space via navigator.gpu.wgslLanguageFeatures. Consultez l'exemple suivant et l'intention d'expédition.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

Pour en savoir plus sur cette fonctionnalité, consultez WebGPUFundamentals Immediates.

Merci à l'équipe Microsoft pour ses contributions !

Validation plus stricte pour les pièces jointes temporaires

WebGPU a récemment introduit l'indicateur TRANSIENT_ATTACHMENT GPUTextureUsage, qui permet aux développeurs de créer des pièces jointes de rendu temporaires, telles que des tampons de profondeur-stencil ou des cibles multisamples. Ces pièces jointes restent dans la mémoire cache rapide du processeur sans allouer de VRAM principale.

Les mises à jour récentes (#6248 et #6267) affinent les règles de validation pour éviter toute utilisation abusive de ces pièces jointes de texture à faible consommation de mémoire :

  • En raison des limitations de la plate-forme, viewFormats doit être un tableau vide lors de la création de textures transitoires. Les formats de vue alternatifs ne sont pas nécessaires, car les textures transitoires ne sont utilisées que pour le rendu.
  • La création d'une vue de texture ne réduit pas les indicateurs d'utilisation. Lorsque vous appelez createView() sur une texture éphémère, la vue ne peut pas modifier son utilisation.
  • Les pièces jointes temporaires ne peuvent pas être utilisées comme resolveTarget dans un pass de rendu.

Mises à jour de Dawn

Il ne s'agit que de quelques-uns des principaux points forts. 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 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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