Обновление 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, некоторые вообще не работают в 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:

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, включая возможности воспроизведения и анализа. Разбираться с тем, что пошло не так в каждом конкретном случае, всё еще сложно, но теперь это хотя бы технически возможно.

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