Durante los últimos cuatro años se ha trabajado bastante en un backend de DirectX dentro de la pila del compilador LLVM. Microsoft respaldó la iniciativa para poder bajar el LLVM IR al DirectX Intermediate Language (DXIL), el formato que ejecutan los controladores gráficos de DirectX 12 en Windows. Ese backend ahora tiene soporte oficial.

Hasta ahora, el backend de DirectX en LLVM era considerado un objetivo experimental y no venía habilitado en las compilaciones por defecto del proyecto ni en distribuciones similares. Con el cambio recién acordado, pasa a ser un objetivo oficial de la pila del compilador.

¿Qué cambia para quien compila shaders?

La diferencia práctica es que deja de haber que construir LLVM con banderas especiales para tener el camino a DXIL. Farzon Lotfi, ingeniero del compilador de HLSL en Microsoft, comentó junto al parche que lo convierte en objetivo oficial:

"Este cambio saca al backend de DirectX de la categoría experimental y agrega el frontend clang-dxc, de modo que la comunidad tenga una vía para probar el nuevo backend".

La decisión siguió a una discusión en el Discourse de LLVM sostenida durante el último mes sobre la promoción a objetivo oficial.

¿Qué viene después?

En ese mismo hilo quedó confirmado que Microsoft planea seguir ampliando el código de DirectX en LLVM:

"Mirando hacia adelante, nuestro foco se moverá hacia el soporte de shaders de gráficos y de trazado de rayos, los Shader Models más nuevos, y una integración más estrecha entre las capacidades del frontend de HLSL de Clang y la generación de código del backend. Con el backend convertido en objetivo oficial y clang-dxc habilitado por defecto, anticipamos una afluencia mayor de comentarios de usuarios, que impulsará más ajustes de conformidad y de rendimiento, además de definir el alcance de funcionalidades a futuro".

El soporte de clang-dxc y de HLSL quedará habilitado por defecto a partir del lanzamiento de LLVM 24, previsto para el próximo año.

Por qué importa

El compilador de shaders de Microsoft ya venía usando una versión derivada de LLVM desde hace años, pero mantenida aparte del árbol principal del proyecto. Traer esa capacidad al LLVM upstream y activarla por defecto significa que quienes desarrollan herramientas gráficas, motores de juego o capas de traducción entre APIs pueden apoyarse en un compilador estándar en lugar de un derivado propio.

Para el ecosistema de código abierto el efecto es indirecto pero real: cualquier proyecto que necesite generar DXIL, incluidos los que traducen entre APIs gráficas, obtiene un camino soportado por la comunidad y no dependiente de una compilación especial. Y para los estudios de desarrollo de la región, que trabajan casi siempre sobre motores de terceros, el beneficio llega igual por la vía de las herramientas: menos divergencia entre el compilador de shaders de Windows y el resto de la cadena de construcción.