Novedades de WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

Publicado: 17 de junio de 2026

Valores inmediatos

Los inmediatos, también conocidos como constantes de envío o constantes raíz, te permiten pasar pequeñas cantidades de datos que cambian con frecuencia directamente a los sombreadores. Este proceso omite la sobrecarga de crear búferes de GPU y administrar grupos de vinculación.

Actualizar las vinculaciones de búferes uniformes para los datos que cambian en cada llamada de dibujo (como un ID de objeto único o una matriz de transformación 3D para cientos de objetos) genera una sobrecarga de la CPU. Inserta valores sin procesar directamente en el codificador de pases para evitar escribir datos en la memoria y administrar las búsquedas en la GPU.

Los inmediatos proporcionan una ruta rápida para variables pequeñas y muy dinámicas. Usa búferes uniformes o de almacenamiento para grandes arrays de datos, estructuras de iluminación complejas o matrices masivas.

En tu sombreador WGSL, el espacio de direcciones <immediate> te permite definir datos inmediatos que se pueden pasar directamente al codificador de pases. Llama a setImmediates() en JavaScript antes de una llamada de dibujo para proporcionar estos datos sin vincular un grupo. Para verificar la compatibilidad, detecta la función de la extensión del lenguaje immediate_address_space WGSL a través de navigator.gpu.wgslLanguageFeatures. Consulta el siguiente ejemplo y la intención de lanzamiento.

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();

Para obtener más información sobre esta función, consulta WebGPUFundamentals Immediates.

¡Felicitaciones al equipo de Microsoft por sus contribuciones!

Validación más estricta para los archivos adjuntos transitorios

Recientemente, WebGPU introdujo la marca TRANSIENT_ATTACHMENT GPUTextureUsage, que permite a los desarrolladores crear archivos adjuntos de renderización temporales, como búferes de profundidad-stencil o destinos de muestreo múltiple. Estos archivos adjuntos permanecen en la memoria de mosaico rápida del chip sin asignar VRAM principal.

Las actualizaciones recientes (#6248 y #6267) refinan las reglas de validación para evitar el uso inadecuado de estos archivos adjuntos de texturas que ahorran memoria:

  • Debido a las limitaciones de la plataforma, viewFormats debe ser un array vacío cuando se crean texturas transitorias. No se necesitan formatos de vista alternativos porque las texturas transitorias son solo para la renderización.
  • Crear una vista de textura no reduce las marcas de uso. Cuando se llama a createView() en una textura transitoria, la vista no puede cambiar su uso.
  • Los archivos adjuntos transitorios no se pueden usar como resolveTarget dentro de un pase de renderización.

Actualizaciones de Dawn

Esto solo abarca algunos de los aspectos más destacados. Consulta la lista exhaustiva de confirmaciones.

Novedades de WebGPU

Una lista de todo lo que se abordó en la serie Novedades de WebGPU

Chrome 153-154

Chrome 151 y 152

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