En la base de código utilizada para formar la versión Mesa 20.2, el controlador RADV, Vulkan para chips AMD se cambió al backend predeterminado para compilar sombreadores » ACO «, desarrollado por Valve como una alternativa al compilador de sombreadores LLVM.
Este cambio especificado se realizó con la finalizar de obtener un aumento en la productividad de los juegos y una reducción en su tiempo de lanzamiento.
El cambio del controlador RADV al nuevo backend fue posible después de alcanzar la paridad en la funcionalidad de ACO con el antiguo backend desarrollado por AMD para el controlador AMDGPU, que continúa utilizándose en el controlador RadeonSI OpenGL.
Las pruebas realizadas por Valve mostraron que ACO es casi el doble de rápido que el compilador de compilación de sombreadores AMDGPU y demuestra un aumento en FPS en algunos juegos cuando se ejecuta en sistemas con el controlador RADV.
Los controladores AMD OpenGL y Vulkan actualmente usan un compilador de sombreadores que es parte del proyecto ascendente LLVM. Ese proyecto es enorme y tiene muchos objetivos diferentes, y la compilación en línea de sombreadores de juegos solo es uno de ellos.
Eso puede dar lugar a compensaciones de desarrollo, donde mejorar la funcionalidad específica del juego es más difícil de lo que sería de otra manera, o donde las características específicas del juego a menudo se rompen accidentalmente por los desarrolladores de LLVM que trabajan en otras cosas.
El backend de ACO tiene como objetivo garantizar que el código se genere de la manera más óptima posible para los sombreadores de aplicaciones de juegos y lograr una velocidad de compilación muy alta.
ACO está escrito en C ++, desarrollado teniendo en cuenta la aplicabilidad para la compilación JIT, y utiliza los rápidos para iterar sobre estructuras de datos, evitando estructuras basadas en punteros como listas vinculadas y cadenas de uso de def. La representación intermedia del código se basa completamente en SSA (Asignación estática individual) y permite la asignación de registros, calculando con precisión el registro en función del sombreador.
La representación intermedia del código se basa completamente en SSA (Asignación estática individual) y permite la asignación de registros, calculando con precisión el registro en función del sombreador.
Actualmente, solo se admiten píxeles (fragmentos) y sombreadores informáticos en GPU AMD discretas (dGPU VI +). Sin embargo, ACO ya recopila correctamente los sombreadores para todos los juegos probados, incluidos los sombreadores complejos de Shadow of the Tomb Raider y Wolfenstein II.
El prototipo de ACO propuesto para la prueba es casi el doble de rápido que el compilador de sombreado AMDGPU y demuestra un aumento en FPS en algunos juegos cuando se ejecutan en sistemas con el controlador RADV.
Para entender un poco mas sobre la relevancia que tiene el adoptar el código de Valve es importante poner sobre primer plano que se tiene como objetivo garantizar la generación de código lo más óptimo posible para los sombreadores de aplicaciones de juegos, así como para lograr una velocidad de compilación muy alta.
El compilador de sombreadores disponible en Mesa utiliza componentes LLVM, que no permiten alcanzar la velocidad de compilación deseada y no permiten el control total del flujo de control, que en el pasado ya ha causado serios errores.
Además, evitar LLVM hace posible implementar un análisis más agresivo de discrepancias y administrar más finamente la carga en los registros, lo que permite la generación de archivos ejecutables más eficientes.
Finalmente, también es importante tomar en cuenta que de momento ACO funciona solo para el controlador Mesa RADV Vulkan. Pero los desarrolladores de ACO han confirmado que su próximo paso será comenzar a trabajar en la expansión de las capacidades de ACO para admitir el controlador OpenGL RadeonSI, de modo que en el futuro y para este controlador, ACO pueda reemplazar el compilador de sombreador LLVM predeterminado.
Y en cuanto a quienes prefieren continuar con el backend que se utilizaba anteriormente del compilador de sombreador LLVM, pueden regresar a él, solo que tienen que cambiar una variable.
La variable de entorno que se proporciona para hacer este cambio es «RADV_DEBUG=llvm».
¿Y cómo hace un usuario para elegir con qué backend se ejecuta un juego? ¿qué ficheros tiene que modificar?