niedziela, 24 lipca 2016

Emulator Dolphin, port vkQuake i emulator RetroArch na Vulkanie

Po The Talos Principle (starszy post) i Docie 2 pojawiły się kolejne projekty korzystające z Vulkana na Linuksie:

 

Dolphin

Zaledwie miesiąc po pierwotnym ogłoszeniu backend wykorzystujący Vulkana stał się kompletny pod względem funkcjonalności.  Nie jest on jeszcze całkowicie dopracowany, ale już może imponować stabilnością, niewielką liczbą błędów czy wydajnością. Ta wg wczesnych testów dorównuje a nawet przewyższa wydajność D3D12 oraz starszych API (OpenGL, D3D11).

W chwili pisania tego postu backend znajduje się jeszcze w trakcie przeglądu i nie został włączony do głównej gałęzi projektu. Można go pobrać i skompilować bezpośrednio z repozytorium dewelopera:
git clone https://github.com/stenzek/dolphin
cd dolphin
git checkout vulkan-pr
mkdir build
cd build
cmake ..
make
sudo make install 
Zależności są dość standardowe, warto tylko zwrócić uwagę na biblioteki libudev i libevdev, które konieczne są do obsługi gamepadów.

Nvidia ma w tej chwili dość paskudny błąd uniemożliwiający skalowanie okien, można go obejść ustawiając tryb pełnoekranowy i natywną rozdzielczość ekranu.


vkQuake

vkQuake to port oryginalnego Quake'a (a właściwie QuakeSpasm) na Vulkana wykonany przez samego Axela Gneitinga. Axel (obecnie programista id Software, wcześniej Crytek) jest też człowiekiem odpowiedzialnym za spektakularny (wrócę do tego pod koniec postu) port Dooma (2016) na Vulkana.

Pobranie i kompilacja są proste:
git clone https://github.com/Novum/vkQuake
cd vkQuake/Quake
make USE_SDL2=1
W przypadku vkQuake należy zatroszczyć się o obecność deweloperskich wersji bibliotek libogg, libvorbis i libmad odpowiadających za dekodowanie muzyki. No i oczywiście potrzebne jest SDL, jak widać powyżej, proponuję kompilację z SDL2.

W wyniku procesu powstaje pojedynczy plik wykonywalny quakespasm, który należy umieścić w jednym katalogu z katalogiem id1 zawierającym pliki pak0.pak i pak1.pak. Uwaga: wersja steamowa Quake ma pliki PAK0.PAK i PAK1.PAK z którymi vkQuake się nie uruchomi. Jest wrażliwy na wielkość znaków i należy zmienić wielkie na małe litery.

Z podobnego powodu jak w przypadku Dolphina, warto już przy starcie uruchomić tryb pełnoekranowy:
./quakespasm -fullscreen -width 1366 -height 768 
Po chwili powinien ukazać się znajomy widok.

 

RetroArch paraLLEl

RetroArch jest frontendem dla wielu emulatorów (nazywanych tutaj rdzeniami) zbudowanych wokół libretro. paraLLEl to jeden z tych rdzeni, zajmuje się on emulacją Nintendo 64, tylko w odróżnieniu od Mupen64plus używa do renderingu API Vulkan.

Kompilację należy przeprowadzić zgodnie z instrukcjami zawartymi na stronie projektu. Domyślnie budowane są wszystkie rdzenie, ale ten krok można pominąć, bo paraLLEl i tak trzeba ściągnąć osobno.
 
W trakcie procesu trafiłem na ostrzeżenie:
Checking function vkCreateInstance in -lvulkan ... yes
Warning: glslang submodule not loaded, can't use Vulkan.
To fix, use:  git submodule init && git submodule update
By to naprawić wystarczyło skorzystać z powyższej wskazówki:
cd retroarch/deps/glslang/
git submodule init && git submodule update
cd ../../..
./retroarch-build.sh
Pozostaje teraz ściągnąć potrzebny rdzeń przez menu Online Updater->Core Updater->parallel_libretro.so.zip


Uwaga: RetroArch do poruszania się po menu wykorzystuje strzałki i klawisze X oraz Z (Enter nic nie robi).
Ostatecznie trzeba też zmienić sterownik Settings->Driver na vulkan i dopiero teraz załadować rdzeń Load Core.


Niestety na tym etapie RetroArch na mojej maszynie przestaje reagować. No, ale może będziesz miał więcej szczęścia.

Dwa grosze o Doomie na Vulkanie

id Software opuszczone przez Carmacka i kilku innych kluczowych programistów (m.in.: J.M.P. van Waveren, Gloria Kennickell) zmuszone zostało do wyssania ludzi z podupadającego studia Crytek. Miejsce Johna zajął Tiago Sousa, który od samego początku stał za rozwojem CryEngine. Odpowiedzialnym za optymalizację id Tech 6 i implementację obsługi Vulkana jest Axel Gneiting.  Opinię Gneitinga o Vulkanie i Direct3D12 możesz przeczytać w artykule id Software Dev Puzzled By Devs Choosing DX12 Over Vulkan, Claims Xbox One DX12 Is Different Than PC ‘Don’t buy all Microsoft propaganda.’

Efekty pracy Axela są doskonałe. Starsze Nvidie są porównywalne na Vulkanie do OpenGL, Nvidia Pascal jest kilka procent szybsza, a AMD Radeon zyskuje od kilkudziesięciu do nawet ponad 100%.

Imponujące osiągi id Tech 6 nie są przypadkiem, korzysta on z funkcji, które nie zostały jeszcze zaimplementowane ani w Source 2 ani w Serious Engine 4. Jest m.in.: pierwszym silnikiem, który korzysta z Shader Intrisic Functions - film AMD nieco rozjaśniający sytuację.

Niestety, pomimo, że Wine potrafi uruchamiać windowsowe aplikacje oparte o Vulkana, to nie zadziała w przypadku Dooma. Tutaj prawdopodobnie winny jest DRM Denuvo. Pozostaje mieć nadzieję, że id wróci do tradycji wydawania łatek usuwających DRM, bo na linuksową wersję nie liczę...

Dwa grosze o Androidzie, Samsungu i Vulkanie

Ekipa Johna Carmacka po opuszczeniu id utworzyła Oculus VR Dallas. Jako oddział Oculusa odpowiedzialny za Gear VR, pośrednio pracują oni dla Samsunga. Być może to właśnie przez ten projekt Galaxy S7 miał być pierwszym telefonem z obsługą Vulkana. Exynos 8890 potrafi korzystać do 8 rdzeni jednocześnie, co wraz z wielowątkową naturą Vulkana może pozwolić uzyskać wyższą wydajność, ograniczyć zużycie energii i opóźnienia w porównaniu do OpenGL ES.

Niestety, do tej pory żadna wersja S7 nie dostała aktualizacji z obsługą nowego API. Jednocześnie mamy zapowiedziane 3 gry oparte o Vulkana no i oczywiście porty RetroArch i Dolphina. Czekam.