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 con WebGPU experimental en Chrome para Android. Esto es particularmente útil para 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 un dispositivo Android.
Información sobre el adaptador OpenGL ES en webgpureport.org

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

  1. Habilita las siguientes marcas de Chrome: "Unsafe WebGPU Support", "WebGPU Developer Features" y "Enable command line on non-root devices".
  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 dar prioridad al backend de OpenGL ES en lugar de Vulkan y reinicia Chrome.

Atributo de información de GPUAdapter

Ahora es posible obtener información de identificación sobre un adaptador de manera síncrona con el atributo info de GPUAdapter. Anteriormente, llamar al método requestAdapterInfo() asíncrono de GPUAdapter era la única forma de obtener información del adaptador. Sin embargo, se quitó requestAdapterInfo() de las especificaciones de WebGPU y se quitará de Chrome más adelante este año para que los desarrolladores web tengan tiempo suficiente para realizar la transición necesaria. Consulta el siguiente ejemplo, Estado de Chrome y el error 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.

Errores del codificador de comandos mejorados

Algunos errores de validación generados desde los codificadores de comandos ahora tendrán información contextual mejorada. Por ejemplo, si se intentaba iniciar un pase de cómputos mientras uno de renderización aún estaba abierto, se produjo 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, sin embargo, no indica qué llamada causó realmente 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 del amanecer

La API de C de webgpu.h ya no expone wgpuSurfaceGetPreferredFormat(), el equivalente de 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 texturas 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 abarca solo algunos de los aspectos más destacados. Consulta la lista exhaustiva de confirmaciones.

Novedades de WebGPU

Una lista de todo lo que se ha abordado en la serie Novedades de WebGPU.

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