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 solicitas 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 de informes 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 está en etapa experimental, deberás realizar los siguientes pasos:

  1. Habilita los siguientes parámetros de Chrome: "Unsafe WebGPU Support", "WebGPU Developer Features" y "Enable command line on non-rooted devices".
  2. Habilita la depuración por USB en tu dispositivo Android.
  3. Conecta tu dispositivo Android a la 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 asíncrono requestAdapterInfo() 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 a los desarrolladores web el tiempo suficiente para realizar la transición necesaria. Consulta el siguiente ejemplo, Chrome Status 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 admitir que los montones de WebAssembly se pasen directamente a WebGPU, los tamaños de los siguientes argumentos de BufferSource ya no están restringidos a 2 GB: dynamicOffsetsData en setBindGroup(), fuente data en writeBuffer() y fuente data Pin writeTexture(). Consulta el problema 339049388.

Se mejoraron los errores del codificador de comandos

Algunos errores de validación que se generan a partir de 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 generaba 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. El siguiente error muestra los mensajes mejorados que incluyen 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 de 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 admitidos 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 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 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