lanzamiento del proyecto , proporcionando una implementación de Direct3D 9 que funciona a través de la traducción de llamadas en la API gráfica . El proyecto se basa en la base de código del proyecto , que ha sido ampliada con soporte para Direct3D 9. En comparación con la implementación de Direct3D 9 basada en WineD3D, D9VK permite lograr un rendimiento más alto, ya que la traducción de Direct3D 9 a través de OpenGL es más lenta que la traducción a través de Vulkan.
D9VK se puede utilizar para ejecutar aplicaciones y juegos 3D en Linux mediante Wine. Se admite la ejecución de la mayoría de los juegos basados en Direct3D 9 que utilizan las versiones 2 o 3 de Shader Model. El código del proyecto bajo la licencia libre Zlib. Para usar D9VK se requiere tener controladores con soporte para la API Vulkan, como AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ y AMDVLK.
Principales mejoras:
- Se ha implementado la posibilidad de usar más de 4 GB de memoria de video en aplicaciones de 32 bits, lo que ha solucionado problemas al ejecutar mods de los juegos Skyrim y Oblivion;
- Se ha incluido el procesamiento asíncrono de la salida de resultados de renderizado en pantalla (etapa de presentación). Para reducir las latencias en el hilo principal de renderizado, el procesamiento de la salida se lleva a cabo en el hilo de envío de comandos (command submission thread);
- Se han eliminado puntos de sincronización innecesarios del hilo de comandos al extraer datos solicitados;
- El código para determinar el tiempo interno se ha trasladado a usar un temporizador específico de la plataforma, lo que ha ayudado a resolver problemas con el comportamiento incorrecto de high_resolution_clock de MinGW;
- Se asegura la descarga de buffers diferidos MANAGED y SYSTEMMEM en la etapa previa a la ejecución de PrepareDraw, lo que ha resuelto problemas de rendimiento en los juegos Risen y Legend of the Heroes: Trails of the Sky;
- Se ha añadido soporte para , que permitió implementar un renderizado correcto en los juegos SpinTyres y Mudrunner;
- Se ha mejorado la compatibilidad con (D3D9Ex). Se ha tenido en cuenta la especificidad del manejo de ResetEx y Reset;
- Se ha llevado a cabo limpieza y refactorización del código;
- Se ha asegurado un mapeo directo de buffers WRITEONLY, lo que puede impactar positivamente en el rendimiento y evitar un error en el juego
Counter-Strike: Global Offensive, que provoca la continuación de la escritura en el buffer después de su desbloqueo; - Se ha implementado el método , que permite usar cuadros de diálogo en aplicaciones de pantalla completa;
- Se ha implementado el soporte , incluyendo , necesaria para SWVP (SoftWare Vertex Processing);
- Se ha rediseñado el contador del muestreador, mostrado sobre la imagen actual (heads-up display, HUD);
- Se agregó la opción d3d9.dialogBoxMode, que se puede usar para desactivar el funcionamiento solo en modo de pantalla completa;
- Se realizaron optimizaciones de rendimiento y se resolvieron problemas que se presentaban al iniciar juegos como GTA: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need for Speed: Carbon y Risen 1.
También se puede destacar desarrollador del proyecto (implementación de DXGI, Direct3D 10 y Direct3D 11 sobre la API de Vulkan) para concentrar temporalmente los esfuerzos únicamente en la corrección de errores, ralentizando la expansión de funcionalidad. Tal deseo surge de preocupaciones sobre la disminución de la calidad de la base de código y la complicación del mantenimiento en el futuro. Cada actualización de la rama 1.4.x genera quejas sobre cambios regresivos que no se pueden reproducir, localizar y corregir.
Estos problemas requieren un análisis de las causas de su aparición, de lo contrario, dejarlos sin resolver mientras se continúa aumentando la funcionalidad puede solo agravar la situación y convertir el proceso de mantenimiento en una pesadilla. Entre los planes que el desarrollador de DXVK pretende implementar antes de pasar a un modo de solo corrección de errores, se menciona la adición de soporte para algunas extensiones útiles de Vulkan y la fusión con los desarrollos del proyecto D9VK.
Complemento: al instante la versión correctiva D9VK 0.40.1, en la que el valor predeterminado para COLOR0 en los shaders de vértices es vec4(1) y se solucionó un error que hacía que los bits de los slots para las salidas del shader se aplicaran incorrectamente por defecto y, por lo tanto, se corrigieran de manera incorrecta por el backend, causando que se reemplazaran con vec4(0).
Fuente: opennet.ru
