Novedades de WebGPU (Chrome 136)

François Beaufort
François Beaufort

Fecha de publicación: 23 de abril de 2025

Atributo isFallbackAdapter de GPUAdapterInfo

El atributo booleano GPUAdapterInfo isFallbackAdapter indica si un GPUAdapter tiene limitaciones de rendimiento significativas a cambio de una compatibilidad más amplia, un comportamiento más predecible o una privacidad mejorada. Esta adición fue necesaria porque las bibliotecas que toman objetos GPUDevice proporcionados por el usuario no podían acceder a esta información a través del atributo adapterInfo en GPUDevice. Consulta el siguiente ejemplo y el problema 403172841.

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

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

Como Chrome aún no envía compatibilidad con adaptadores de resguardo, isFallbackAdapter siempre es falso en los dispositivos de los usuarios. Estamos investigando si el atributo isFallbackAdapter de GPUAdapter puede quedar obsoleto y quitarse. Consulta intención de envío.

Mejoras en el tiempo de compilación de sombreadores en D3D12

El equipo de Chrome sigue mejorando Tint, el compilador de lenguaje de sombreadores de WebGPU, con la adición de una representación intermedia (IR) para dispositivos que admiten WebGPU con el backend de D3D12. Este IR, ubicado entre el árbol de sintaxis abstracta (AST) de Tint y el escritor de backend de HLSL, hará que el compilador sea más eficiente y fácil de mantener, lo que beneficiará a los desarrolladores y a los usuarios. Las pruebas iniciales muestran que la nueva versión de Tint es hasta 10 veces más rápida cuando traduce los sombreadores WGSL de Unity a HLSL.

Un diagrama de flujo muestra el proceso de conversión del código del sombreador WGSL en instrucciones de GPU de bajo nivel.
Creación de la canalización de renderización en Windows.

Estas mejoras, a las que ya se puede acceder en Android, ChromeOS y macOS, se están expandiendo de forma progresiva a los dispositivos Windows que admiten WebGPU con el backend de D3D12. Consulta el problema 42251045.

Cómo guardar y copiar imágenes de lienzos

Los usuarios de Chrome ahora pueden hacer clic con el botón derecho en un lienzo de WebGPU y acceder a las opciones del menú contextual Guardar imagen como… o Copiar imagen. Consulta el problema 40902474.

La
El usuario seleccionó el menú contextual “Guardar imagen como…”.

Restricciones del modo de compatibilidad de Lift

La función experimental "core-features-and-limits", cuando está disponible en un GPUDevice, quita todas las restricciones del modo de compatibilidad (funciones y límites) cuando se habilita la marca chrome://flags/#enable-unsafe-webgpu. Consulta el problema 395855517.

Solicitar un GPUAdapter con la opción featureLevel: "compatibility" le indica al navegador que seleccione el modo de compatibilidad de WebGPU experimental. Si se realiza de forma correcta, el adaptador resultante tiene la configuración predeterminada de compatibilidad. De lo contrario, se produce un "error de configuración predeterminada del kernel", que es lo mismo que usar la opción featureLevel: "core". Además, llamar a requestDevice() sin requiredFeatures y requiredLimits solicita un GPUDevice con las capacidades predeterminadas de GPUAdapter.

Los adaptadores con configuración predeterminada de Core siempre admiten la función "core-features-and-limits" y se habilita automáticamente en los GPUDevices creados a partir de ellos. En el caso de los adaptadores que tienen compatibilidad predeterminada, es posible que la función "core-features-and-limits" sea compatible y se pueda solicitar en los GPUDevices creados a partir de ellos. Ambos tipos de adaptadores también pueden admitir funciones como "float32-blendable", que es opcional en los modos principal y de compatibilidad.

El siguiente ejemplo es para una aplicación que requiere "float32-blendable" y admite el uso de funciones principales si están disponibles, pero solo usa funciones de compatibilidad si no están disponibles.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

Se quitaron los atributos experimentales featureLevel y isCompatibilityMode de GPUAdapter en favor de la función "core-features-and-limits". Consulta el problema 395855516.

Actualizaciones de Dawn

Se cambió el nombre de la enumeración estado de devolución de llamada InstanceDropped a CallbackCancelled para aclarar que se canceló la devolución de llamada, pero es posible que el procesamiento en segundo plano asociado con el evento, como la compilación de la canalización, siga ejecutándose. El nuevo nombre es más aplicable en general, en caso de que se agregue otro mecanismo de cancelación más adelante. Consulta el problema 520.

Se cambió el nombre de la enumeración wgpu::PopErrorScopeStatus::EmptyStack que indica que no se pudo quitar la pila de alcance de error a wgpu::PopErrorScopeStatus::Error (que también es más aplicable en general). La devolución de llamada ahora también incluye un mensaje de explicación de error correspondiente para ayudar con la depuración. Consulta el problema 369.

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 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