Novedades de WebGPU (Chrome 153-154)

François Beaufort
François Beaufort

Publicación: 15 de septiembre de 2026

Extensión buffer_view de WGSL

La extensión de lenguaje WGSL buffer_view permite que los datos de una variable uniforme, de almacenamiento o de grupo de trabajo se interpreten como varios tipos diferentes. Esto tiene una amplia gama de utilidades, desde usos convencionales de type-punning hasta la partición de una variable en múltiples variables lógicas.

Para mayor seguridad y simplicidad en la implementación, solo se puede acceder a los tipos reinterpretados con las siguientes funciones integradas:

  • bufferView<T>() interpreta la memoria en un desplazamiento de bytes específico como un puntero al tipo T.
  • bufferArrayView<T>() crea un puntero de array delimitado con un recuento de elementos explícito.
  • bufferLength() devuelve el tamaño en bytes del búfer.

Esta extensión de lenguaje se puede detectar como compatible con JavaScript usando navigator.gpu.wgslLanguageFeatures. Se recomienda usar una directiva requires para indicar la posibilidad de no portabilidad con requires buffer_view en la parte superior del código del sombreador WGSL. Consulta el siguiente ejemplo de WGSL y la intención de lanzamiento.

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

También puedes consultar la propuesta de vista de búfer para obtener más detalles y probar el ejemplo de Wireframe WebGPU.

Extensión swizzle_assignment de WGSL

En respuesta a una de las funciones de la comunidad más solicitadas, la extensión swizzle_assignment de WGSL te permite escribir directamente en swizzles de vectores, lo que te permite actualizar varios componentes en una sola instrucción. Reduce drásticamente el código estándar y mejora la legibilidad del sombreador, a la vez que alinea WGSL con otros lenguajes de sombreado.

Esta extensión de lenguaje se puede detectar como compatible con JavaScript usando navigator.gpu.wgslLanguageFeatures. Se recomienda usar una directiva requires para indicar la posibilidad de no portabilidad con requires swizzle_assignment en la parte superior del código del sombreador WGSL. Consulta el siguiente ejemplo de WGSL y la intención de lanzamiento.

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires swizzle_assignment;

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

Actualizaciones de la extensión de WGSL

La extensión de lenguaje texture-formats-tier1, aunque se admite en el código WGSL, antes no se asignaba correctamente a navigator.gpu.wgslLanguageFeatures (como texture_formats_tier1) en JavaScript. Este problema de asignación ya se resolvió. Consulta Chromium CL 8159562.

La extensión de lenguaje subgroups ahora se habilita automáticamente cuando subgroup_size_control está habilitado en WGSL. Consulta el problema dawn:545285663.

Actualizaciones de Dawn

La nueva función experimental wgpu::FeatureName::BufferMapWriteExtendedUsages te permite crear un búfer con wgpu::BufferUsage::MapWrite combinado con cualquier otro wgpu::BufferUsage, excepto wgpu::BufferUsage::MapRead, para escribir directamente en un búfer asignable que también se pueda usar en la GPU, lo que elimina el búfer de transferencia y la copia adicional en los backends de Vulkan y D3D12. Para obtener más información, consulta Buffer Map Write Extended Usages y el problema dawn:386255678.

Ahora puedes usar las vinculaciones de webgpu_cpp.h sobre cualquier implementación de webgpu.h en lugar de estar vinculado a la variante de Dawn con el uso de webgpu_upstream_cpp_headers nuevos. Consulta el problema 596 de webgpu-headers.

Ahora Dawn requiere macOS 13.0 o versiones posteriores. Consulta Dawn CL 334415.

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

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