Progress Report: July 2017

July like every month before it this year set a new record in the number of improvements that happened. Mostly centered around bug fixes and compatibility improvements it is safe to say that if every single improvement were to be covered in great detail this progress report would take more than a month to finish. Therefore the format is now going to change a bit. This report will focus on some major emulation improvements and it will explain what these entail in general. Thereafter a few select more interesting games and how they were improved will be covered. Every improved game will not be covered because there were simply too many, and evaluation of earlier reports indicate that it isn’t interesting content either.

First of all are the compatibility database statistics for the month of July. Take note that the last database update was performed a day before the major emulation improvement known as “LLE gcm” was merged, meaning the hundreds of games improved from this are not listed in the figures below, or even on the compatibility database yet.

Table of Contents

Improvements
Games
Commits
Upcoming
Conclusion

Game Compatibility: Game Status
Game Compatibility: Monthly Improvements (June 2017)

Looking at the GitHub statistics, 18 authors have pushed 201 commits to the master branch. Here 257 files have changed and there have been 14,559 additions and 5,088 deletions of lines of code. What improvements came from these changes? Let’s take a look:

Major RPCS3 Improvements

LLE gcm

This is huge. One of our talented developers known as Jarves has for a long time been working on a major core improvement, and just in time for this progress report it got merged into the master branch of RPCS3. What is LLE gcm?

LLE stands for Low Level Emulation. In RPCS3 this means that a PS3 operating system module is ran directly as it is via lower level emulation methods. This is great for compatibility because it doesn’t involve much guesswork and is very accurate. As far as the games are concerned, they are working with the exact same operating system methods with the exact same implementations here as on a real PS3.

gcm or “graphics command management” is the part of the PS3 operating system responsible for creating and managing various graphics commands.

What does the implementation of LLE gcm lead to in practice? Major compatibility and stability improvements. Some examples are [redacted] no longer randomly crashes, Red Dead Redemption going ingame at all, and The Last of Us showing the initial loading screen and actually running for a while rather than instantly crashing. Many of the featured games below work better thanks to this change, and literally hundreds of other titles are improved in one way or another, some going from nothing at all to ingame or even playable.

General Linux Improvements and AppImages

Linux users will love this. AppImage is a very convenient format of packaging software, simply download the AppImage file and run it. There is nothing to install, not even a .zip file to extract. Best of all is that the RPCS3 AppImage works on practically any flavor of Linux, even going all the way back to Ubuntu 14.04. Users do not need to add some repository, fiddle with rare dependencies, and solve strange compatibility issues. The AppImage is guaranteed to run exactly the same everywhere. Previously users had to manually clone the RPCS3 repository and go through a very convoluted compilation process that could take half an hour initially even on a fast system with an SSD. And once all of this was done it wouldn’t work anyway because the LLVM recompiler would almost certainly fail. This is now history. This separate blog post goes into much greater detail on what was fixed and how well RPCS3 now works on Linux. Many thanks to Hcorion for spending days debugging esoteric upstream bugs and compiler quirks.

Apart from fixing the LLVM recompiler and providing AppImages many other Linux improvements were made. For example there is now a robust controller support in RPCS3 on Linux thanks to the implementation of an evdev handler by KirbyFan64.

Fixed low level synchronization primitives bugs

Synchronization primitives are used by multi-threaded software (all games) to make them fundamentally function. RPCS3 has to emulate the PS3 behavior exactly, or bad things may happen. Several people were involved in debugging and fixing several different bugs by initially looking at a few different games. The result is that for example Demon’s Souls went from a crashy mess to being perfectly playable (people have already beaten the whole game), and Hatsune Miku Project Diva F 2nd went from only going to the main menu to also being perfectly playable. But the fixes are wider reaching than that. There are multiple reports of various bugs being fixed in various games. For example some random crashes after battles in Ni No Kuni and menu crashes in older Atelier games. An old issue where the sound mixer thread would randomly die in a lot of games like for example in Catherine also seems to be fixed, or at the very least greatly improved.

Credits to Nekotekina, kd-11, GalCiv (RipleyTom) and Stewie10 for investigating and fixing these problems, many in this and this PR.

Major Emulation Improvements by kd-11

kd-11 fixed a lot of bugs improving graphics in several games such as [redacted] and Red Dead Redemption. Moreover these games also saw performance improvements from the various fixes. But in practice these fixes are general, many games look and perform much better now. A long standing issue where most graphics in some games would be mostly blue was fixed, and vertex upload performance was improved, especially with Vulkan. The latter is also being worked on right now, and major performance improvements thanks to this work has already been observed.

kd-11 also improved performance in SPU emulation, fixing the need to use the very dirty thread pausing hack to improve performance. In essence RPCS3 now much more closely controls the scheduling of SPU threads (previously this was up to the operating system, and Windows being Windows did a terrible job). For example, with the right settings (4 preferred SPU threads, SPU loop detection on, and 0 delay penalty) it is possible to run Demon’s Souls without the lag spikes and staying close to 30 fps even on a Skylake i3.

Most of these improvements can be found in this, this, this, and this PR where a more technical description is also available.

RPCS3 Milestone: Version 0.0.3

RPCS3 version numbers do not really mean anything, and one should always simply use the latest “nightly” from rpcs3.net. However once in awhile, when enough major emulation improvements are in place we decide to bump the version number, simply as a milestone. The 0.0.3 change log is a monolith in and of itself. Take a look if you dare!

Games

As mentioned earlier so many games were improved this month that it would be impossible to cover all of them, and indeed testing is still underway by the community as essentially every old result is now invalidated. Instead here are 12 select games (or groups of games) that are either interesting in some way, popular with our users, or that represent a certain change in a clear way.

Atelier Escha & Logy, Atelier Shallie, and Ar Nosurge

Last month these Koei Tecmo engine games had busted graphics and sometimes consequently dropped down to a single digit frame rate. However as seen in the video above from Atelier Escha & Logy it now runs at a solid 30 fps all the time and with only minor graphical problems. The same is true for Shallie and Ar Nosurge.

However the minor looking graphical issues turn into a major problem. It isn’t too bothersome that there are a few black patches on the ground here and there, and that character outlines are the wrong color, that would be acceptable for calling the games playable (but not perfect). But not immediately obvious is that gathering points and save points are nearly invisible. This is a big problem for these games since gathering and crafting are central gameplay mechanics. As you can’t see where you can gather in Escha & Logy and Ar Nosurge the games becomes practically unplayable despite running completely stable and at a solid frame rate. However the last game, Atelier Shallie, added a mini map where every gathering point is visible. Thus Shallie is actually considered playable while Escha & Logy and Ar Nosurge are not (yet).

Presumably the japan only PS3 release of Atelier Sophie is also playable like Atelier Shallie, though no one has tested yet.

Beyond: Two Souls

Thanks to LLE gcm and the synchronization primitives fixes Beyond: Two Souls now goes ingame and renders graphics. As seen above there are major glitches in graphics rendering, and performance is quite bad. However it this probably one of the most advanced looking PS3 games from a technical perspective, so it is quite impressive that even renders this much already, and also that it runs this fast on the interpreters.

Demon’s Souls

Demon’s Souls became completely playable in RPCS3 this month. A very old bug from back when Demon’s Souls first started working in April was fixed. This bug caused definitive hanging on loading screens, and also killed the audio mixer thread which would eventually cause the game to hang. This tiny commit, only five lines of code changed, fixed the problems in Demon’s Souls and likely elsewhere. Of course, finding this problem was quite the effort, and involved long discussions among Nekotekina, kd-11, GalCiv, Numan, and others.

Moreover the aforementioned SPU improvements by kd-11 improved performance, notably eliminating bad stuttering. With this the game was finally considered playable, and some people have already beaten it. For example the famous Soulsborne streamer LobosJR. Check out the stream archive here.

Lastly, here is a screenshot of Demon’s Souls running in 21:9 aspect ratio with a patch:

Drakengard 3

Thanks to LLE gcm Drakengard 3 went from doing practically nothing to going ingame and almost being playable. The two biggest problems are performance and random crashes. A good amount of the time it is running near 30 fps, but sometimes it also drops down to 10 – 15 fps. This game, allegedly, had a very bad frame rate on a real PS3 too, so it might be quite demanding to run.

Hatsune Miku: Project DIVA F 2nd

This game went from only going into the menus (and the short tutorial) where it had been stuck forever to being perfectly and flawlessly playable at full speed, even on relatively weak hardware such as an i3. Once again a several days long investigation by several people, most notably lead by GalCiv culminated in Nekotekina making this PR fixing some synchronization primitives bugs. Once again these bug fixes help various hangs and crashes in other games.

Kingdom Hearts HD 1.5 & 2.5 ReMIX

With LLE gcm, and several other fixes by Jarves, these have gone from almost nothing at all to being fully playable in the case of 1.5, and almost playable in the case of 2.5. The latter still has a few rare freezes in some situations.

[redacted]

[redacted] is now playable in RPCS3! That means the entire game can be played from start to finish (100 hours later) with acceptable performance and very good graphics. Many people have already done it. Definitely look at the video above, and definitely read this separate blog post that goes into a lot of interesting details on how the RPCS3 team found and fixed several bugs and flaws. But in essence the aforementioned graphics and SPU improvements by kd-11 and LLE gcm by Jarves are the last pieces of the puzzle.

Red Dead Redemption

Red Dead Redemption (Undead Nightmare) saw several fixes to graphics thanks to work by kd-11. Overall quality such as lighting and how the sky looks was improved, and missing character models were solved too with some SPU bug fixes. There were also some performance improvements from the same pull requests by kd-11, detailed above.

Moreover a member on our Discord has played through about 20 % of the game already (despite the low frame rate) which proves that it is stable and likely could be playable with more performance improvements.

Skate 3

Skate 3 saw improvements to graphics and performance. Some of the broken flickering graphics have been fixed, and it also runs a bit faster than before. However it is still too slow, and shadows are still completely inverted looking. Still, it seems stable and theoretically playable otherwise.

White Knight Chronicles

Thanks to LLE gcm by Jarves, graphics and performance fixes by kd-11, and synchronization primitive fixes by Nekotekina White Knight Chronicles looks almost perfect, performs acceptably, and seems to run stable. Especially the performance improvements are impressive as this game ran at a low single digit frame rate last month. It’s not perfect yet, but given a faster CPU (the video was recorded on a Kaby Lake i5) and some more testing it might even be considered playable now.

Tales of Series

Several games in the Tales of series saw improvements to graphics, stability, and performance this month. In the screenshots above we see how a Discord user has beaten Tales of Graces, and we also see Tales of Vesperia running with an ultra wide screen patch, and finally Takes of Xillia running at 60 fps in a battle. There isn’t one major improvement to point at here, instead various smaller issues like some broken graphics in places, some crashes here and there, and some slowdowns have been improved upon. This is a combination of every major improvement mentioned earlier in the report.

Below is also Tales of Berseria, though this one hangs when the player is supposed to start controlling the character.

Yakuza 0, 3, 4, 5 and Dead Souls

The Yakuza games went from absolutely nothing at all to going ingame thanks to LLE gcm. Above are two screenshots, and below are some videos. In general they run without any major issues other than being way too slow for the time being.
Videos: Yakuza 5, Yakuza 4, Yakuza 3, and Yakuza Dead Souls.

Assorted Screenshots

Below are screenshots from different games that saw improvements this month. Usually around performance and improved graphics, but refer to the corresponding forum thread for each game for more information.

Commits

As always, this is not a complete list of PRs or commits, nor does it necessarily list every single thing done by a given PR. For a full list, see PRs merged in July. Many of the unmentioned PRs are updates, fixes, and small improvements to the new Qt interface. More can be read about this below.

Nekotekina

#3123 – Fixes some synchronization primitives bugs enabling among many games Hatsune Miku Project Diva F 2nd to be playable.

#3076 – Fixes various bugs with synchronization primitives. Affects various games, for example Ni No Kuni.

#3066 – Improves the LLVM recompiler in various ways, and sets it as the default PPU decoder. Also fixes a synchronization primitive bug fixing Demon’s Souls hanging.

#3025 – Various bug fixes. Also expands the patching system (“cheats”) to work on both PPU and SPU, and to also support floats. This will enable more and more things like ultra widescreen patches, and actual game cheats.

#2957 – Various LLVM bug fixes, correcting different crashes and bugs, for example broken game logic in a certain area of [redacted].

kd-11

#3083 – Major bug fixes and performance improvements to graphics emulation. Read the PR description that goes into great detail.

#3075 – Bug fixes and performance improvements, especially for Vulkan. Read the PR description that goes into great detail.

#3046 – Bug fixes for Vulkan, solving some crashes.

#3026 – Major improvements to graphics emulation and performance. Read the PR description that goes into great detail.

#2962 – Major improvements to graphics emulation and performance. Read the PR description that goes into great detail. This is the PR that fixes the broken blue graphics in many games, most notably [redacted].

mp-t

#3114 – A code review correcting various bugs and problems.

raven02

#2961 – Adds the option to ignore aspect ratio and stretch games.

Learath2

#2958 – Adds information about what firmware version is being installed.

Megamouse

#3108 – Adds an indicator to the GUI that custom config is in use for a particular game. This is a huge quality of life improvement.
Custom config indicators

#2985 – Prints system info to the RPCS3 console and log file. Also refuses to start RPCS3 on incompatible CPU’s (previously it would just crash instead).

#2953 – Applies the new RPCS3 GUI design and formally finishes the move over to Qt (although there will always be bugs to fix, and things to be improved).

hcorion

#3098 – Linux bugfix for Bomberman Ultra and likely many other games that would crash around libnet due to differences between Linux and Windows on how some network functionality is handled.

#3058 – Fixed all remaining issues around compiling and running RPCS3 with the LLVM recompiler on Linux and enabled working AppImages to be built. Read more about it above.
meme

GalCiv (RipleyTom)

#3081 – Fixes a silly bug that broke saving and loading in [redacted] (and maybe other games) on Linux.

#3044 – Adds a config file entry for pad squircling factor. Basically this allows users to fine tune and fix strange input behaviour with some controllers in some games.

#3008 – Deadzone fixes for XInput controllers. Correct various input problems in different games.

Dangles91

#3022 – Savedata fixes. Fixes saving and loading in Akiba’s Trip and possibly other games.

Jarves

#3096 – Implements LLE gcm. Read more about it above.

#3057 – Fixes some graphics in Kingdom Hearts HD and also [redacted], Atelier, and Ar Nosurge.

scribam

#3077 – Various bug fixes.

KirbyFan64

#2885 – Implements an evdev controller handler in Linux to support for example an Xbox 360 controller or a PS3 controller on Linux.

flash-fire

Various Qt bug fixes across multiple smaller pull request, too many to list here!

#3018 – Improves memory pool and therefore improves some games like Ace Combat Assault Horizon.

#2924 – Implements a save manager in RPCS3. This is big. It allows users to have multiple save slots in games that call the PS3 OS save manager. Previously RPCS3 would always use save slot 0.

#2951 – Improvements to the save manager, for example showing icons and correctin some bugs.

Upcoming

During the month of August Nekotekina is planning to work on improving the load liblv2 option to enhance compatibility with some games. Moreover he will also work on enabling more modules to be LLE’d, most notably libnet used by various games, for example for downloading various data. This can often crash spectacularly today. (This does not mean RPCS3 will support online features! It just means that network functionality in RPCS3 should work like on a real offline PS3). Some more LLVM improvements are also planned, for example even faster compilation times. Other LLVM improvements are also in preparation for a big new thing in the future…

kd-11 is working on improving zculling, both to improve performance, and also to fix some bugs with LLE gcm. Moreover kd-11 is also reworking vertex upload which should result in general performance improvements, in some popular games even major performance improvements…

Closing Words

This has been a month of great improvements to RPCS3. If you want to help out Nekotekina and kd-11 and make RPCS3 progress even faster you can check out the Patreon page here. Right now we are coming closer and closer to the $3000 goal of having kd-11 work on RPCS3 full time which would greatly increase the rate of progress in the future.

Also, come check out our YouTube channel and Discord to stay up-to-date with any big news.