Найти в Дзене
Games4Linux

Обновление D7VK 1.2 с поддержкой D3D6 и новыми возможностями

D7VK- это транслятор на основе Vulkan для Direct3D 7, который позволяет запускать 3D-приложения в Linux с помощью Wine. Он использует бэкенд D3D9 от DXVK, а также реализацию DDraw от Wine (или встроенную в Windows реализацию DDraw) и выступает в качестве посредника между ними, обеспечивая минимальную реализацию D3D7
на основе D3D9. Это обновление значительно улучшает поддержку устаревшего API Direct3D 6, одновременно дорабатывая и расширяя возможности существующей реализации для D3D7. Поскольку D3D6 теперь стал... чуть менее экспериментальным, его место на "полигоне нововведений" должно было чем-то заполниться. Загляните в спойлер ниже, особенно если вы не следили за последними изменениями в репозитории: Древний секрет Direct3D
Не слишком обольщайтесь, потому что эта археологическая экспедиция в мир Direct3D достигла своей финальной остановки. Даже с поддержкой D3D6 и D3D5 мы прочно находимся в зоне убывающей отдачи: большинство игр предлагают лучшую графику через Glide, некоторые воо

D7VK- это транслятор на основе Vulkan для Direct3D 7, который позволяет запускать 3D-приложения в Linux с помощью Wine. Он использует бэкенд D3D9 от DXVK, а также реализацию DDraw от Wine (или встроенную в Windows реализацию DDraw) и выступает в качестве посредника между ними, обеспечивая минимальную реализацию D3D7
на основе D3D9.

Это обновление значительно улучшает поддержку устаревшего API Direct3D 6, одновременно дорабатывая и расширяя возможности существующей реализации для D3D7. Поскольку D3D6 теперь стал... чуть менее экспериментальным, его место на "полигоне нововведений" должно было чем-то заполниться. Загляните в спойлер ниже, особенно если вы не следили за последними изменениями в репозитории:

Древний секрет Direct3D
Не слишком обольщайтесь, потому что эта археологическая экспедиция в мир Direct3D достигла своей финальной остановки. Даже с поддержкой D3D6 и D3D5 мы прочно находимся в зоне убывающей отдачи: большинство игр предлагают лучшую графику через Glide, некоторые вообще не работают в Wine по причинам, не связанным с графикой, или делают настолько странные вещи, что для их поддержки в D7VK просто нет реалистичных решений.

Более подробно о работе с D3D6 — в разделе "Главные изменения" ниже.

Исправления и нововведения:

  • Полный рефакторинг кода: Была
    проведена фундаментальная переработка логики работы с DDraw,
    необходимая из-за того, что изначальная архитектура не рассчитывалась на
    поддержку более ранних API. Для пользователей изменения незаметны, но
    они принесли лучшее управление памятью (хотя для этих старых API это
    никогда не было проблемой).
  • Новый способ установки для Linux/Wine: Добавлен
    альтернативный вариант развертывания, позволяющий некоторым "упрямым"
    играм загружать D7VK из системного пути, что решает проблему
    игнорирования библиотеки. Подробности — в файле README. На Windows этот
    метод 
    не работает.
  • Исправление отчетности возможностей видеокарты: Теперь Conquest: Frontier Wars корректно определяет поддержку D3D7 и позволяет переключать разрешение в игре.
  • Оптимизация для старых игр: Добавлен обходной путь для обработки вершин, который помогает гонке 1NSANE выйти на полную производительность независимо от выбора видеорежима (T&L HAL/HAL).
  • Полная поддержка современных патчей: Need for Speed III: Hot Pursuit и Need for Speed: High Stakes с
    "современными патчами" теперь полностью работают с D7VK как через
    рендереры D3D7, так и D3D6. Оба варианта предлагают лучшую
    функциональность, чем рендерер D3D8 (самая очевидная проблема в
    последнем — отсутствие тумана).
  • Исправление для совместимости: Добавлена
    реализация IClassFactory для DDraw, поскольку некоторые игры (в
    основном для D3D6/D3D5) полагались на этот метод для создания объектов
    DirectDraw и в противном случае вылетали при запуске.
  • Работает "из коробки": Благодаря ряду исправлений, 3DMark 99 Max теперь работает без необходимости в "современных патчах" или "исправленных exe-файлах".

И теперь — слово нашему новому "спонсору", D3D6. Автор проекта (WinterSnowfall) пишет:

Главной мотивацией для добавления поддержки D3D6, безусловно, стала игра Drakan: Order of the Flame. Я большой поклонник серии, и у меня в гостиной на полке стоят как коробочная PC-версия оригинала, так и эксклюзивное для PS2 продолжение.
Я уже достаточно поиграл в Drakan с помощью D7VK (или D6VK, если угодно), и, за исключением мелких проблем вроде отсутствия скриншотов в меню сохранения и фона в меню паузы (что, увы, является непреодолимым ограничением), всё работает прекрасно.
Прежде чем перейти к играм, нужно выполнить обязательный, хоть и не слишком релевантный, бенчмарк. Он нерелевантен, потому что 3DMark 99 Max по умолчанию ограничен вертикальной синхронизацией (VSync), а в WineD3D её
нельзя отключить (или, по крайней мере, мне такой способ неизвестен). Однако в D7VK я отключил VSync через встроенную опцию, так что теперь вы все можете обогревать комнаты, нагружая эту старую утилиту современными видеокартами. Вот результаты на моей NVIDIA RTX 4070:
-2
Drakan, конечно, не единственная значимая игра на D3D6. В процессе тестирования релиза я собрал небольшую галерею проектов, которые сейчас работают отлично:
- Drakan: Order of the Flame
- Battlezone II: Combat Commander
- Earth 2150
- Expendable
- Rayman 2: The Great Escape
- Tomb Raider: Chronicles
- Indiana Jones and the Infernal Machine
- Star Wars: Rogue Squadron
Tachyon: The Fringe
- Arabian Nights
- Panzer Elite
А теперь — к багфиксам, потому что работы еще непочатый край. Я уже жаловался на отсутствие инструментов для отладки этих древних API, и это по-прежнему в основном так. Исключение — смелые усилия энтузиаста @CkNoSFeRaTU, который работает над тем, чтобы добавить в apitrace полноценную поддержку ранних версий D3D и DDraw, включая возможности воспроизведения и анализа. Разбираться с тем, что пошло не так в каждом конкретном
случае, всё еще сложно, но теперь это хотя бы технически возможно.