D7VK 2.2: Mejoras clave para Direct3D 3 y la experiencia de juego retro en Linux

D7VK 2.2

D7VK 2.2 ya está disponible como una nueva versión de la capa de traducción gráfica diseñada para ejecutar juegos clásicos de Windows en Linux. El proyecto, derivado de DXVK, se centra en traducir las antiguas APIs Direct3D 7, 6, 5 y 3 a Vulkan para utilizarlas mediante Wine y Proton, y esta nueva versión dedica buena parte de su trabajo a una de las partes que todavía presentaba más carencias: el soporte de Direct3D 3.

La actualización llega apenas unas semanas después de D7VK 2.1 y continúa el proceso de maduración de una tecnología especialmente interesante para quienes quieren recuperar juegos de finales de los años 90 y principios de los 2000 en sistemas Linux modernos. Además de mejorar Direct3D 3, D7VK 2.2 incorpora numerosas correcciones y ajustes internos, y toma como base la reciente versión DXVK 3.1.

D7VK 2.2 pone el foco en Direct3D 3

La principal novedad de D7VK 2.2 está relacionada con Direct3D 3, una API que había quedado algo rezagada frente al resto de tecnologías antiguas soportadas por el proyecto. Aunque los juegos Direct3D 3 que el desarrollador había podido recopilar y probar ya funcionaban con D7VK, todavía existían diferentes casos límite y comportamientos que no estaban implementados correctamente.

Esto era especialmente problemático porque el catálogo de juegos que utilizan Direct3D 3 es difícil de reconstruir. Se trata de títulos muy antiguos, muchos de los cuales ya no se comercializan o son complicados de localizar, por lo que resulta difícil probar todas las posibles implementaciones que pueden encontrarse en la práctica.

Con esta versión, el desarrollador ha revisado buena parte de la implementación de Direct3D 3 para acercarla al nivel de madurez alcanzado por las demás APIs compatibles con D7VK.

El comportamiento de los dispositivos D3D3 se ajusta al original

Uno de los cambios técnicos consiste en rehacer el sistema de recuento de referencias de los dispositivos Direct3D 3. D7VK 2.2 modifica este mecanismo para que su comportamiento coincida con el de la implementación nativa de la API.

Este tipo de detalle puede parecer poco relevante para el usuario, pero es fundamental en una capa de traducción. Los juegos antiguos pueden depender de comportamientos concretos relacionados con la creación y destrucción de objetos, y una diferencia aparentemente pequeña puede provocar errores difíciles de diagnosticar.

La nueva implementación reduce así las posibilidades de que determinados títulos fallen al gestionar sus dispositivos gráficos de una manera que D7VK no esperaba.

D7VK 2.2 introduce mejoras en la transparencia mediante color key

D7VK 2.2 también modifica la gestión de color keying en dispositivos Direct3D 3 puros. Hasta ahora, el proyecto utilizaba un modelo muy sencillo en el que esta función permanecía siempre activada en determinadas circunstancias.

La nueva versión permite controlar correctamente cuándo debe habilitarse, reproduciendo de una forma más fiel el comportamiento de Direct3D 3. Esto resulta especialmente importante para juegos antiguos que utilizan técnicas de transparencia basadas en colores concretos.

Además, se han optimizado los cálculos relacionados con los rangos de color normalizados. Estos valores ahora se actualizan únicamente cuando cambia la descripción de la superficie, permitiendo mantenerlos en caché y reutilizarlos posteriormente.

El resultado debería ser una mejora pequeña o moderada del rendimiento en juegos que utilizan color key transparency, además de un comportamiento más correcto.

Se corrigen casos límite de los execute buffers

Otro apartado importante de D7VK 2.2 es la revisión de las validaciones de los execute buffers de Direct3D 3. El proyecto ha reorganizado parte de esta lógica para solucionar diferentes casos límite detectados durante las pruebas.

Para comprobar el comportamiento esperado de la API, el desarrollador ha podido apoyarse también en pruebas de Wine específicamente relacionadas con Direct3D 3. Estas pruebas permiten comparar el comportamiento de D7VK con el que se espera de una implementación compatible y detectar diferencias que podrían pasar desapercibidas al utilizar únicamente juegos conocidos.

Este trabajo resulta particularmente valioso para una API tan antigua, donde los títulos disponibles para realizar pruebas son escasos y no siempre cubren todas las posibilidades de la implementación original.

Mayor robustez para las texturas de Direct3D 5 y 3

La actualización no se limita a Direct3D 3. D7VK 2.2 también mejora la gestión de texturas utilizadas por Direct3D 5 y Direct3D 3 para evitar que las superficies subyacentes queden fuera de alcance mientras todavía están siendo utilizadas.

El cambio aumenta la robustez del manejo de recursos gráficos y puede solucionar errores que aparezcan únicamente bajo determinadas secuencias de operaciones. El desarrollador señala además que esta mejora ha tenido un efecto positivo en Frogger, publicado originalmente en 1997.

La corrección muestra cómo los cambios internos destinados a solucionar problemas de gestión de recursos pueden terminar teniendo efectos visibles en juegos concretos, incluso cuando la modificación no está diseñada específicamente para ellos.

D7VK 2.2 también corrige problemas de transformación y matrices

D7VK 2.2 soluciona además un error relacionado con la transformación de los execute buffers de Direct3D 3. El problema estaba provocado por una determinación incorrecta del formato FVF utilizado para las entradas de los vértices.

También se ha corregido un problema en los cálculos de matrices de proyección heredadas. El fallo fue detectado gracias a una prueba de Wine que no se comportaba como esperaba, y podía haber tenido consecuencias negativas en determinadas aplicaciones Direct3D 6, 5 y 3.

Estos cambios vuelven a demostrar la importancia de las pruebas de compatibilidad para D7VK. Muchos de los problemas de las APIs gráficas antiguas no aparecen necesariamente en los juegos más conocidos, sino en combinaciones específicas de características que pueden permanecer ocultas durante años.

Menos sobrecarga en las rutas de dibujo antiguas

La nueva versión también reorganiza el camino de dibujo Begin() / Vertex() / End() utilizado por Direct3D 6 y Direct3D 5. La modificación reduce el consumo de memoria y proporciona una pequeña mejora de rendimiento.

De nuevo, Frogger se encuentra entre los juegos que pueden beneficiarse de este cambio. Aunque no se trata de una optimización que vaya a duplicar los FPS de todos los títulos retro, sí contribuye a reducir parte de la sobrecarga acumulada en las rutas utilizadas por las APIs más antiguas.

D7VK ya ha recibido importantes optimizaciones de rendimiento en versiones anteriores, por lo que el trabajo actual se centra cada vez más en pulir la implementación y eliminar costes innecesarios.

D7VK 2.2 parte de DXVK 3.1

Otra característica importante de esta versión es que D7VK 2.2 ha sido rebasado sobre DXVK 3.1. Esto permite al proyecto beneficiarse de una base más reciente y mantener alineada su implementación con la evolución de DXVK.

La relación entre ambos proyectos es especialmente importante. D7VK nació como un fork de DXVK especializado en las APIs Direct3D antiguas que no están cubiertas por el uso habitual de DXVK, mientras que ambos utilizan Vulkan como destino para las llamadas gráficas procedentes de Windows.

Gracias a esta relación, las mejoras estructurales que llegan a DXVK pueden servir como base para que D7VK continúe evolucionando sin tener que desarrollar desde cero toda la infraestructura necesaria para comunicarse con Vulkan.

Un proyecto pensado para recuperar juegos clásicos

D7VK tiene un objetivo muy concreto dentro del ecosistema Linux: permitir que juegos de Windows que utilizan Direct3D 7, 6, 5 y 3 puedan ejecutarse mediante Vulkan. Esto lo diferencia de DXVK, que está orientado principalmente a Direct3D 9, 10 y 11.

La importancia del proyecto aumenta cuando se trata de títulos que dependen de tecnologías gráficas que Wine no implementa directamente de la misma manera o que pueden beneficiarse de una traducción más precisa hacia Vulkan.

Al combinar D7VK con Wine o Proton, los usuarios de Linux pueden recuperar una cantidad considerable de software de finales del siglo XX y principios del XXI sin tener que recurrir necesariamente a una instalación antigua de Windows.

Para quienes utilizan Wine o Proton para jugar en Linux y tienen interés en recuperar títulos clásicos, D7VK 2.2 refuerza una de las piezas más interesantes de la infraestructura de compatibilidad. Y aunque muchas de sus mejoras sean invisibles para el usuario, cada corrección aumenta las posibilidades de que otro juego perdido en la era de Direct3D 3, 5, 6 o 7 pueda volver a funcionar correctamente en un sistema Linux moderno.

from Linux Adictos https://ift.tt/MhC1ykb
via IFTTT