пуск на проекта , предоставяща реализация на 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, е необходима наличност на драйвери с поддръжка на Vulkan API, като AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ и AMDVLK.
Основни подобрения:
- Добавена е възможност за използване на повече от 4 GB видео памет в 32-битови приложения, което реши проблемите при стартиране на модификации на игрите Skyrim и Oblivion;
- Включена е асинхронна обработка на резултатния рендеринг на екрана (стадия presentation). За да се намалят закъсненията в основния поток на рендеринга, обработката на изхода се извършва в потока за подаване на команди (command submission thread);
- Премахнати са излишните точки за синхронизация на командния поток при извличане на поискани данни;
- Кодът за определяне на вътрешното време е прехвърлен на специфичен за платформата таймер, което помогна за решаването на проблемите с неправилното поведение на 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
