D7VK 2.2 подобрява поддръжката на Direct3D 3 за възпроизвеждане на класически игри на Windows на Linux

  • D7VK 2.2 значително подобрява поддръжката на Direct3D 3, като отстранява проблеми с устройствата, буферите за изпълнение и трансформацията на върховете.
  • Актуализацията също така подобрява управлението на текстурите и прозрачността на цветовите ключове и намалява натоварването на някои Direct3D 5 и 6 пътища.
  • D7VK 2.2 е базиран на DXVK 3.1 и продължава да подобрява работата на класически Windows игри, използващи Wine и Proton на Linux.

D7VK 2.2

D7VK 2.2 вече е наличен като нова версия на слоя за превод на графики, предназначен за стартиране на класически игри за Windows на Linux. Проектът, производен на DXVK, се фокусира върху превеждането на по-старите API-та на Direct3D 7, 6, 5 и 3 към Vulkan за използване с Wine и Proton, а тази нова версия посвещава значителна част от работата си на една от областите, която все още имаше най-много недостатъци: поддръжката на Direct3D 3.

Актуализацията пристига само няколко седмици след D7VK 2.1 и продължава процеса на усъвършенстване на технология, която е особено интересна за тези, които искат да играят игри от края на 90-те и началото на 2000-те години на съвременни Linux системи. В допълнение към подобряването на Direct3D 3, D7VK 2.2 включва множество корекции на грешки и вътрешни корекции и е базирана на скорошната версия на DXVK 3.1.

D7VK 2.2 се фокусира върху Direct3D 3

Основната нова функция в D7VK 2.2 е свързана с Direct3D 3, API, който донякъде изостава от другите по-стари технологии, поддържани от проекта. Въпреки че игрите Direct3D 3, които разработчикът е успял да събере и тества, вече са работили с D7VK, все още е имало няколко гранични случая и поведения, които не са били имплементирани правилно.

Това беше особено проблематично, защото каталогът с игри, използващи Direct3D 3, е труден за реконструкция. Това са много стари заглавия, много от които вече не са търговски достъпни или са трудни за намиране, което затруднява тестването на всички възможни реализации, които биха могли да се срещнат на практика.

С тази версия, разработчикът е преработил голяма част от имплементацията на Direct3D 3, за да я доближи до нивото на зрялост, постигнато от другите API, съвместими с D7VK.

Поведението на устройствата D3D3 съответства на оригинала

Една от техническите промени включва преработка на системата за броене на референции за Direct3D 3 устройства. D7VK 2.2 модифицира този механизъм, така че поведението му да съответства на това на нативната API имплементация.

Този тип детайли може да изглеждат несъществени за потребителя, но са от решаващо значение в слоя за превод. По-старите игри могат да разчитат на специфични поведения, свързани със създаването и унищожаването на обекти, и привидно малка разлика може да доведе до грешки, които са трудни за диагностициране.

По този начин новата имплементация намалява шансовете някои заглавия да не успеят да управляват графичните си устройства по начин, който D7VK не е очаквал.

D7VK 2.2 въвежда подобрения в прозрачността, използвайки цветен ключ.

D7VK 2.2 също така променя управлението на цветовото кодиране на устройства, поддържащи чисто Direct3D 3. Досега проектът използваше много опростен модел, при който тази функция винаги оставаше активирана при определени обстоятелства.

Новата версия позволява прецизен контрол върху това кога да се активира, като по-точно възпроизвежда поведението на Direct3D 3. Това е особено важно за по-стари игри, които използват техники за прозрачност, базирани на специфични цветове.

Освен това, изчисленията, свързани с нормализираните цветови диапазони, са оптимизирани. Тези стойности вече се актуализират само когато описанието на повърхността се промени, което позволява кеширането им и повторното им използване по-късно.

Резултатът би трябвало да бъде малко до умерено подобрение в производителността в игри, които използват прозрачност на цветните ключове, както и по-коректно поведение.

Граничните случаи в буферите за изпълнение са коригирани

Друг важен аспект на D7VK 2.2 е преработката на валидациите на буферите за изпълнение на Direct3D 3. Проектът е реорганизирал част от тази логика, за да се справят с различни гранични случаи, идентифицирани по време на тестването.

За да провери очакваното поведение на API, разработчикът е успял да разчита и на Wine тестове, специално свързани с Direct3D 3. Тези тестове позволяват сравняване на поведението на D7VK с очакваното от съвместима имплементация и откриване на разлики, които биха могли да останат незабелязани при използване само на добре познати игри.

Тази работа е особено ценна за толкова стар API, където заглавията, достъпни за тестване, са оскъдни и не винаги покриват всички възможности на оригиналната имплементация.

По-голяма устойчивост на текстури в Direct3D 5 и 3

Актуализацията не е ограничена само до Direct3D 3. D7VK 2.2 също така подобрява обработката на текстури, използвани от Direct3D 5 и Direct3D 3, за да предотврати излизането на подлежащите повърхности извън обхват, докато все още се използват.

Промяната повишава надеждността на обработката на графичните ресурси и може да отстрани грешки, които се появяват само при определени последователности от операции. Разработчикът също така отбелязва, че това подобрение е оказало положителен ефект върху Frogger , първоначално издаден през 1997 г.

Пачът показва как вътрешните промени, предназначени да адресират проблеми с управлението на ресурсите, могат да имат видими ефекти върху конкретни игри, дори когато модификацията не е специално проектирана за тях.

D7VK 2.2 също коригира проблеми с трансформациите и матриците.

D7VK 2.2 също така коригира грешка, свързана с трансформацията на буферите за изпълнение на Direct3D 3. Проблемът е причинен от неправилно определяне на FVF формата, използван за вертексни входни данни.

Проблем с изчисленията на проекционните матрици в стари версии също е отстранен. Грешката е открита чрез Wine тест, който не се е държал очаквано и е можел да повлияе негативно на определени Direct3D 6, 5 и 3 приложения.

Тези промени допълнително демонстрират важността на тестовете за съвместимост за D7VK. Много от проблемите с по-старите графични API не се появяват непременно в най-популярните игри, а по-скоро в специфични комбинации от функции, които могат да останат скрити с години.

По-малко режийни разходи за стари пътища за рисуване

Новата версия също така реорганизира пътя на рисуване Begin() / Vertex() / End() Използва се от Direct3D 6 и Direct3D 5. Модификацията намалява консумацията на памет и осигурява леко подобрение в производителността.

Frogger отново е сред игрите, които могат да се възползват от тази промяна. Въпреки че тази оптимизация няма да удвои FPS на всички ретро заглавия, тя помага за намаляване на част от натрупаните режийни разходи по маршрутите, използвани от по-старите API.

D7VK вече е получил значителни оптимизации на производителността в предишни версии, така че текущата работа е все по-фокусирана върху усъвършенстване на имплементацията и елиминиране на ненужните разходи.

D7VK 2.2 част от DXVK 3.1

Друга важна характеристика на тази версия е, че D7VK 2.2 е заменена от DXVK 3.1 . Това позволява на проекта да се възползва от по-нова база и да запази имплементацията си в съответствие с еволюцията на DXVK.

Връзката между двата проекта е особено важна. D7VK е възникнал като разклонение на DXVK, специализирано в по-стари Direct3D API, които не са обхванати от стандартното използване на DXVK, докато и двата използват Vulkan като дестинация за графични извиквания, произхождащи от Windows.

Благодарение на тази връзка, структурните подобрения, които идват в DXVK, могат да послужат като основа за продължаване на развитието на D7VK, без да се налага да разработва от нулата цялата инфраструктура, необходима за комуникация с Vulkan.

Проект, предназначен да възроди класически игри

D7VK има много специфична цел в рамките на Linux екосистемата: да позволи на Windows игри, които използват Direct3D 7, 6, 5 и 3, да работят с Vulkan. Това го отличава от DXVK, който е фокусиран предимно върху Direct3D 9, 10 и 11.

Значението на проекта се увеличава, когато става въпрос за заглавия, които зависят от графични технологии, които Wine не имплементира директно по същия начин или които могат да се възползват от по-точен превод към Vulkan.

Чрез комбиниране на D7VK с Wine или Proton, потребителите на Linux могат да възстановят значително количество софтуер от края на 20-ти и началото на 21-ви век, без непременно да се налага да прибягват до стара инсталация на Windows.

За тези, които използват Wine или Proton, за да играят игри на Linux и се интересуват от възраждане на класически заглавия, D7VK 2.2 укрепва една от най-важните части от инфраструктурата за съвместимост. И макар много от подобренията му да са невидими за потребителя, всяка корекция увеличава шансовете друга игра, загубена в ерата на Direct3D 3, 5, 6 или 7, отново да функционира правилно на съвременна Linux система.


Добавяне като предпочитан източник в Google