Novedades de WebGPU (Chrome 127)

François Beaufort
François Beaufort

Compatibilidad experimental con OpenGL ES en Android

Ahora puedes acceder a un GPUAdapter desde el backend de OpenGL ES cuando solicites el modo de compatibilidad experimental de WebGPU en Chrome para Android. Esto es especialmente útil para los dispositivos Android que no admiten Vulkan 1.1 o versiones posteriores. Consulta el siguiente ejemplo y el problema dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
La página del informe de WebGPU muestra información de GPUAdapter del backend de OpenGL ES en el dispositivo Android.
Información del adaptador de OpenGL ES en webgpureport.org

Como esta función aún se encuentra en una etapa experimental, deberás realizar los siguientes pasos:

  1. Habilita las siguientes marcas de Chrome: "Compatibilidad no segura con WebGPU", "Funciones para desarrolladores de WebGPU" y "Habilitar la línea de comandos en dispositivos sin permisos de administrador".
  2. Habilita la depuración por USB en tu dispositivo Android.
  3. Conecta tu dispositivo Android a tu estación de trabajo, ejecuta adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' para preferir el backend de OpenGL ES en lugar de Vulkan y reinicia Chrome.

Atributo info de GPUAdapter

Ahora se puede obtener información de identificación sobre un adaptador de forma síncrona con el atributo info de GPUAdapter. Anteriormente, llamar al método requestAdapterInfo() asincrónico de GPUAdapter era la única forma de obtener información del adaptador. Sin embargo, requestAdapterInfo() se quitó de la especificación de WebGPU y se quitará de Chrome más adelante este año para darles tiempo suficiente a los desarrolladores web para realizar la transición necesaria. Consulta el siguiente ejemplo, Estado de Chrome y el problema 335383516.

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

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Mejoras en la interoperabilidad de WebAssembly

Para adaptarse a los montos de WebAssembly que se pasan directamente a WebGPU, los tamaños de los siguientes argumentos BufferSource ya no se restringen a 2 GB: dynamicOffsetsData en setBindGroup(), data de origen en writeBuffer() y Pin de origen data writeTexture(). Consulta el problema 339049388.

Se mejoraron los errores del codificador de comandos

Algunos errores de validación generados por los codificadores de comandos ahora tendrán información contextual mejorada. Por ejemplo, intentar iniciar un pase de procesamiento mientras un pase de renderización aún estaba abierto generó el siguiente error.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Esto describe el motivo del error, pero no indica qué llamada causó el error de validación. En el siguiente error, se muestra el mensaje mejorado, que incluye el comando que activó el error. Consulta el cambio 192245.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Actualizaciones de Dawn

La API de C webgpu.h ya no expone wgpuSurfaceGetPreferredFormat(), el equivalente en C de wgpu::Surface::GetPreferredFormat() de Dawn. En su lugar, usa wgpu::Surface::GetCapabilities() para obtener la lista de formatos compatibles y, luego, usa formats[0] para obtener el formato de textura preferido para esta superficie. Mientras tanto, llamar a wgpu::Surface::GetPreferredFormat() emite una advertencia de baja. Consulta el problema 290.

Los usos de textura admitidos de una superficie ahora están disponibles a través de wgpu::SurfaceCapabilities::usages cuando se llama a wgpu::Surface::GetCapabilities(). Se espera que siempre incluyan wgpu::TextureUsage::RenderAttachment. Consulta el problema 301.

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 analizó en la serie Novedades de WebGPU.

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