
D7VK 2.2 sada je dostupan kao nova verzija sloja za prevođenje grafike dizajniranog za pokretanje klasičnih Windows igara na Linuxu. Projekt, izveden iz DXVK-a, fokusira se na prevođenje starijih Direct3D 7, 6, 5 i 3 API-ja na Vulkan za korištenje s Wineom i Protonom, a ova nova verzija značajan dio svog rada posvećuje jednom od područja koje je još uvijek imalo najviše nedostataka: podršci za Direct3D 3.
Ažuriranje stiže samo nekoliko tjedana nakon D7VK 2.1 i nastavlja proces sazrijevanja tehnologije koja je posebno zanimljiva za one koji žele igrati igre iz kasnih 90-ih i ranih 2000-ih na modernim Linux sustavima. Osim poboljšanja Direct3D 3, D7VK 2.2 uključuje brojne ispravke grešaka i interne prilagodbe, a temelji se na nedavnoj verziji DXVK 3.1.
D7VK 2.2 se fokusira na Direct3D 3
Glavna nova značajka u D7VK 2.2 povezana je s Direct3D 3, API-jem koji je donekle zaostajao za drugim starijim tehnologijama koje je projekt podržavao. Iako su Direct3D 3 igre koje je programer uspio prikupiti i testirati već radile s D7VK, još uvijek je bilo nekoliko rubnih slučajeva i ponašanja koja nisu bila ispravno implementirana.
To je bilo posebno problematično jer je katalog igara koje koriste Direct3D 3 teško rekonstruirati. Riječ je o vrlo starim naslovima, od kojih mnogi više nisu komercijalno dostupni ili ih je teško pronaći, što otežava testiranje svih mogućih implementacija koje bi se mogle susresti u praksi.
S ovom verzijom, programer je revidirao veliki dio implementacije Direct3D 3 kako bi je približio razini zrelosti koju su postigli drugi API-ji kompatibilni s D7VK.
Ponašanje D3D3 uređaja odgovara originalu
Jedna od tehničkih promjena uključuje preradu sustava brojanja referenci za Direct3D 3 uređaje. D7VK 2.2 modificira ovaj mehanizam tako da njegovo ponašanje odgovara onome kod izvorne API implementacije.
Ova vrsta detalja može se korisniku činiti nebitnom, ali je ključna u sloju prijevoda. Starije igre mogu se oslanjati na specifična ponašanja povezana sa stvaranjem i uništavanjem objekata, a naizgled mala razlika može dovesti do pogrešaka koje je teško dijagnosticirati.
Nova implementacija tako smanjuje šanse da određeni naslovi ne uspiju upravljati svojim grafičkim uređajima na način koji D7VK nije očekivao.
D7VK 2.2 uvodi poboljšanja transparentnosti korištenjem ključa boja
D7VK 2.2 također mijenja upravljanje tipkanjem boja na čistim Direct3D 3 uređajima. Do sada je projekt koristio vrlo jednostavan model u kojem je ova funkcija uvijek ostala omogućena pod određenim okolnostima.
Nova verzija omogućuje preciznu kontrolu nad time kada ga omogućiti, vjernije reproducirajući ponašanje Direct3D 3. To je posebno važno za starije igre koje koriste tehnike transparentnosti temeljene na određenim bojama.
Osim toga, optimizirani su izračuni vezani uz normalizirane raspone boja. Te se vrijednosti sada ažuriraju samo kada se promijeni opis površine, što omogućuje njihovo predmemoriranje i kasniju ponovnu upotrebu.
Rezultat bi trebao biti malo do umjereno poboljšanje performansi u igrama koje koriste prozirnost tipki u boji, kao i ispravnije ponašanje.
Granični slučajevi u međuspremnicima izvršenja su ispravljeni
Još jedan važan aspekt D7VK 2.2 je revizija validacija međuspremnika za izvršavanje Direct3D 3. Projekt je reorganizirao dio ove logike kako bi se riješili različiti rubni slučajevi identificirani tijekom testiranja.
Kako bi provjerio očekivano ponašanje API-ja, programer se također mogao osloniti na Wine testove posebno vezane uz Direct3D 3. Ovi testovi omogućuju usporedbu ponašanja D7VK-a s onim očekivanim od kompatibilne implementacije i otkrivanje razlika koje bi mogle proći nezapaženo kada se koriste samo dobro poznate igre.
Ovaj rad je posebno vrijedan za tako stari API, gdje su naslovi dostupni za testiranje rijetki i ne pokrivaju uvijek sve mogućnosti izvorne implementacije.
Veća robusnost za teksture Direct3D 5 i 3
Ažuriranje nije ograničeno samo na Direct3D 3. D7VK 2.2 također poboljšava rukovanje teksturama koje koriste Direct3D 5 i Direct3D 3 kako bi se spriječilo da temeljne površine izađu izvan dosega dok se još koriste.
Promjena povećava robusnost rukovanja grafičkim resursima i može riješiti pogreške koje se pojavljuju samo pod određenim nizovima operacija. Programer također napominje da je ovo poboljšanje imalo pozitivan učinak na Frogger , izvorno objavljen 1997. godine.
Zakrpa pokazuje kako interne promjene namijenjene rješavanju problema upravljanja resursima mogu imati vidljive učinke na određene igre, čak i kada modifikacija nije posebno dizajnirana za njih.
D7VK 2.2 također ispravlja probleme s transformacijom i matricama
D7VK 2.2 također ispravlja grešku povezanu s transformacijom međuspremnika za izvršavanje Direct3D 3. Problem je bio uzrokovan netočnim određivanjem FVF formata koji se koristi za ulazne vrijednosti vrhova.
Problem s izračunima matrice projekcije za starije verzije također je ispravljen. Greška je otkrivena putem Wine testa koji se nije ponašao kako se očekivalo i mogao je negativno utjecati na određene Direct3D 6, 5 i 3 aplikacije.
Ove promjene dodatno pokazuju važnost testiranja kompatibilnosti za D7VK. Mnogi problemi sa starijim grafičkim API-jima ne pojavljuju se nužno u najpopularnijim igrama, već u specifičnim kombinacijama značajki koje mogu ostati skrivene godinama.
Manje opterećenja na naslijeđenim putevima crtanja
Nova verzija također reorganizira putanju crtanja Begin() / Vertex() / End() Koristi se u Direct3D 6 i Direct3D 5. Modifikacija smanjuje potrošnju memorije i pruža malo poboljšanje performansi.
Frogger je još jednom među igrama koje mogu imati koristi od ove promjene. Iako ova optimizacija neće udvostručiti FPS svih retro naslova, pomaže u smanjenju dijela opterećenja koje se nakuplja na rutama koje koriste stariji API-ji.
D7VK je već u prethodnim verzijama dobio značajne optimizacije performansi, pa se trenutni rad sve više usmjerava na usavršavanje implementacije i uklanjanje nepotrebnih troškova.
D7VK 2.2 dio DXVK 3.1
Još jedna važna značajka ove verzije je da je D7VK 2.2 zamijenjen s DXVK 3.1 . To omogućuje projektu da iskoristi noviju bazu i da njegova implementacija bude usklađena s evolucijom DXVK-a.
Odnos između dva projekta je posebno važan. D7VK je nastao kao ogranak DXVK-a specijaliziran za starije Direct3D API-je koji nisu obuhvaćeni standardnom upotrebom DXVK-a, dok oba koriste Vulkan kao odredište za grafičke pozive koji potječu iz Windowsa.
Zahvaljujući ovom odnosu, strukturna poboljšanja koja dolaze u DXVK mogu poslužiti kao osnova za daljnji razvoj D7VK-a bez potrebe za razvojem sve infrastrukture potrebne za komunikaciju s Vulkanom od nule.
Projekt osmišljen za oživljavanje klasičnih igara
D7VK ima vrlo specifičan cilj unutar Linux ekosustava: omogućiti Windows igrama koje koriste Direct3D 7, 6, 5 i 3 pokretanje pomoću Vulkana. To ga razlikuje od DXVK-a, koji je prvenstveno usmjeren na Direct3D 9, 10 i 11.
Važnost projekta raste kada su u pitanju naslovi koji ovise o grafičkim tehnologijama koje Wine ne implementira izravno na isti način ili kojima bi koristio točniji prijevod na Vulkan.
Kombiniranjem D7VK s Wineom ili Protonom, korisnici Linuxa mogu oporaviti znatnu količinu softvera s kraja 20. i početka 21. stoljeća bez nužnog korištenja stare instalacije sustava Windows.
Za one koji koriste Wine ili Proton za igranje igara na Linuxu i zainteresirani su za oživljavanje klasičnih naslova, D7VK 2.2 jača jedan od najvažnijih dijelova infrastrukture kompatibilnosti. I dok mnoga njegova poboljšanja mogu biti nevidljiva korisniku, svaki popravak povećava šanse da neka druga igra izgubljena u eri Direct3D 3, 5, 6 ili 7 ponovno može ispravno funkcionirati na modernom Linux sustavu.