
D7VK 2.2 on nyt saatavilla uutena versiona grafiikan käännöskerroksesta, joka on suunniteltu klassisten Windows-pelien suorittamiseen Linuxissa. DXVK:sta johdettu projekti keskittyy vanhempien Direct3D 7-, 6-, 5- ja 3-API-rajapintojen kääntämiseen Vulkaniksi käytettäväksi Winen ja Protonin kanssa, ja tämä uusi versio omistaa merkittävän osan työstään yhdelle alueista, joilla oli edelleen eniten puutteita: Direct3D 3 -tuelle.
Päivitys saapuu vain muutama viikko D7VK 2.1:n jälkeen ja jatkaa teknologian kypsymisprosessia, joka on erityisen mielenkiintoinen niille, jotka haluavat pelata 90-luvun lopun ja 2000-luvun alun pelejä nykyaikaisilla Linux-järjestelmillä. Direct3D 3:n parannusten lisäksi D7VK 2.2 sisältää lukuisia virheenkorjauksia ja sisäisiä säätöjä, ja se perustuu uuteen DXVK 3.1 -versioon.
D7VK 2.2 keskittyy Direct3D 3:een
D7VK 2.2 :n tärkein uusi ominaisuus liittyy Direct3D 3:een, API:in, joka oli jäänyt jonkin verran jälkeen projektin tukemista muista vanhemmista teknologioista. Vaikka kehittäjän keräämät ja testaamat Direct3D 3 -pelit toimivat jo D7VK:n kanssa, useita reunatapauksia ja toimintatapoja ei toteutettu oikein.
Tämä oli erityisen ongelmallista, koska Direct3D 3:a käyttävien pelien luetteloa on vaikea rekonstruoida. Nämä ovat hyvin vanhoja nimikkeitä, joista monet eivät ole enää kaupallisesti saatavilla tai niitä on vaikea löytää, mikä tekee kaikkien käytännössä mahdollisesti esiintyvien toteutusten testaamisesta haastavaa.
Tässä versiossa kehittäjä on tarkistanut suuren osan Direct3D 3 -toteutuksesta tuodakseen sen lähemmäksi muiden D7VK:n kanssa yhteensopivien API-rajapintojen saavuttamaa kypsyystasoa.
D3D3-laitteiden toiminta vastaa alkuperäistä
Yksi teknisistä muutoksista liittyy Direct3D 3 -laitteiden referenssilaskentajärjestelmän uudelleen tekemiseen. D7VK 2.2 muokkaa tätä mekanismia niin, että sen toiminta vastaa natiivin API-toteutuksen toimintaa.
Tämän tyyppinen yksityiskohta saattaa vaikuttaa käyttäjälle merkityksettömältä, mutta se on ratkaisevan tärkeää käännöstasolla. Vanhemmat pelit voivat luottaa tiettyihin objektien luomiseen ja tuhoamiseen liittyviin käyttäytymismalleihin, ja näennäisesti pieni ero voi johtaa virheisiin, joita on vaikea diagnosoida.
Uusi toteutus vähentää siten todennäköisyyttä, että tietyt pelit eivät hallitse grafiikkalaitteitaan tavalla, jota D7VK ei odottanut.
D7VK 2.2 tuo parannuksia läpinäkyvyyteen väriavaimen avulla
D7VK 2.2 muokkaa myös väriavainnuksen hallintaa puhtaissa Direct3D 3 -laitteissa. Tähän asti projektissa on käytetty hyvin yksinkertaista mallia, jossa tämä toiminto on pysynyt aina käytössä tietyissä olosuhteissa.
Uusi versio mahdollistaa tarkan hallinnan siitä, milloin se otetaan käyttöön, ja toistaa Direct3D 3:n toiminnan uskollisemmin. Tämä on erityisen tärkeää vanhemmissa peleissä, jotka käyttävät tiettyihin väreihin perustuvia läpinäkyvyystekniikoita.
Lisäksi normalisoituihin värialueisiin liittyviä laskelmia on optimoitu. Nämä arvot päivittyvät nyt vain pinnan kuvauksen muuttuessa, mikä mahdollistaa niiden välimuistiin tallentamisen ja uudelleenkäytön myöhemmin.
Tuloksena pitäisi olla pieni tai kohtalainen suorituskyvyn parannus peleissä, jotka käyttävät värinäppäinten läpinäkyvyyttä, sekä oikeampi toiminta.
Suorituspuskurien rajatapaukset on korjattu
Toinen tärkeä D7VK 2.2:n osa-alue on Direct3D 3:n suorituspuskurin validointien tarkistaminen. Projektissa on järjestetty uudelleen osa tästä logiikasta, jotta voidaan käsitellä testauksen aikana havaittuja erilaisia ​​reunatapauksia.
API:n odotetun toiminnan varmistamiseksi kehittäjä on myös voinut luottaa Direct3D 3:een liittyviin Wine-testeihin. Näiden testien avulla voidaan verrata D7VK:n toimintaa yhteensopivan toteutuksen odotettuun toimintaan ja havaita eroja, jotka saattavat jäädä huomaamatta käytettäessä vain tunnettuja pelejä.
Tämä työ on erityisen arvokasta näin vanhalle API:lle, jossa testattavaksi saatavilla olevia nimikkeitä on niukasti eikä aina kata kaikkia alkuperäisen toteutuksen mahdollisuuksia.
Suurempi kestävyys Direct3D 5- ja 3-tekstuureille
Päivitys ei rajoitu Direct3D 3:een. D7VK 2.2 parantaa myös Direct3D 5:n ja Direct3D 3:n käyttämien tekstuurien käsittelyä estääkseen alla olevien pintojen menemisen kantaman ulkopuolelle niiden ollessa vielä käytössä.
Muutos parantaa grafiikkaresurssien käsittelyn kestävyyttä ja voi korjata virheitä, jotka ilmenevät vain tiettyjen toimintosarjojen aikana. Kehittäjä huomauttaa myös, että tällä parannuksella on ollut positiivinen vaikutus Froggeriin , joka julkaistiin alun perin vuonna 1997.
Korjaus osoittaa, kuinka resurssienhallintaongelmien ratkaisemiseen tarkoitetut sisäiset muutokset voivat lopulta vaikuttaa näkyvinä tiettyihin peleihin, vaikka muutosta ei olisikaan erityisesti suunniteltu niitä varten.
D7VK 2.2 korjaa myös muunnos- ja matriisitehtäviä
D7VK 2.2 korjaa myös Direct3D 3:n suorituspuskurien muunnokseen liittyvän virheen. Ongelman aiheutti verteksitulojen FVF-muodon virheellinen määritys.
Myös vanhojen projektiomatriisilaskennan ongelma on korjattu. Virhe havaittiin Wine-testin aikana, eikä testi toiminut odotetulla tavalla ja olisi voinut vaikuttaa negatiivisesti tiettyihin Direct3D 6-, 5- ja 3-sovelluksiin.
Nämä muutokset osoittavat entisestään D7VK:n yhteensopivuustestauksen tärkeyden. Monet vanhempien grafiikkarajapintojen ongelmista eivät välttämättä esiinny suosituimmissa peleissä, vaan pikemminkin tietyissä ominaisuusyhdistelmissä, jotka voivat pysyä piilossa vuosia.
Vähemmän kuluja perinteisillä piirtoreiteillä
Uusi versio järjestää myös piirustuspolun uudelleen. Begin() / Vertex() / End() Direct3D 6:n ja Direct3D 5:n käyttämä. Muutos vähentää muistin kulutusta ja parantaa hieman suorituskykyä.
Jälleen kerran Frogger on yksi niistä peleistä, jotka voivat hyötyä tästä muutoksesta. Vaikka tämä optimointi ei kaksinkertaista kaikkien retropelien FPS:ää, se auttaa vähentämään vanhempien API-rajapintojen käyttämien reittien aiheuttamaa ylimääräistä kuormitusta.
D7VK:n suorituskykyä on jo optimoitu merkittävästi aiemmissa versioissa, joten nykyinen työ keskittyy yhä enemmän toteutuksen hiomiseen ja tarpeettomien kustannusten poistamiseen.
D7VK 2.2 osa DXVK 3.1:tä
Tämän version toinen tärkeä ominaisuus on, että D7VK 2.2 on korvattu DXVK 3.1: llä . Tämä mahdollistaa projektin hyötyä uudemmasta pohjasta ja pitää toteutuksensa linjassa DXVK:n kehityksen kanssa.
Näiden kahden projektin välinen suhde on erityisen tärkeä. D7VK sai alkunsa DXVK:n haarautumana, joka erikoistui vanhempiin Direct3D-rajapintoihin, joita DXVK:n standardikäyttö ei kata, kun taas molemmat käyttävät Vulkania Windowsista tulevien grafiikkakutsujen kohteena.
Tämän suhteen ansiosta DXVK:n rakenteelliset parannukset voivat toimia pohjana D7VK:n jatkuvalle kehitykselle ilman, että kaikkea Vulkanin kanssa kommunikointiin tarvittavaa infrastruktuuria tarvitsee kehittää tyhjästä.
Projekti, jonka tarkoituksena on elvyttää klassisia pelejä
D7VK:lla on hyvin erityinen tavoite Linux-ekosysteemissä: mahdollistaa Direct3D 7:ää, 6:tta, 5:tä ja 3:a käyttävien Windows-pelien ajaminen Vulkanin avulla. Tämä erottaa sen DXVK:sta, joka keskittyy ensisijaisesti Direct3D 9:ään, 10:een ja 11:een.
Projektin merkitys kasvaa, kun kyse on nimikkeistä, jotka ovat riippuvaisia ​​grafiikkateknologioista, joita Wine ei toteuta suoraan samalla tavalla, tai jotka voisivat hyötyä tarkemmasta käännöksestä Vulkanille.
Yhdistämällä D7VK:n Winen tai Protonin kanssa Linux-käyttäjät voivat palauttaa huomattavan määrän ohjelmistoja 1900-luvun lopulta ja 2000-luvun alusta ilman, että heidän tarvitsee välttämättä turvautua vanhaan Windows-asennukseen.
Niille, jotka käyttävät Wineä tai Protonia pelaamiseen Linuxissa ja ovat kiinnostuneita elvyttämään klassikkopelejä, D7VK 2.2 vahvistaa yhtä yhteensopivuusinfrastruktuurin tärkeimmistä osista. Ja vaikka monet sen parannuksista saattavat olla käyttäjälle näkymättömiä, jokainen korjaus lisää mahdollisuuksia, että jokin Direct3D 3-, 5-, 6- tai 7-aikakaudella kadonnut peli voi jälleen toimia oikein nykyaikaisessa Linux-järjestelmässä.