
D7VK 2.2 finns nu tillgänglig som en ny version av grafiköversättningslagret som är utformat för att köra klassiska Windows-spel på Linux. Projektet, som är härlett från DXVK, fokuserar på att översätta de äldre Direct3D 7, 6, 5 och 3 API:erna till Vulkan för användning med Wine och Proton, och den här nya versionen ägnar en betydande del av sitt arbete åt ett av de områden som fortfarande hade störst brister: Direct3D 3-stöd.
Uppdateringen kommer bara några veckor efter D7VK 2.1 och fortsätter mognadsprocess för en teknik som är särskilt intressant för de som vill spela spel från slutet av 90-talet och början av 2000-talet på moderna Linux-system. Förutom att förbättra Direct3D 3 innehåller D7VK 2.2 ett flertal buggfixar och interna justeringar, och är baserad på den senaste DXVK 3.1-versionen.
D7VK 2.2 fokuserar på Direct3D 3
Den viktigaste nya funktionen i D7VK 2.2 är relaterad till Direct3D 3, ett API som hade hamnat något efter de andra äldre teknikerna som stöddes av projektet. Även om Direct3D 3-spelen som utvecklaren hade kunnat samla in och testa redan fungerade med D7VK, fanns det fortfarande flera edge-fall och beteenden som inte implementerades korrekt.
Detta var särskilt problematiskt eftersom katalogen av spel som använder Direct3D 3 är svår att rekonstruera. Det är mycket gamla titlar, av vilka många inte längre är kommersiellt tillgängliga eller svåra att hitta, vilket gör det utmanande att testa alla möjliga implementeringar som kan uppstå i praktiken.
Med den här versionen har utvecklaren reviderat en stor del av Direct3D 3-implementeringen för att föra den närmare den mognadsnivå som uppnåtts av de andra API:erna som är kompatibla med D7VK.
D3D3-enheternas beteende överensstämmer med originalet
En av de tekniska ändringarna innebär att referensräkningssystemet för Direct3D 3-enheter måste göras om. D7VK 2.2 modifierar denna mekanism så att dess beteende matchar den ursprungliga API-implementeringen.
Den här typen av detaljer kan verka irrelevanta för användaren, men de är avgörande i ett översättningslager. Äldre spel kan förlita sig på specifika beteenden relaterade till objektskapande och förstörelse, och en till synes liten skillnad kan leda till fel som är svåra att diagnostisera.
Den nya implementeringen minskar därmed risken för att vissa titlar misslyckas med att hantera sina grafikenheter på ett sätt som D7VK inte förväntade sig.
D7VK 2.2 introducerar förbättringar av transparens med hjälp av färgnyckel
D7VK 2.2 modifierar även hanteringen av färgtangenter på rena Direct3D 3-enheter. Fram tills nu har projektet använt en mycket enkel modell där denna funktion alltid förblev aktiverad under vissa omständigheter.
Den nya versionen möjliggör exakt kontroll över när den ska aktiveras, vilket mer troget återger beteendet hos Direct3D 3. Detta är särskilt viktigt för äldre spel som använder transparenstekniker baserade på specifika färger.
Dessutom har beräkningarna relaterade till normaliserade färgintervall optimerats. Dessa värden uppdateras nu endast när ytbeskrivningen ändras, vilket gör att de kan cachas och återanvändas senare.
Resultatet bör bli en liten till måttlig förbättring av prestandan i spel som använder transparens i färgtangenterna, samt ett mer korrekt beteende.
Gränsfall i exekveringsbuffertar korrigeras
En annan viktig aspekt av D7VK 2.2 är revideringen av Direct3D 3 -valideringarna för exekveringsbufferten . Projektet har omorganiserat en del av denna logik för att hantera olika edge-fall som identifierats under testningen.
För att verifiera API:ets förväntade beteende har utvecklaren också kunnat förlita sig på Wine-tester specifikt relaterade till Direct3D 3. Dessa tester gör det möjligt att jämföra D7VK:s beteende med det som förväntas av en kompatibel implementering och upptäcka skillnader som kan gå obemärkt förbi när man bara använder välkända spel.
Detta arbete är särskilt värdefullt för ett så gammalt API, där de titlar som är tillgängliga för testning är sällsynta och inte alltid täcker alla möjligheter i den ursprungliga implementeringen.
Större robusthet för Direct3D 5- och 3-texturer
Uppdateringen är inte begränsad till Direct3D 3. D7VK 2.2 förbättrar även hanteringen av texturer som används av Direct3D 5 och Direct3D 3 för att förhindra att underliggande ytor hamnar utanför räckhåll medan de fortfarande används.
Ändringen ökar robustheten i hanteringen av grafikresurser och kan åtgärda fel som bara uppstår under vissa operationssekvenser. Utvecklaren noterar också att denna förbättring har haft en positiv effekt på Frogger , som ursprungligen släpptes 1997.
Patchen visar hur interna förändringar som är avsedda att åtgärda problem med resurshantering kan få synliga effekter på specifika spel, även när modifieringen inte är specifikt utformad för dem.
D7VK 2.2 korrigerar även transformations- och matrisproblem
D7VK 2.2 åtgärdar även ett fel relaterat till transformationen av Direct3D 3-exekveringsbuffertar. Problemet orsakades av en felaktig bestämning av FVF-formatet som används för vertexindata.
Ett problem med äldre projektionsmatrisberäkningar har också åtgärdats. Felet upptäcktes genom ett Wine-test som inte betedde sig som förväntat och kunde ha påverkat vissa Direct3D 6-, 5- och 3-applikationer negativt.
Dessa förändringar visar ytterligare vikten av kompatibilitetstester för D7VK. Många av problemen med äldre grafik-API:er dyker inte nödvändigtvis upp i de mest populära spelen, utan snarare i specifika kombinationer av funktioner som kan förbli dolda i åratal.
Mindre omkostnader på äldre ritningsvägar
Den nya versionen omorganiserar även ritningsbanan Begin() / Vertex() / End() Används av Direct3D 6 och Direct3D 5. Modifieringen minskar minnesförbrukningen och ger en liten prestandaförbättring.
Återigen är Frogger bland de spel som kan dra nytta av denna förändring. Även om denna optimering inte kommer att fördubbla FPS:en för alla retrotitlar, hjälper den till att minska en del av den overhead som ackumuleras på de rutter som används av äldre API:er.
D7VK har redan fått betydande prestandaoptimeringar i tidigare versioner, så det nuvarande arbetet fokuseras alltmer på att förfina implementeringen och eliminera onödiga kostnader.
D7VK 2.2 del av DXVK 3.1
En annan viktig funktion i den här versionen är att D7VK 2.2 har ersatts av DXVK 3.1 . Detta gör att projektet kan dra nytta av en nyare bas och hålla implementeringen i linje med utvecklingen av DXVK.
Relationen mellan de två projekten är särskilt viktig. D7VK uppstod som en förgrening av DXVK och specialiserade sig på äldre Direct3D API:er som inte täcks av standard DXVK-användning, medan båda använder Vulkan som destination för grafikanrop som kommer från Windows.
Tack vare denna relation kan de strukturella förbättringar som kommer till DXVK tjäna som en grund för att D7VK ska kunna fortsätta utvecklas utan att behöva utveckla från grunden all infrastruktur som krävs för att kommunicera med Vulkan.
Ett projekt utformat för att återuppliva klassiska spel
D7VK har ett mycket specifikt mål inom Linux-ekosystemet: att tillåta Windows-spel som använder Direct3D 7, 6, 5 och 3 att köras med Vulkan. Detta skiljer det från DXVK, som främst fokuserar på Direct3D 9, 10 och 11.
Projektets betydelse ökar när det gäller titlar som är beroende av grafiktekniker som Wine inte direkt implementerar på samma sätt eller som kan dra nytta av en mer korrekt översättning till Vulkan.
Genom att kombinera D7VK med Wine eller Proton kan Linux-användare återställa en avsevärd mängd programvara från slutet av 1900-talet och början av 2000-talet utan att nödvändigtvis behöva tillgripa en gammal Windows-installation.
För de som använder Wine eller Proton för att spela spel på Linux och är intresserade av att återuppliva klassiska titlar, stärker D7VK 2.2 en av de viktigaste delarna av kompatibilitetsinfrastrukturen. Och även om många av dess förbättringar kan vara osynliga för användaren, ökar varje fix chanserna att ett annat spel som förlorades under Direct3D 3, 5, 6 eller 7-eran återigen kan fungera korrekt på ett modernt Linux-system.