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 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 se encuentra en una etapa experimental, deberás realizar los siguientes pasos:

  1. Habilita las siguientes funciones experimentales 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 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 sobre Vulkan y reinicia Chrome.

Atributo de información de GPUAdapter

Ahora, la obtención de información de identificación sobre un adaptador se puede realizar de forma síncrona con el atributo info de GPUAdapter. Anteriormente, la única forma de obtener información del adaptador era llamar al método asíncrono requestAdapterInfo() de GPUAdapter. 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, el 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 montones de WebAssembly que se pasan 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.

Errores mejorados 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, si se intentaba iniciar un pase de cómputos mientras aún estaba abierto un pase de renderización, se producía 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 la mensajería mejorada 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 compatibles 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 abarcó en la serie Novedades de WebGPU.

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