VKD3D — это реализация Direct3D 12 с открытым исходным кодом, разрабатываемая в рамках проекта Wine. Библиотека предоставляет совместимый с Direct3D 12 API, транслируя его вызовы в команды Vulkan, что позволяет запускать Windows-приложения на Unix-подобных системах.
Проект VKD3D начал развиваться в 2015 году как ответ Microsoft на выпуск DirectX 12. Изначально разрабатываемый CodeWeavers, проект был передан сообществу Wine и стал ключевым компонентом для поддержки современных игр и приложений. VKD3D служит основой для более специализированного форка VKD3D-Proton.
VKD3D работает как слой перевода, преобразующий вызовы Direct3D 12 в эквивалентные команды Vulkan. Проект реализует архитектуру, схожую с оригинальным D3D12, включая систему управления ресурсами, конвейеры состояния и механизмы синхронизации.
Для работы VKD3D требуется система с полной поддержкой Vulkan и совместимыми драйверами.
Минимальные системные требования
Операционная система: Linux, FreeBSD или macOS с поддержкой Vulkan
Графический API: Vulkan 1.1 или выше
Графические драйверы: Mesa 21.0+ для открытых драйверов или проприетарные драйверы NVIDIA/AMD
Wine: Версия 5.0 или выше для базовой функциональности
Зависимости: SPIRV-Tools, Vulkan-Headers, Wine-Staging (рекомендуется)
Для оптимальной работы рекомендуется последняя стабильная версия Wine (7.0+), современные графические драйверы с поддержкой Vulkan 1.3 и система с достаточным объемом оперативной памяти.
VKD3D — это проект с открытым исходным кодом, разрабатываемый международным сообществом энтузиастов и компаний. Разработка ведется в сотрудничестве с проектом Wine и регулярно интегрируется в его основные релизы.
Архитектура и компоненты
Библиотека времени выполнения: Основная библиотека vkd3d.dll, предоставляющая API Direct3D 12.
Компилятор шейдеров: Инструменты для трансляции шейдеров HLSL в SPIR-V, используемые Vulkan.
Слой трансляции ресурсов: Система управления памятью и ресурсами GPU, эмулирующая поведение D3D12.
Интеграция с Wine: Глубокая интеграция с архитектурой Wine для обработки вызовов Win32 API.
Ключевые возможности
Поддержка основных функций D3D12: Command lists, bundles, pipeline state objects, root signatures.
Управление ресурсами: Heaps, descriptors, resource barriers и residency management.
Многопоточность: Полная поддержка многопоточного рендеринга и синхронизации.
Кроссплатформенность: Работа на различных Unix-подобных системах с поддержкой Vulkan.
Отладка и профилирование: Инструменты для отладки приложений D3D12.
Отличия от VKD3D-Proton
Целевое назначение: VKD3D ориентирован на общую совместимость, VKD3D-Proton — оптимизирован для игр.
Производительность: VKD3D-Proton содержит больше оптимизаций для конкретных игр и сценариев.
Частота обновлений: VKD3D обновляется вместе с Wine, VKD3D-Proton имеет более частые релизы.
Поддержка расширений: VKD3D-Proton быстрее внедряет поддержку новых D3D12 расширений.
Поддерживаемые приложения
Игры: Многие игры с поддержкой DirectX 12, особенно те, которые не требуют экспериментальных функций.
Бенчмарки: 3DMark Time Spy, некоторые другие тестовые программы.
Профессиональные приложения: Некоторые CAD и научные приложения, использующие D3D12 для вычислений.
Демонстрационные программы: Официальные демо Microsoft и образцы кода.
Установка и использование
Через Wine-Staging: Самый простой способ — использование Wine-Staging, который включает предварительно собранный VKD3D.
Сборка из исходников: Для получения последних изменений можно собрать VKD3D самостоятельно из Git репозитория.
Дистрибутивные пакеты: Многие дистрибутивы Linux предоставляют пакеты vkd3d в своих репозиториях.
Конфигурация: Настройка через переменные окружения Wine и параметры запуска приложений.
VKD3D — это фундаментальный проект, который заложил основу для совместимости DirectX 12 на Unix-платформах. Хотя для игровых сценариев часто рекомендуется использовать VKD3D-Proton, оригинальный VKD3D остается важным компонентом экосистемы Wine, обеспечивающим базовую совместимость и служащим тестовой платформой для новых функций.
Исходный код в официальном репозитории Wine.