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