
D7VK 2.2 je teraz k dispozícii ako nová verzia vrstvy prekladu grafiky určenej na spúšťanie klasických hier pre Windows na Linuxe. Projekt, odvodený od DXVK, sa zameriava na preklad starších rozhraní API Direct3D 7, 6, 5 a 3 do Vulkanu pre použitie s Wine a Proton a táto nová verzia venuje významnú časť svojej práce jednej z oblastí, ktorá mala stále najviac nedostatkov: podporu Direct3D 3.
Aktualizácia prichádza len niekoľko týždňov po D7VK 2.1 a pokračuje v procese zdokonaľovania technológie, ktorá je obzvlášť zaujímavá pre tých, ktorí chcú hrať hry z konca 90. a začiatku 2000. storočia na moderných systémoch Linux. Okrem vylepšenia Direct3D 3 obsahuje D7VK 2.2 množstvo opráv chýb a interných úprav a je založená na nedávnej verzii DXVK 3.1.
D7VK 2.2 sa zameriava na Direct3D 3
Hlavná nová funkcia v D7VK 2.2 súvisí s Direct3D 3, API, ktoré trochu zaostávalo za ostatnými staršími technológiami podporovanými projektom. Hoci hry Direct3D 3, ktoré vývojár dokázal zhromaždiť a otestovať, už s D7VK fungovali, stále existovalo niekoľko hraničných prípadov a správania, ktoré neboli implementované správne.
Toto bolo obzvlášť problematické, pretože katalóg hier využívajúcich Direct3D 3 je ťažké rekonštruovať. Ide o veľmi staré tituly, z ktorých mnohé už nie sú komerčne dostupné alebo sa ťažko zohľadňujú, čo sťažuje testovanie všetkých možných implementácií, s ktorými by sa v praxi mohlo stretnúť.
V tejto verzii vývojár prepracoval veľkú časť implementácie Direct3D 3, aby sa priblížil úrovni vyspelosti dosiahnutej ostatnými API kompatibilnými s D7VK.
Správanie zariadení D3D3 zodpovedá originálu
Jednou z technických zmien je prepracovanie systému počítania referencií pre zariadenia Direct3D 3. D7VK 2.2 upravuje tento mechanizmus tak, aby jeho správanie zodpovedalo správaniu natívnej implementácie API.
Tento typ detailu sa môže používateľovi zdať irelevantný, ale v prekladovej vrstve je kľúčový. Staršie hry sa môžu spoliehať na špecifické správanie súvisiace s vytváraním a ničením objektov a zdanlivo malý rozdiel môže viesť k chybám, ktoré je ťažké diagnostikovať.
Nová implementácia tak znižuje pravdepodobnosť, že niektoré tituly nedokážu spravovať svoje grafické zariadenia spôsobom, ktorý D7VK neočakával.
D7VK 2.2 prináša vylepšenia priehľadnosti pomocou farebného kľúča
D7VK 2.2 tiež upravuje správu farebného kľúčovania na zariadeniach s čisto Direct3D 3. Doteraz projekt používal veľmi jednoduchý model, v ktorom táto funkcia zostala za určitých okolností vždy povolená.
Nová verzia umožňuje presnú kontrolu nad tým, kedy ju povoliť, a vernejšie reprodukuje správanie Direct3D 3. Toto je obzvlášť dôležité pre staršie hry, ktoré používajú techniky priehľadnosti založené na špecifických farbách.
Okrem toho boli optimalizované výpočty týkajúce sa normalizovaných farebných rozsahov. Tieto hodnoty sa teraz aktualizujú iba pri zmene popisu povrchu, čo umožňuje ich uloženie do vyrovnávacej pamäte a neskoršie opätovné použitie.
Výsledkom by malo byť malé až mierne zlepšenie výkonu v hrách, ktoré používajú priehľadnosť farebných klávesov, ako aj správnejšie správanie.
Opravené sú okrajové prípady vo vyrovnávacích pamätiach vykonávania.
Ďalším dôležitým aspektom D7VK 2.2 je revízia validácií vyrovnávacej pamäte vykonávania Direct3D 3. Projekt reorganizoval časť tejto logiky s cieľom riešiť rôzne okrajové prípady identifikované počas testovania.
Na overenie očakávaného správania rozhrania API sa vývojár mohol spoľahnúť aj na testy Wine, ktoré sa špecificky týkajú rozhrania Direct3D 3. Tieto testy umožňujú porovnať správanie D7VK s očakávaným správaním od kompatibilnej implementácie a odhaliť rozdiely, ktoré by mohli zostať nepovšimnuté pri použití iba známych hier.
Táto práca je obzvlášť cenná pre také staré API, kde sú tituly dostupné na testovanie vzácne a nie vždy pokrývajú všetky možnosti pôvodnej implementácie.
Väčšia robustnosť pre textúry Direct3D 5 a 3
Aktualizácia sa neobmedzuje len na Direct3D 3. D7VK 2.2 tiež vylepšuje spracovanie textúr používaných Direct3D 5 a Direct3D 3, aby sa zabránilo tomu, aby sa podkladové povrchy dostali mimo dosahu počas ich používania.
Táto zmena zvyšuje robustnosť spracovania grafických zdrojov a dokáže vyriešiť chyby, ktoré sa objavujú iba pri určitých postupnostiach operácií. Vývojár tiež poznamenáva, že toto vylepšenie malo pozitívny vplyv na Frogger , pôvodne vydaný v roku 1997.
Táto záplata ukazuje, ako môžu mať interné zmeny určené na riešenie problémov so správou zdrojov viditeľné účinky na konkrétne hry, a to aj v prípade, že úprava nie je pre ne špecificky navrhnutá.
D7VK 2.2 tiež opravuje problémy s transformáciou a maticami
D7VK 2.2 tiež opravuje chybu súvisiacu s transformáciou vyrovnávacích pamätí vykonávania Direct3D 3. Problém bol spôsobený nesprávnym určením formátu FVF použitého pre vertexové vstupy.
Opravený bol aj problém s výpočtami starších projekčných matíc. Chyba bola objavená prostredníctvom testu Wine, ktorý sa nesprával podľa očakávaní a mohol mať negatívny vplyv na určité aplikácie Direct3D 6, 5 a 3.
Tieto zmeny ďalej demonštrujú dôležitosť testovania kompatibility pre D7VK. Mnohé problémy so staršími grafickými API sa nemusia nevyhnutne objavovať v najpopulárnejších hrách, ale skôr v špecifických kombináciách funkcií, ktoré môžu zostať skryté celé roky.
Nižšia réžia na starších cestách kreslenia
Nová verzia tiež reorganizuje cestu kreslenia Begin() / Vertex() / End() Používané v Direct3D 6 a Direct3D 5. Táto úprava znižuje spotrebu pamäte a poskytuje malé zlepšenie výkonu.
Frogger opäť patrí medzi hry, ktoré môžu z tejto zmeny profitovať. Hoci táto optimalizácia nezdvojnásobí FPS všetkých retro titulov, pomôže znížiť časť réžie nahromadenej na trasách používaných staršími API.
D7VK už v predchádzajúcich verziách prešiel významnými optimalizáciami výkonu, takže súčasná práca sa čoraz viac zameriava na zdokonaľovanie implementácie a elimináciu zbytočných nákladov.
D7VK 2.2 súčasť DXVK 3.1
Ďalšou dôležitou vlastnosťou tejto verzie je, že D7VK 2.2 bola nahradená verziou DXVK 3.1 . To umožňuje projektu využívať novší základ a udržiavať jeho implementáciu v súlade s vývojom DXVK.
Vzťah medzi týmito dvoma projektmi je obzvlášť dôležitý. D7VK vznikol ako odnož DXVK, ktorá sa špecializuje na staršie rozhrania Direct3D API, ktoré nie sú pokryté štandardným používaním DXVK, pričom oba používajú Vulkan ako cieľ pre grafické volania pochádzajúce z Windowsu.
Vďaka tomuto vzťahu môžu štrukturálne vylepšenia, ktoré prichádzajú do DXVK, slúžiť ako základ pre ďalší vývoj D7VK bez toho, aby musel od začiatku vyvíjať všetku infraštruktúru potrebnú na komunikáciu s Vulkanom.
Projekt zameraný na oživenie klasických hier
D7VK má v rámci ekosystému Linuxu veľmi špecifický cieľ: umožniť spustenie hier pre Windows, ktoré používajú Direct3D 7, 6, 5 a 3, pomocou Vulkanu. To ho odlišuje od DXVK, ktorý sa primárne zameriava na Direct3D 9, 10 a 11.
Dôležitosť projektu sa zvyšuje, pokiaľ ide o tituly, ktoré závisia od grafických technológií, ktoré Wine priamo neimplementuje rovnakým spôsobom, alebo ktorým by prospel presnejší preklad do Vulkanu.
Kombináciou D7VK s Wine alebo Proton môžu používatelia Linuxu obnoviť značné množstvo softvéru z konca 20. a začiatku 21. storočia bez toho, aby sa museli uchýliť k starej inštalácii Windowsu.
Pre tých, ktorí používajú Wine alebo Proton na hranie hier na Linuxe a zaujímajú sa o oživenie klasických titulov, D7VK 2.2 posilňuje jednu z najdôležitejších častí infraštruktúry kompatibility. A hoci mnohé z jeho vylepšení môžu byť pre používateľa neviditeľné, každá oprava zvyšuje šance, že ďalšia hra stratená v ére Direct3D 3, 5, 6 alebo 7 bude opäť správne fungovať na modernom systéme Linux.