RADV llega a Windows: el driver Vulkan libre de AMD se ejecuta en Counter-Strike 2

Fuentes: RADV reaches Windows: open Vulkan driver for AMD runs Counter-Strike 2, phoronix.com

El driver Vulkan de código abierto RADV, desarrollado dentro del proyecto Mesa y pieza clave del ecosistema gráfico en Linux, ya ejecuta Counter-Strike 2 en Microsoft Windows. El avance, todavía experimental, es resultado de un patrocinio de Valve a ingenieros de Collabora que llevan meses trabajando en portar este controlador a la plataforma de Microsoft.

RADV se ha consolidado en los últimos años como el driver Vulkan de referencia para tarjetas gráficas AMD en Linux. Tal es su peso que la propia AMD dejó de lado su implementación alternativa basada en PAL (Platform Abstraction Library) y concentró sus esfuerzos de código abierto en Mesa. El driver ha sido además uno de los grandes protagonistas del éxito de la Steam Deck y, más recientemente, de la nueva Steam Machine, ambas basadas en hardware AMD.

El proyecto de portar RADV a Windows fue iniciado por la ingeniera Faith Ekstrand, de Collabora, quien presentó sus hallazgos preliminares en la conferencia XDC 2024. Según recoge el blog de Collabora, Ekstrand demostró que era viable ejecutar RADV sobre Windows gracias a la interfaz WDDM2 —el modelo de drivers gráficos introducido con Windows 10—, que ofrece una base más sólida que sus predecesores para que un driver de usuario (UMD) interactúe con el sistema operativo y con el driver de kernel (KMD).

El principal obstáculo es que muchas llamadas D3DKMT transportan datos privados del fabricante: blobs opacos y específicos de cada proveedor cuyo contenido solo conoce el driver propietario. Esto acopla estrechamente al driver de usuario con el de kernel y vuelve la interfaz completamente indocumentada. Ekstrand construyó la herramienta wddm2-pdd-re, capaz de registrar las llamadas WDDM2 y los datos privados de aplicaciones D3D12, y mediante ingeniería inversa logró que RADV enviase trabajo al driver de kernel propietario, hasta conseguir renderizar un modelo 3D rotando en pantalla.

Sobre ese precedente trabaja ahora el equipo de Collabora financiado por Valve, encabezado por Louis-Francis Ratté-Boulianne. Su objetivo declarado es más ambicioso: soportar distintas generaciones de hardware, romper la dependencia con WSL y alcanzar una estabilidad muy superior a la del prototipo original, que apenas aguantaba dos minutos ejecutando el banco de pruebas deqp-vk sin colapsar. Para ello, según el artículo de Collabora, mejoraron el manejo de flujos de comandos y la sincronización, y añadieron soporte para funcionalidades como sparse bindings, tessellation y task shaders, además de consulta dinámica de propiedades de la GPU.

Aunque el driver aún no es conforme con el conjunto de pruebas oficial de Vulkan, el hito más visible es la ejecución de Counter-Strike 2 arrancando con el argumento -vulkan. En una prueba documentada en el blog de Collabora, el juego se inicia y es capaz de entrar en una partida.

El otro gran reto, señalado por Phoronix, es la dependencia del driver de kernel propietario de AMD para Windows (AMD Radeon Software). Portar el driver de kernel AMDGPU de Linux a Windows queda fuera del alcance del proyecto. Por eso RADV, en su versión Windows, debe apoyarse en el kernel driver oficial de AMD, lo que ha obligado a los desarrolladores a realizar ingeniería inversa de las estructuras de datos internas y a crear herramientas de registro para reducir las diferencias de comportamiento con el driver propietario. A largo plazo, apuntan desde Phoronix, harán falta dos cosas: una interfaz estable y documentada con el driver de kernel de AMD en Windows, o bien una biblioteca shim que sirva de capa intermedia entre RADV y ese kernel driver, amortiguando los cambios no documentados entre versiones de AMD Radeon Software.

El soporte hardware se centra por ahora en GPUs RDNA de última generación. El equipo probó en una RX 7900 XT (Gen 11), mientras que Ekstrand trabajó con una RX 7800 XT. Las diferencias arquitectónicas entre generaciones provocaron cuelgues persistentes —incluso al intentar operaciones tan simples como limpiar una superficie— y forzaron a mejorar las herramientas de depuración ante la ausencia de instrumentos nativos en Windows para este tipo de fallos. La utilidad de ingeniería inversa se convirtió así en una capa completa de logging WDDM2, capaz de volcar flujos de comandos, registros y código de shaders de cualquier aplicación ejecutada con el driver Vulkan oficial.

Otro frente abierto es la compatibilidad con el compilador. Mesa se desarrolla pensando en GCC y Clang, y su código contiene asunciones que no se cumplen al compilar con MSVC, lo que ha requerido adaptaciones adicionales en el toolchain.

Las implicaciones para la industria son notables. Un driver Vulkan abierto y compartido entre Linux y Windows facilitaría la depuración, aceleraría la corrección de errores y permitiría que la comunidad —incluidos desarrolladores de videojuegos— reporte problemas o contribuya mejoras que beneficien a usuarios de ambos sistemas operativos por igual.

A corto plazo, el proyecto sigue siendo experimental y centrado en una sola aplicación. Su viabilidad real dependerá de que AMD, Valve o la comunidad encuentren una solución estable para la capa de kernel, ya sea documentando la interfaz o consolidando la biblioteca shim. Si lo logran, RADV podría dejar de ser un fenómeno exclusivamente linuxero para convertirse en la primera opción Vulkan de AMD también en Windows.