D7VK — это проект с открытым исходным кодом, созданный для преобразования вызовов устаревших графических API Microsoft — Direct3D 7, 6 и 5 — в современные команды Vulkan. Он предназначен для работы в среде Wine на Linux, предоставляя альтернативу встроенному в Wine программному рендереру WineD3D и другим решениям для совместимости.
Проект был создан разработчиком WinterSnowfall как отдельная ветка от основного DXVK (который занимается Direct3D 8, 9, 10 и 11). Основная цель D7VK — не просто эмулировать старые API, а обеспечить их эффективную трансляцию на современные графические конвейеры через проверенный D3D9-бэкенд DXVK и Vulkan. Это позволяет добиться лучшей производительности, стабильности и поддержки современных функций (например, сглаживания) в классических играх по сравнению с чисто программными методами.
Разработчик подчёркивает, что работа с такими древними API, как DirectDraw (DDraw), к которым относились D3D5-7, — это «земля крайне проблемной совместимости». Поэтому D7VK сознательно принимает минималистичный подход, фокусируясь на играх, использующих современный (для того времени) режим Immediate Mode, и не поддерживая устаревший конвейер D3D3 (Execute Buffers) или Retained Mode. Проект позиционируется как ещё одна опция на столе у энтузиаста ретро-гейминга, а не как универсальное и единственное решение.
Для работы D7VK требуется система Linux с установленным Wine и видеодрайверами, поддерживающими Vulkan. Основным сценарием использования является запуск старых Windows-игр на Linux.
Основные возможности и технические особенности
Поддержка нескольких API: Несмотря на название D7VK, проект реализует трансляцию для Direct3D 7 (основной фокус), а также для Direct3D 6 и 5 в экспериментальном режиме. Все они работают через единый компонент ddraw.dll.
Архитектура на базе DXVK: D7VK не является полностью самостоятельным движком. Он действует как прокси-слой: перехватывает вызовы D3D5-7, преобразует их в команды D3D9 и передаёт на обработку в хорошо отлаженный бэкенд от DXVK, который уже транслирует их в Vulkan. Это обеспечивает высокую эффективность и позволяет использовать многие настройки DXVK.
Целевая совместимость: Проект оптимизирован для игр, использующих Immediate Mode рендеринг. Игры, полагающиеся на крайне устаревший конвейер D3D3 или активно смешивающие DDraw с GDI, скорее всего, работать не будут — для них рекомендуется использовать WineD3D.
Наследование функций DXVK: Пользователи получают доступ к знакомой системе конфигурации через файлы .conf, HUD для отображения FPS и статистики (DXVK_HUD), а также к возможности принудительного включения сглаживания (FSAA) через настройку d3d7.emulateFSAA = Forced.
Установка и использование
1. Подготовка: Убедитесь, что в системе установлены корректные драйверы Vulkan для вашей видеокарты (AMD, NVIDIA, Intel).
2. Установка D7VK: Скачайте последний релиз с GitHub. Для использования в конкретном Wine-префиксе (папке с игрой) скопируйте файл ddraw.dll в директорию, где находится исполняемый файл игры (.exe).
3. Настройка Wine: Откройте winecfg для этого префикса. На вкладке «Библиотеки» (Libraries) добавьте переопределение (override) для ddraw и установите его как native, builtin (именно в таком порядке). Это заставит Wine использовать D7VK вместо собственной реализации.
4. Запуск и проверка: Запустите игру. Для проверки, что используется именно D7VK, можно включить HUD, установив переменную окружения (например, в запускающем скрипте): DXVK_HUD=1 или DXVK_HUD=fps,version. На экране должна появиться информация.
Ограничения и важные замечания
Не универсальность: Разработчик честно заявляет, что D7VK не является панацеей и не будет работать со всеми играми подряд из-за огромного количества специфичных хаков и нестандартного кода в старом ПО. Если игра не работает, первым делом стоит попробовать встроенный в Wine рендерер WineD3D или альтернативные рендереры, если игра их предоставляет (например, OpenGL).
Вертикальная синхронизация (VSync): В старом Direct3D поддержка отключения VSync была опциональной, и многие игры её не запрашивают. D7VK по умолчанию включает VSync для соответствия оригинальному поведению. Управлять этим можно через настройки DXVK (d3d9.presentInterval), но в некоторых играх это может вызвать проблемы.
Высокий FPS: Многие старые игры не рассчитаны на работу с частотой выше 60 или даже 30 FPS — физика, логика игры или ввод могут сломаться. D7VK включает встроенные ограничители FPS для известных проблемных игр.
Экспериментальная поддержка D3D6/5: Реализация для версий 6 и 5 API является дополнительной и может быть менее стабильной, чем для D3D7.
Основная платформа — Linux/Wine: Хотя технически файл DLL можно скопировать рядом с игрой и на Windows, эта конфигурация практически не тестируется разработчиком, и её работоспособность не гарантируется.
Для кого этот проект?
D7VK — это инструмент в первую очередь для энтузиастов и сохранителей игрового наследия, которые хотят запускать конкретные классические 3D-игры (например, Sacrifice или Disciples II, как упоминает автор) на современном Linux-железе с максимально возможной эффективностью и качеством изображения. Это не обязательный компонент, а одна из опций, которая в удачных случаях может обеспечить лучший опыт, чем другие доступные методы.
Проект является ярким примером развития экосистемы совместимости с открытым исходным кодом, где нишевые инструменты создаются сообществом для решения конкретных задач, продолжая и расширяя идеи более крупных проектов, таких как DXVK и Wine.
Страница релизов D7VK на GitHub Вики DXVK по конфигурации (настройки в основном применимы и к D7VK).