издание на проекта , осигуряващ реализация на Direct3D 9, работеща чрез транслация на повиквания в графичния API . Проектът е основан на кодовата база на проекта , която е разширена с поддръжка на 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 GB видеопамет в 32-битови приложения, което реши проблемите при стартиране на модове за играта Skyrim и Oblivion;
- Включена е асинхронна обработка на извода на резултата от рендеринга на екран (фаза на презентация). За намаляване на закъсненията в основния поток на рендеринга, обработката на извода се извършва в потока за подаване на команди;
- Премахнати са излишните точки на синхронизация на потока с команди при извличане на заявените данни;
- Кодът за определяне на вътрешното време е пренаписан да използва платформен таймер, което помогна за решаване на проблемите с неправилното поведение на high_resolution_clock от MinGW;
- Осигурено е освобождаването на отложени буфери MANAGED и SYSTEMMEM на етапа преди извършването на PrepareDraw, което реши проблемите с производителността в игрите Risen и Legend of the Heroes: Trails of the Sky;
- Добавена е поддръжка , позволяваща правилен рендеринг в игрите SpinTyres и Mudrunner;
- Подобрена е съвместимостта с (D3D9Ex). Взета е предвид спецификата на обработката на ResetEx и Reset;
- Извършени са почиствания и рефакторинг на кода;
- Осигурен е директен мапинг на буферите WRITEONLY, което може да повлияе положително на производителността и да заобиколи грешката в играта
Counter-Strike: Global Offensive, довеждаща до продължаваща запис в буфера след неговото отключване; - Реализиран е метод , позволяваща използването на диалогови прозорци в приложения на цял екран;
- Подкрепя се , включително , необходимо за 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.
Допълнително може да се отбележи разработчик на проекта (реализация на DXGI, Direct3D 10 и Direct3D 11 върху API Vulkan) временно да се съсредоточат усилията само върху отстраняване на грешки, спирайки разширяването на функционалността. Такова желание е свързано с опасения за намаляване качеството на кодовата база и затруднение с поддръжката в бъдеще. Всяко обновление на клон 1.4.x предизвиква оплаквания за регресивни промени, които не могат да бъдат възпроизведени, локализирани и отстранени.
Тези проблеми изискват разглеждане на причините за появата им, в противен случай оставянето им неизправени при продължаващо увеличаване на функционалността може само да влоши ситуацията и да превърне процеса на поддръжка в кошмар. От плановете, които разработчикът на DXVK има за изпълнение преди преминаване в режим само за поправки, е добавянето на поддръжка за някои полезни разширения на Vulkan и сливане с разработки на проекта D9VK.
Допълнение: по горещи следи коригиращата версия D9VK 0.40.1, в която значението по подразбиране на vec4(1) за COLOR0 във вершинните шейдъри и е отстранена грешка, при която битовете на слотовете за изходи на шейдъра по подразбиране неправилно са се прилагани и следователно неправилно поправяни от бекенда, което е довело до тяхната замяна с vec4(0).
Източник: opennet.ru
