il rilascio del progetto , che fornisce un'implementazione di Direct3D 9 funzionante tramite la traduzione delle chiamate nell'API grafica . Il progetto è basato sul codice del progetto , che è stato ampliato con il supporto per Direct3D 9. Rispetto all'implementazione di Direct3D 9 basata su WineD3D, D9VK consente di ottenere prestazioni migliori, poiché la traduzione di Direct3D 9 attraverso OpenGL è più lenta della traduzione tramite Vulkan.
D9VK può essere utilizzato per eseguire applicazioni 3D e giochi su Linux tramite Wine. Supporta l'esecuzione della maggior parte dei giochi basati su Direct3D 9 che utilizzano la versione 2 o 3 del Shader Model. Il codice del progetto è distribuito sotto licenza libera Zlib. Per utilizzare D9VK è necessario avere driver che supportino l'API Vulkan, come AMD RADV 18.3+, NVIDIA 415.22+, Intel ANV 19.0+ e AMDVLK.
Miglioramenti principali:
- È stata implementata la possibilità di utilizzare più di 4 GB di memoria video in applicazioni a 32 bit, risolvendo problemi durante l'esecuzione di mod per i giochi Skyrim e Oblivion;
- È stata inclusa l'elaborazione asincrona dell'output del rendering su schermo (fase di presentazione). Per ridurre i ritardi nel thread principale di rendering, l'elaborazione dell'output viene eseguita nel thread di invio comandi (command submission thread);
- Sono stati eliminati punti di sincronizzazione superflui nel thread dei comandi durante il recupero dei dati richiesti;
- Il codice per la determinazione del tempo interno è stato tradotto per utilizzare un timer specifico per la piattaforma, il che ha aiutato a risolvere problemi legati al comportamento errato di high_resolution_clock di MinGW;
- È stata garantita la scarica dei buffer in attesa MANAGED e SYSTEMMEM nella fase precedente a PrepareDraw, risolvendo problemi di prestazioni nei giochi Risen e Legend of Heroes: Trails of the Sky;
- Aggiunto supporto per , che ha consentito di implementare un rendering corretto nei giochi SpinTyres e Mudrunner;
- Migliorata la compatibilità con (D3D9Ex). È stata considerata la specificità del trattamento di ResetEx e Reset;
- Effettuata la pulizia e il refactoring del codice;
- Garantito il mapping diretto dei buffer WRITEONLY, il che può avere un impatto positivo sulle prestazioni e aggirare un errore nel gioco
Counter-Strike: Global Offensive, che comportava la continua scrittura nel buffer dopo la sua sblocco; - È stato implementato il metodo , che consente l'uso di finestre di dialogo in applicazioni a schermo intero;
- Implementato il supporto per , tra cui , necessario per SWVP (SoftWare Vertex Processing);
- Ristrutturato il contatore del campionatore, visualizzato sopra l'immagine corrente (heads-up display, HUD);
- Aggiunta l'opzione d3d9.dialogBoxMode, utilizzabile per disattivare il funzionamento solo in modalità schermo intero;
- Effettuate ottimizzazioni delle prestazioni e risolti problemi manifestatisi durante l'esecuzione di giochi come GTA: 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 Speed: Carbon e Risen 1.
Inoltre, si può notare sviluppatore del progetto (implementazione DXGI, Direct3D 10 e Direct3D 11 sopra API Vulkan) ha deciso di concentrare temporaneamente gli sforzi esclusivamente sulla correzione di bug, ritardando l'espansione delle funzionalità. Questo desiderio è legato a preoccupazioni riguardo alla diminuzione della qualità del codice e alla complessità della manutenzione futura. Ogni aggiornamento della branca 1.4.x ha sollevato lamentele su cambiamenti regressivi che non possono essere riprodotti, localizzati e risolti.
Questi problemi richiedono un'analisi delle cause della loro comparsa, altrimenti lasciarli non corretti mentre si continua a espandere le funzionalità potrebbe solo aggravare la situazione e trasformare la manutenzione in un incubo. Tra i piani che lo sviluppatore di DXVK intende realizzare prima di passare a una modalità di sola correzione degli errori c'è l'aggiunta del supporto per alcune estensioni utili di Vulkan e la fusione con i risultati del progetto D9VK.
Nota: a caldo rilascio correttivo D9VK 0.40.1, in cui il valore predefinito vec4(1) per COLOR0 negli shader dei vertici ed è stato risolto un errore, per cui i bit degli slot per le uscite dello shader venivano applicati erroneamente per impostazione predefinita e quindi correttamente corretti dal backend, causando la loro sostituzione con vec4(0).
Fonte: opennet.ru
