Вышла новая версия D7VK 2.3

Разработчики 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-странице проекта.

  • Просмотров: 32