Uncharted ruszyło na emulatorze PlayStation 3: to naprawdę trudny sprzęt

Strona główna Aktualności
image

O autorze

Kiedy ostatni raz zaglądaliśmy do tego, co dzieje się z RPCS3, emulatorem PlayStation 3, jego deweloperzy popisywali się możliwością grania w wiele gier w rozdzielczości 4K. Wciąż jednak liczba wspieranych tytułów była raczej ograniczona, wciąż też pojawiały się problemy z poprawnym rysowaniem klatek. Nie minęły dwa miesiące, a RPCS3 robi kolejny wielki krok naprzód. Ulepszenia emulatora otwierają drogę do uruchamiania słynnych gier AAA, na czele ze słynnym Uncharted.

Architektura PlayStation 3 jest piekielnie skomplikowana, pierwszy z rozwiązanych problemów przypomina nam, jak bardzo. Jego procesor, układ Cell Broadband Engine, zawiera oprócz wielowątkowego rdzenia w architekturze Power – Power Processing Element (PPE) – także osiem koprocesorów Synergistic Processing Element (SPE). PPE, SPE i elementy wejścia/wyjścia połączone są szybką magistralą Element Interconnect Bus (EIB).

Aby zapewnić swoją legendarną (jak na poprzednią dekadę oczywiście) moc obliczeniową, Cell łączy SPE i PPE przez EIB, dając im bezpośredni dostęp do pamięci operacyjnej i masowej (cache coherent DMA). Wszystkie jednostki obliczeniowe, zarówno PPE jak i SPE, mają swoje własne silniki DMA. Dla SPE jest to jednak jedyny sposób na dostęp do pamięci operacyjnej, ponieważ jego własne instrukcje mają dostęp wyłącznie do maleńkiego (256 KB) obszaru lokalnej pamięci LS. Transferami do i z LS zarządza kontroler Memory Flow (MFC), który nie tylko obsługuje kolejkę, ale też potrafi kontrolować typ transferu, a nawet na żądanie SPE blokować pewne transfery, zmieniając ich kolejność.

Do tej pory wirtualne MFC w emulatorze RPCS3 pozwalało jedynie na działanie w kolejności. Wprowadzone w nowej wersji przez dewelopera Jarvesa zmiany pozwalają na wykrycie tych specjalnych żądań SPU, by możliwe stało się działanie poza kolejnością. W efekcie uzyskaliśmy bardziej dokładne MFC – i w konsekwencji rozwiązanie problemu wielu losowych awarii, które do tej pory trapiły emulator.

Druga ze zmian Jarvesa (choć wprowadzona jako pierwsza) dotyczy sytuacji, w której gra nie ulega awarii, ale po prostu staje. Jest tak jakby nagle emulator zamroziło, mimo że licznik FPS-ów wciąż pokazuje zmiany na czarnym ekranie. W debugerze widać, że bez końca odtwarzany jest ten sam fragment kodu, zarówno w SPU i PPU. Okazuje się, że niektóre gry pod adresem 0 w wątku SPU zawierają rozgałęzienia – po wykryciu pewnych specyficznych warunków SPU porzuca aktualnie przetwarzany kod i skacze gdzie indziej. Do tej pory emulator po prostu źle sprawdzał warunek wykonania skoku. Po poprawce zapętlenia przestały być problemem.

Równie interesujące zmiany wprowadzono po stronie emulacji układu graficznego RSX. Gdy udało się uruchomić kolejne gry dzięki zmianom wprowadzonym dla SPU, symulowane GPU spotkało się z bardziej skomplikowanymi technikami graficznymi. Deweloper kd-11 poradził sobie z artefaktami w grze Dark Souls 2 w potoku HDR (nietypowe manipulacje shaderami), brakiem cieni (rysowanie kolorowej tekstury zamiast tekstury głębi wskutek problemów z aliasami celów renderowania), prześwitywaniem płomieni przez ściany (gra zapisywała coś jako bufory koloru w RGBA, a potem zamieniała je na bufory głębi) i samą głębią (tylko 8-bitowa precyzja).

Naprawianie tych błędów otwierało drogę do uruchamiania kolejnych gier, gdzie już tylko pomniejsze usterki występowały. W ten sposób oprócz Dark Souls 2 usunięto ostatnie błędy z God of War: HD Collection i Demon’s Soul, udało się uruchomić Uncharted oraz Ratchet & Clank, a nawet God of War 3, grę stosującą mnóstwo trików by umożliwić skalowanie na zmiennoprzecinkowych teksturach – coś niemożliwego na sprzęcie z czasów DirectX 9.

W tym tempie można się spodziewać, że jeszcze tej zimy zobaczymy, jak na RPCS3 ruszają tak słynne tytuły jak The Last of Us czy Killzone 3. Nie byłoby to możliwe bez pieniędzy – na pracę deweloperów składa się obecnie 726 patronów, wpłacających co miesiąc na ich konto łącznie 3370 dolarów.

Póki co najnowszą wersję emulatora RPCS3, 0.0.4, znajdziecie w naszej bazie oprogramowania na Windowsa. Dostępna jest też wersja na Linuksa, przygotowana w postaci paczki AppImage.

© dobreprogramy