Выпуск D9VK 0.40, реализации Direct3D 9 поверх Vulkan
15 декабря 2019 года
Состоялся выпуск проекта D9VK 0.40, предоставляющего реализацию Direct3D 9, работающую через трансляцию вызовов в графический API Vulkan. Проект основан на кодовой базе проекта DXVK, которая была расширена поддержкой Direct3D 9. По сравнению с реализацией Direct3D 9 на базе WineD3D, D9VK позволяет добиться более высокой производительности, так как трансляция Direct3D 9 через OpenGL работает медленнее трансляции через Vulkan.
D9VK может применяться для запуска 3D-приложений и игр в Linux при помощи Wine. Поддерживается запуск большей части игр на базе Direct3D 9, использующих 2 или 3 версию Shader Model. Код проекта распространяется под свободной лицензией Zlib. Для использования D9VK требуется наличие драйверов с поддержкой API Vulkan, таких как AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ и AMDVLK.
Основные улучшения:
- Реализована возможность использования более 4 ГБ видеопамяти в 32-разрядных приложениях, что решило проблемы при запуске модов игр Skyrim и Oblivion;
- Включена асинхронная обработка вывода результата рендеринга на экран (стадия presentation). Для уменьшения задержек в основном потоке рендеринга, обработка вывода выполняется в потоке передачи команд (command submission thread);
- Убраны излишние точки синхронизации потока команд при извлечении запрашиваемых данных;
- Код для определения внутреннего времени переведён на использование специфичного для платформ таймера, что помогло решить проблемы с некорректным поведением high_resolution_clock из MinGW;
- Обеспечена выгрузка отложенных буферов MANAGED и SYSTEMMEM на стадии до выполнение PrepareDraw, что решило проблемы с производительностью в играх Risen и Legend of the Heroes: Trails of the Sky;
- Добавлена поддержка D3DTA_CONSTANT, позволившая реализовать корректный рендеринг эффекта свечения в играх SpinTyres и Mudrunner;
- Улучшена совместимость с DirectX 9Ex (D3D9Ex). Учтена специфика обработки ResetEx и Reset;
- Проведены чистка и рефакторинг кода;
- Обеспечен прямой маппинг буферов WRITEONLY, что может положительно повлиять на производительность и обойти ошибку в игре
Counter-Strike: Global Offensive, приводящую к продолжению записи в буфер после его разблокировки;
- Реализован метод SetDialogBoxMode, позволяющий использовать диалоговые окна в полноэкранных приложениях;
- Реализована поддержка смешивания вершин, в том числе индексируемого смешивания вершин, необходимого для SWVP (SoftWare Vertex Processing);
- Переделан счётчик семплера, выводимый поверх текущего изображения (heads-up display, HUD);
- Добавлена опция d3d9.dialogBoxMode, которую можно использовать для отключения работы только в полноэкранном режиме;
- Внесены оптимизации производительности и решены проблемы, проявляющиеся при запуске игр GTA: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need for Speed: Carbon и Risen 1.
Дополнительно можно отметить намерение разработчика проекта DXVK (реализация DXGI, Direct3D 10 и Direct3D 11 поверх API Vulkan) на время сосредоточить усилия только на исправлении ошибок, притормозив расширение функциональности. Подобное желание вызвано опасениями о снижении качества кодовой базы и усложнения сопровождения в будущем. Каждое обновление ветки 1.4.x вызывает появление жалоб о регрессивных изменениях, которые не удаётся воспроизвести, локализовать и устранить.
Данные проблемы требуют разбора причин их появления, иначе оставление их неисправленными при продолжении наращивания функциональности может лишь усугубить ситуацию и превратить процесс сопровождения в кошмар. Из планов, которые разработчик DXVK намерен реализовать до перехода в режим только исправления ошибок, называется добавление поддержки некоторых полезных расширений Vulkan и слияние c наработками проекта D9VK.
Дополнение 1: по горячим следам сформирован корректирующий выпуск D9VK 0.40.1, в котором исправлено на vec4(1) значение по умолчанию для COLOR0 в вершинных шейдерах и устранена ошибка, из-за которой биты слотов для выходов шейдера по умолчанию неправильно применялись и, следовательно, некорректно исправлялись бэкэндом, вызывая их замену на vec4(0).
Дополнение 2: Состоялось слияние кодовых баз D9VK и DXVK. Наработки D9VK перенесены в master-ветку репозитория DXVK. D9VK оценивается разработчиком как готовый к использованию и реализующий почти всю задуманную функциональность. Таким образом, все реализации DXGI (DirectX Graphics Infrastructure), Direct3D 11, Direct3D 10 и Direct3D 9 отныне будут развиваться в единой кодовой базе.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.