Novedades de WebGPU (Chrome 142)

François Beaufort
François Beaufort

Publicado: 22 de octubre de 2025

Se extendieron las capacidades de compatibilidad con formatos de texturas

La nueva función de GPU "texture-formats-tier1" permite a los desarrolladores portar contenido existente a la Web sin necesidad de volver a escribirlo para las capacidades inferiores de WebGPU. Admite nuevos formatos de texturas "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" y "rgba16snorm" con capacidades de renderización de archivos adjuntos, combinación y muestreo múltiple, y acceso a texturas de almacenamiento "read-only" o "write-only". También permite los formatos de textura "r8snorm", "rg8snorm" y "rgba8snorm" existentes con capacidades de unión, renderización, muestreo múltiple y resolución de archivos adjuntos de renderización. También se pueden usar más formatos de textura con el acceso a la textura de almacenamiento "read-only" o "write-only".

La nueva función de GPU "texture-formats-tier2" habilita el acceso a texturas de almacenamiento "read-write" para formatos específicos, lo que es fundamental para proyectos como la portabilidad de Unreal Engine a la Web. Ten en cuenta que habilitar "texture-formats-tier2" durante la creación del dispositivo habilita automáticamente "texture-formats-tier1".

Consulta el siguiente fragmento y la entrada de ChromeStatus.

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

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

Muchas gracias a la gente de Intel por su trabajo.

Índice de primitiva en WGSL

El primitive_index es un valor integrado de WGSL que identifica de forma única la primitiva actual (por ejemplo, un punto, una línea o un triángulo) que procesa un sombreador de fragmentos. Comienza en 0, aumenta en 1 después de procesar cada primitiva y se restablece en 0 entre cada instancia dibujada.

Cuando la función "primitive-index" está disponible en un GPUAdapter, solicita un GPUDevice con esta función para obtener compatibilidad con el índice de primitivas en WGSL y habilita explícitamente esta extensión en tu código WGSL con enable primitive_index;. Una vez habilitado, usa el valor entero integrado primitive_index en tu sombreador de fragmentos para acceder a los datos por primitiva o realizar una lógica que varíe para cada forma geométrica distinta que se renderiza, por ejemplo.

En el siguiente fragmento de código, se muestra un sombreador de fragmentos que renderiza la segunda primitiva en rojo y todas las demás en azul.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

Para obtener más información, consulta el ejemplo de selección de primitivas y la entrada de chromestatus.

Los triángulos del modelo de tetera en 3D se colorean según sus valores de índice primitivo.
El ejemplo de selección de primitivas en el modo "índices de primitivas".

Actualizaciones de Dawn

La variable DAWN_BUILD_MONOLITHIC_LIBRARY de CMake que se usa para controlar el tipo de biblioteca monolítica que se compila cambió su valor predeterminado de OFF a STATIC, de modo que, de forma predeterminada, se generarán los archivos libwebgpu*.

Dawn ahora controla correctamente el valor predeterminado de wgpu::PresentMode::Undefined cuando se configura un wgpu::Surface. Consulta el problema 441410668.

Esto solo abarca algunos de los aspectos destacados clave. Consulta la lista exhaustiva de confirmaciones.

Novedades de WebGPU

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

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