DXVK 2 ya está entre nosotros como la nueva versión mayor del renderizador que se encarga de traducir las instrucciones de Direct3D 9, 10 y 11 a Vulkan, mientras que la versión 12 de la API de Microsoft es traducida con VKD3D. Además, es una de las partes nucleares de Proton, así que uno ya puede imaginarse el gran peso que tiene en la Steam Deck a la hora de ejecutar videojuegos tanto antiguos como muy recientes, ya que DirectX 11 sigue siendo muy empleado en el desarrollo de videojuegos.
Lo primero que nos encontramos es que DXVK 2 requiere de drivers y una versión de Wine capaces de soportar Vulkan 1.3. Viendo que la mayoría de los usuarios emplean este renderizador a través de Proton, se supone que Valve cubrirá el frente de Wine correctamente, mientras que a nivel de drivers lo recomendable es emplear la última versión de Mesa o del driver oficial de NVIDIA.
Philip Rebohle, desarrollador principal del renderizador, ha explicado que “en la práctica, cualquier sistema capaz de ejecutar juegos Direct3D 11 y Direct3D 12 usando Proton Experimental en este momento podrá ejecutar DXVK 2.0”. Esa afirmación se ha sumado a un aviso diciendo que “las capas de Vulkan de terceros que no se actualizaron para Vulkan 1.3 ya no funcionarán”. Recordamos que la mencionada versión de la API de Khronos Group fue publicada en enero de 2022, así que no estamos hablando de algo que sea reciente, más en el segmento de los videojuegos, donde tener la última versión de los drivers es muy importante para lograr una buena experiencia.
El requerimiento relativamente alto en cuanto a la versión de Vulkan viene debido a que DXVK 2 ha llegado con muchos cambios y características nuevas, con especial mención a las modificaciones a nivel de compilación de shaders o sombreadores, que requieren del uso de las características más modernas de la API de Khronos. Y después de abarcar el aspecto a tener más en cuenta, vamos a ver qué ha aportado para las distintas versiones de Direct3D que soporta.
Para Direct3D 9, y con el fin de reducir las posibilidades de quedarse sin espacio de direcciones en los juegos compilados para 32-bit (casi todos los que existen viendo la línea del tiempo), DXVK empleará archivos mapeados en memoria para almacenar instantáneas (shadow copies) de las texturas, lo que permitirá deasignar la memoria que no está siendo usada por el juego para así liberar grandes cantidades de espacio de direcciones.
Los drivers que soportan la extensión VK_EXT_attachment_feedback_loop_layout
podrán hacer una lectura correcta de un objetivo renderizado activo en los juegos que se apoyan en Direct3D 9. Esto viene a corregir principalmente artefactos (fallos) de renderizado detectados en las gráficas de AMD más recientes y que requerían de soluciones alternativas a nivel de controladores. Títulos como el viejo GTA IV deberían de verse beneficiados de esta mejora.
En cuanto a Direct3D 10, se han retirado definitivamente las implementaciones de d3d10.dll
y d3d10_1.dll
debido a que no suministran una funcionalidad completa y además no eran empleados por defecto desde la versión 1.6 de DXVK. Debido a que la implementación de Wine de dichos DLL es más completa y es la empleada a la hora de la verdad por Proton, se ha decidido retirar las versiones presentes en DXVK.
Y para acabar con las API de Microsoft tenemos a Direct3D 11, del que DXVK expone ahora las características de nivel 12_1 para incorporar las siguientes características: Recursos en Mosaico (Tiled Resources) hasta el nivel 3, Rasterización Conservadora (Conservative Rasterization) hasta nivel 3 y Vistas Ordenadas del Rasterizador (Rasterizer Ordered Views).
Philip Rebohle explica que “si bien no se sabe que ningún juego use estas funciones directamente en Direct3D 11, algunos juegos y lanzadores de juegos dependen de que el soporte de funciones sea consistente entre Direct3D 11 y Direct3D 12 para permitir a los usuarios habilitar Direct3D 12 en las opciones del juego. Aunque nuestra implementación de estas funciones es generalmente funcional, puede haber errores o problemas de rendimiento en caso de que un juego los use”.
Otro aspecto del soporte para Direct3D 11 es la incorporación del soporte para las consultas de funciones de D3D11_FEATURE_SHADER_CACHE
y D3D11_FEATURE_D3D11_OPTIONS5
, mientras que como inconvenientes están que los drivers de Vulkan de AMD no son actualmente compatibles con la extensión VK_EXT_fragment_shader_interlock
y están limitados al nivel de funciones 12_0, mientras que el driver de Intel, ANV, no es compatible con las funciones de Vulkan correspondientes y está limitado al nivel de funciones 11_1.
Para terminar con Direct3D 11, DXVK 2 ha añadido una refactorización de ID3D11DeviceContext
“para que los contextos inmediatos y diferidos ya no utilicen puntos de entrada comunes”. De esta manera el comportamiento se asemeja más a Windows, se mejora la compatibilidad con bibliotecas y modificaciones de terceros que se conectan específicamente al contexto inmediato de Direct3D 11 y se reduce la sobrecarga de la CPU.
Los shaders o sombreadores de Vulkan serán compilados a partir de DXVK 2 en el momento en que el juego carga los shaders de Direct3D en lugar de en el momento de dibujado sobre los drivers que soportan la extensión VK_EXT_graphics_pipeline_library
y la característica IndependentInterpolationDecoration
, lo que debería eliminar o al menos reducir en muchos juegos el stuttering que se produce a la hora de compilar los shaders.
El cambio introducido en la compilación de shaders debería de mejorar la experiencia a la hora de jugar, pero “en los juegos que cargan sus sombreadores durante la carga de las pantallas o en el menú, esto puede generar períodos prolongados de uso muy alto de la CPU, especialmente en las CPU más débiles”.
DXVK 2 también viene con una gran cantidad de correcciones, muchas de las cuales han llegado a títulos específicos como Alan Wake, Alice: Madness Returns, Beyond Good and Evil, Dragon Age Origins, Empire: Total War, Final Fantasy XV, GTA IV, Metal Gear Solid V: Ground Zeroes, Sonic Generations, Spider Man: Shattered Dimensions y Warhammer Online.
Y hasta aquí lo más importante de DXVK 2. Los que quieran conocer todos los detalles pueden consultar el anuncio de lanzamiento publicado en el repositorio GitHub del proyecto, mientras que el renderizador, si no se quiere lidiar con él, lo suyo es esperar a que llegue a Proton si no lo ha hecho ya en la rama experimental.
Fuente: Muy Linux.