D9VK 0.40:n julkaisu, Direct3D 9 -toteutus Vulkanin päällä

tapahtui projektin julkaisu D9VK 0.40, joka tarjoaa Direct3D 9 -toteutuksen, joka toimii kääntämällä kutsut grafiikkasovellusliittymään vulkan. Projekti perustuu projektin koodikantaan Dxvk, joka on laajennettu tukemaan Direct3D 9:ää. Verrattuna WineD3D-pohjaiseen Direct9D 3 -toteutukseen, D9VK saavuttaa paremman suorituskyvyn, koska Direct3D 9 -käännös OpenGL:n kautta on hitaampaa kuin Vulkanin kautta tapahtuva käännös.

D9VK:ta voidaan käyttää 3D-sovellusten ja pelien ajamiseen Linuxissa Winen avulla. Useimmat Direct3D 9:ään perustuvat pelit, jotka käyttävät Shader-mallin versiota 2 tai 3, ovat tuettuja. Projektin koodi jakelija ilmaisella Zlib-lisenssillä. D9VK vaatii ohjaimia, jotka tukevat Vulkan API:ta, kuten AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ ja AMDVLK.

Tärkeimmät parannukset:

  • Mahdollisuus käyttää yli 4 Gt videomuistia 32-bittisissä sovelluksissa on otettu käyttöön, mikä ratkaisi ongelmat Skyrim- ja Oblivion-pelien modien käynnistämisessä;
  • Asynkroninen käsittely renderöintituloksen näyttämiseksi näytöllä on käytössä (esitysvaihe). Päärenderöintisäikeen viiveen vähentämiseksi tuloskäsittely suoritetaan komennon lähetyssäikeessä;
  • Poistettu tarpeettomat komentovirran synkronointipisteet pyydettyjä tietoja haettaessa;
  • Koodi sisäisen ajan määrittämiseksi on käännetty käyttämään alustakohtaista ajastinta, joka auttoi ratkaisemaan MinGW:n high_resolution_clock virheelliseen käyttäytymiseen liittyviä ongelmia;
  • Siirrettyjen puskurien MANAGED ja SYSTEMMEM purkaminen varmistetaan vaiheessa ennen PrepareDraw:n suoritusta, joka ratkaisi suorituskykyongelmia peleissä Risen ja Legend of the Heroes: Trails of the Sky;
  • Lisätty tuki D3DTA_CONSTANT, joka mahdollisti oikean renderöinnin hehkuefekti SpinTyres- ja Mudrunner-peleissä;
  • Parannettu yhteensopivuus kanssa DirectX 9Ex (D3D9Ex). ResetEx- ja Reset-käsittelyn erityispiirteet otetaan huomioon;
  • Puhdistettu ja refaktoroitu koodi;
  • WRITEONLY-puskurien suora kartoitus tarjotaan, mikä voi vaikuttaa positiivisesti suorituskykyyn ja ohittaa pelin vian
    Counter-Strike: Global Offensive, joka johtaa puskuriin kirjoittamisen jatkamiseen sen lukituksen avaamisen jälkeen;

  • Toteutettu menetelmä SetDialogBoxMode, jonka avulla voit käyttää valintaikkunoita koko näytön sovelluksissa;
  • Tuki toteutettu huippupisteiden sekoitusMukaan lukien indeksoitu vertex-sekoitus, vaaditaan SWVP:lle (SoftWare Vertex Processing);
  • Näytteenottolaskuri, joka näkyy nykyisen kuvan päällä (heads-up-näyttö, HUD), on suunniteltu uudelleen;
  • Lisätty vaihtoehto d3d9.dialogBoxMode, jolla voidaan estää työskentely vain koko näytön tilassa;
  • Teki suorituskykyoptimointeja ja ratkaisi GTA-pelien julkaisun yhteydessä ilmeneviä ongelmia: San Andreas, The Masquerade Bloodlines, Max Payne 2, The Sims 2, Silent Hunter 3, Senran Kagura Shinovi, Dungeons and Dragons, Crysis, Metal Slug X, ANGLE, Need for Nopeus: Carbon and Risen 1.

Lisäksi voidaan huomauttaa tarkoitus projektin kehittäjä Dxvk (DXGI:n, Direct3D 10:n ja Direct3D 11:n käyttöönotto Vulkan API:n päälle) keskittyy väliaikaisesti vain virheenkorjauksiin, mikä hidastaa toiminnallisuuden laajenemista. Samanlainen halu aiheutti huoli koodikannan laadun heikkenemisestä ja huollon vaikeutumisesta tulevaisuudessa. Jokainen 1.4.x-haaran päivitys aiheuttaa valituksia regressiivisistä muutoksista, joita ei voida toistaa, lokalisoida tai korjata.

Nämä ongelmat vaativat niiden syiden analysointia, muuten niiden korjaamatta jättäminen ja toiminnallisuuden lisääminen voi vain pahentaa tilannetta ja muuttaa ylläpitoprosessin painajaiseksi. Suunnitelmiin, jotka DXVK-kehittäjä aikoo toteuttaa ennen siirtymistään vain bugikorjaustilaan, kuuluu tuen lisääminen hyödyllisiin Vulkan-laajennuksiin ja yhdistäminen D9VK-projektin kehitykseen.

Lisäys: kuuma kantapäässä muodostettu korjaava julkaisu D9VK 0.40.1, jossa kiinteä asetti vec4(1):n oletusarvoon COLOR0 vertex-varjostimissa ja korjasi virheen, jossa oletusvarjostimen lähtöbitit käytettiin väärin ja siksi taustajärjestelmä korjasi ne väärin, jolloin ne korvattiin vec4(0):lla.

Lähde: opennet.ru

Lisää kommentti