poniedziałek, 22 kwietnia 2019

Instalacja D9VK w Protonie [Aktualizacja]

Aktualizacja 11.08.2019

D9VK jest teraz zintegrowany z Protonem i nie trzeba niczego instalować. Wystarczy w opcjach uruchamiania gry wpisać:

PROTON_USE_D9VK=1 %command%

Jeśli gra nie startuje warto sprawdzić czy są zainstalowane 32-bitowe biblioteki:  libxcb-randr0:i386 mesa-vulkan-drivers:i386

Pierwotny post:

D9VK jest dla Direct3D9 tym samym czym dla Direct3D11 jest DXVK. Tłumaczy wywołania Direct3D do api Vulkan. Niestety D9VK nie jest jeszcze częścią Valve Proton i chcąc z niego skorzystać należy zainstalować odpowiednie DLL samodzielnie.

Uwaga: na chwilę obecną D9VK nie jest ukończonym projektem i wiele gier może działać z błędami lub nie działać w ogóle.

Pobieramy paczkę z prekompilowanymi DLL stąd.

Rozpakowujemy ją w wygodnym miejscu i wchodzimy do katalogu z skryptem instalacyjnym:
cd build/dxvk-release/
Z racji, że chcemy aktywować D9VK dla konkretnej gry ustawiamy zmienną:
export WINEPREFIX=/katalogbiblioteki/SteamLibrary/steamapps/compatdata/identyfikatorgry/pfx
identyfikatorgry - najłatwiej go znaleźć otwierając stronę gry w sklepie Steam, i kopiując liczbę z adresu. Np. w https://store.steampowered.com/app/217140/Rise_of_the_Triad/ identyfikatorem jest 217140.

Następnie uruchamiamy skrypt instalacyjny:
./setup_dxvk.sh install
Powinniśmy zobaczyć okienko wyglądające tak:

 
Od tej chwili gra powinna korzystać z D9VK. Dla poprawy wydajności warto wyłączyć logowanie w opcjach uruchamiania gry:

DXVK_LOG_LEVEL=none %command%
 
Jeśli (to krok opcjonalny) w opcjach uruchamiania gry wpiszemy:
DXVK_HUD=1 DXVK_LOG_LEVEL=none %command%
To w lewym górnym rogu ekranu zobaczymy informację o użyciu D9VK:



Gdyby coś poszło nie tak to D9VK można odinstalować (oczywiście po ustawieniu WINEPREFIX tak samo jak przy instalacji) poleceniem:
./setup_dxvk.sh uninstall


PS
Rise of The Triad 2013 użyte jako przykład potrzebuje jeszcze jednej zmiany by wystartować (nieważne czy z D9VK czy bez) - trzeba pominąć launcher gry.
Można to zrobić tworząc własny, uproszczony launcher. Najpierw tworzymy plik  ROTTLauncher.c o treści:

#include < stdlib.h > 
int main(int argc, char **argv) 
{ 
    return system("Win64\\ROTT.exe"); 
}
Potem kompilujemy go z użyciem MinGW:
i686-w64-mingw32-gcc ROTTLauncher.c -o ROTTLauncher.exe

Polecenie i pakiet zawierający MinGW może się nieco różnić w zależności od dystrybucji.W przypadku Ubuntu pakiet nazywa się gcc-mingw-w64-i686.

Tak przygotowanym plikiem zastępujemy oczywiście oryginalny launcher w katalogu z grą.