DirectX llega a Linux a través del WSL 2

Como muestra del «amor hacia Linux», la gente de Microsoft anunció el día de hoy el arribo de su conjunto de API’s gráficas, DirectX, a Linux. La cuestión es que dichas API’s solo estarán disponibles si el usuario corre una distro bajo la versión 2 del subsistema Windows para Linux (WSL).

directx linux

Hasta hace poco la aceleración gráfica por GPU al usar el WSL se realizaba a través de una tecnología de virtualización la cuál integra a WDDM (Windows Display Driver Model) y los controladores WDDMv2.5 y superior. Sin embargo, el cliente (el cuál lleva por nombre GPU-PV) ahora es parte fundamental de Windows y es usado en otros escenarios como Windows Defender Application Guard, Windows Sandbox y Hololense 2.

Esta situación dejó limitado el cliente por lo que Microsoft decidió implementar DirectX en el WSL 2 y así soportar nativamente la aceleración gráfica al correr Linux. Para lograr esto, Microsoft ha introducido una nueva rama en su kernel Linux llamada «Dxgkrnl».

Dxgkrnl básicamente comunica el VM Bus al huésped Windows y ésta conexión se comunica a la GPU física. De acuerdo con Microsoft, las aplicaciones que se ejecutan en WSL 2 tendrán el mismo acceso a la GPU que como si fuese una app nativa de Windows. El funcionamiento será completamente dinámico y estará basado en las necesidades de la app como tal. Por ende, la compañía aseguró que no habrán limitaciones.

DirectX 12 (d3d12) y DxCore en Linux

Para hacer compatible la abstracción de WDDM en las GPU’s al correr Linux, Microsoft ha recompilado todas sus API’s D3D12 y DxCore para que trabajen en Linux. El resultado ha sido una implementación completa y real la cuál ofrece el mismo nivel de rendimiento y funcionalidad que en Windows. La única limitante de momento es que no hay soporte para copiar pixeles directamente en la pantalla.

En cuanto a DxCore (libdxcore.so), Microsoft simplificó y modernizó la API para que el controlador WDDM pueda «hablar» directamente con la GPU. Es importante reseñar que tanto la API DirectX 12 (d3d12) como DxCore seguirán siendo de código cerrado.

Requerimientos para que DirectX funcione en Linux bajo el WSL 2

Para que la API gráfica DirectX pueda trabajar sin problemas en alguna de las distros Linux disponibles para el WSL 2, los usuarios deberán contar con lo siguiente:

  • El controlador gráfico debe tener al menos la versión 2.9 de WDDM.
  • El driver deberá estar desarrollado bajo el modelo UMD
  • Obviamente deberá soportar DirectX 12
  • por los momentos, solamente estarán soportadas las distros basadas en glibc.

Como dato adicional o como un postdata (P.S), Microsoft también anunció la llegada de las API’s DirectML y CUDA al WSL 2!. Si deseas conocer todos los detalles, entonces deberás remitirte al blog de desarrolladores de Microsoft.