Разработчики D7VK сообщили о важной вехе: кодовая база достигла зрелости, и проект переходит в режим поддержки. Версия 2.3 — это ещё один значительный шаг вперёд, но одновременно и начало нового этапа.
Оптимизация производительности: теневые поверхности в системной памяти
Ключевое улучшение этого релиза — управление размещением теневых поверхностей (shadow surfaces) в памяти. Эти поверхности создаются на «легаси»-пути презентации, чтобы подменять собой реальную первичную поверхность и предотвращать конфликты цепочек обмена.
Ими часто злоупотребляют разработчики игр, которые имеют привычку отображать курсор поверх финального отрендеренного изображения. Поэтому размещение теневых поверхностей в системной памяти даёт заметный прирост производительности. Наиболее ярко это видно в Empire Earth.
Исправления и улучшения
- Перебазировано поверх недавнего минорного релиза DXVK v3.1.1.: Обновлена базовая версия DXVK.
- Оптимизация теневых поверхностей: Улучшено создание и размещение теневых поверхностей. Для Star Trek: Armada, единственной игры с регрессией, добавлена опция синхронизации теневых поверхностей с первичными.
- Проверка форматов глубины: Добавлены проверки поддержки Vulkan для форматов глубины. Это может помочь на мобильных платформах с ограниченной поддержкой форматов.
- Need for Speed: Porsche: Исправлено воспроизведение интро-видео путём отказа от поддержки overlay-поверхностей (спасибо @CkNoSFeRaTU).
- EnumSurfaces: Более надёжная обработка прерванных/частичных вызовов, предотвращающая утечки поверхностей.
- Dark Vengeance: Обойдены неопределённые значения
dwVertexCountпри настройке execute buffer. Игра наконец-то стала играбельной на Linux (спасибо @CkNoSFeRaTU). - Рендер-таргеты: Ослаблены проверки RT-поверхностей для ранних D3D API, что позволяет использовать обычные поверхности как цели рендеринга.
- ProcessVerticesStrided: Добавлена реализация для D3D7.
- Execute buffer операции: Обновление extents при
D3DPROCESSVERTICES_COPY, что требуется некоторым D3D3-играм (G-Police, HyperBlade). - Унификация текстурных дескрипторов: Консолидация логики для всех ранних D3D API. Это делает код более устойчивым к играм, злоупотребляющим функциональностью (например, Grandia II).
- Z.A.R.: Исправлен баг с устаревшими alpha-операциями после смены режима смешивания. Это исправило прозрачность водных поверхностей (спасибо @CkNoSFeRaTU).
- Унификация материалов и текстур: Объединены реализации для D3D6/5/3.
- Унификация вьюпорта: Все интерфейсы вьюпорта реализованы одним объектом. Это исправило падение при запуске Star Wars: X-Wing Alliance (патченная GOG-версия).
- Execute buffer описания: Удалены проверки размеров структур, так как нативная реализация их не выполняет (привет, Forsaken).
- Инвертированный LOD bias: Добавлена опция для мип-маппинга, ожидаемая некоторыми ранними играми (например, Redline Racer).
D7VK переходит в режим поддержки
Разработчики объявили о переходе проекта в maintenance mode. Что это значит?
- Кодовая база считается достаточно зрелой для выполнения изначальных (и постоянно расширявшихся) целей — обеспечения хорошей поддержки всех ранних immediate mode D3D API.
- Новые крупные функции не планируются. Однако исправления ошибок и мелкие дополнения будут появляться, как обычно.
- Цикл релизов станет более растянутым — обновления будут выходить реже.
- Если вы столкнётесь с неизвестными багами, пожалуйста, сообщайте о них в трекере проекта.
D7VK 2.3 — это важный рубеж. Проект, начавшийся как эксперимент по запуску старых игр на современном Vulkan, достиг зрелости и готов продолжать поддерживать классику в мире раннего D3D. Приятного времяпрепровождения в этом немного «джазовом» мире старых игр!
Релиз уже доступен на GitHub-странице проекта.