Novedades de WebGPU (Chrome 136)

François Beaufort
François Beaufort

Publicado el 23 de abril de 2025

Atributo isFallbackAdapter de GPUAdapterInfo

El atributo booleano isFallbackAdapter de GPUAdapterInfo indica si un GPUAdapter tiene limitaciones de rendimiento significativas a cambio de una mayor compatibilidad, un comportamiento más predecible o una mayor privacidad. 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.
}

Dado que Chrome aún no lanzó la 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 lanzamiento.

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

El equipo de Chrome sigue mejorando Tint, el compilador del lenguaje de sombreadores de WebGPU, con la incorporación de una representación intermedia (RI) para los dispositivos que admiten WebGPU con el backend de D3D12. Este RI, 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, en última instancia, beneficiará tanto a los desarrolladores como a los usuarios. Las pruebas iniciales demuestran 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 de sombreador de WGSL en instrucciones de GPU de bajo nivel.
Creación de canalizaciones de renderización en Windows.

Estas mejoras, que ya están disponibles en Android, ChromeOS y macOS, se están expandiendo progresivamente 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, elimina todas las restricciones del modo de compatibilidad (funciones y límites) cuando se habilita la marca chrome://flags/#enable-unsafe-webgpu. Consulta el error 395855517.

Solicitar un GPUAdapter con la opción featureLevel: "compatibility" sugiere al navegador que seleccione el modo de compatibilidad con WebGPU experimental. Si se ejecuta correctamente, el adaptador resultante será "compatibility-defaulting". De lo contrario, se establece como "predeterminado principal", 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 predeterminados del núcleo siempre admiten la función "core-features-and-limits" y se habilitan automáticamente en los GPUDevices creados a partir de ellos. En el caso de los adaptadores predeterminados de compatibilidad, es posible que se admita la función "core-features-and-limits" y se pueda solicitar en los objetos GPUDevice creados a partir de ellos. Ambos tipos de adaptadores también pueden admitir funciones como "float32-blendable", que es opcional tanto en el modo principal como en el 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 las funciones principales 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 callback status InstanceDropped a CallbackCancelled para aclarar que se canceló la devolución de llamada, pero es posible que el procesamiento en segundo plano asociado al evento, como la compilación de la canalización, aún se esté ejecutando. 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 del enum wgpu::PopErrorScopeStatus::EmptyStack, que indica que no se pudo extraer la pila de alcance del 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 del error correspondiente para ayudar con la depuración. Consulta el problema 369.

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