Progress Report: December 2017

What a way to end the year, eh? We started the last month of 2017 with a bang with RPCS3 taking major steps towards emulating many heavy hitting AAA titles, including quite a few exclusives like Uncharted and God of War. Some moved in to Loadable, others Ingame, and a few are even playable now. More can be read about this here. While these changes were made last month and received a post of their own, they had an impact on many other games that were discovered this month, and such incredible work deserves recognition. This progress report will focus on progress over the month of December. First and foremost, below is a video summary and report of various games that improved this month. Take a look, and read on for even more detail!

Table of Contents

Major Improvements
Games
Commits
Upcoming
Conclusion

First of all, let us have a look at the compatibility database statistics. As we predicted last month the number of games in the Nothing category is now less than 100! A year ago this with the Loadable and Intro categories represented the biggest chunk of registered games, most simply did not work more or less.
Game Compatibility: Game Status
Game Compatibility: Monthly Improvements (October 2017)

However we are now making quite a drastic change to how compatibility is counted. Above different versions of the same game are counted separately. So for example instead of simply having one entry for Demon’s Souls, there are currently four entries: the european disc and PSN versions, and the american disc and PSN versions. This could even become six entries if someone were to test the japanese counterparts.

This is a very traditional way for emulators to look at compatibility, but because of the nature of such a “modern” console like PS3, there can be a lot of different versions of the same game. We have different regions: Europe, America, Japan, Asia, Korea, Hong Kong. And for each region the disc version and the PSN version.

So as can be seen below, we are merging all entries of the same game under the same media type (disc or digital), into a single entry.
There are some differences on compatibility between media types, like Demon’s Souls, where only the disc versions are currently playable, while the PSN versions fail to get past a black screen. But every disc version is playable the same, and every PSN version fails the same, so it makes sense to simply count the disc versions Playable once, and the PSN versions as Nothing once in the statistics.
Also note that not every game is merged yet, so the entries count is likely to go down again in the next month.

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

Here is the full log of every game that changed status in December

Speaking of statistics, over on github 13 authors have pushed 95 commits where roughly 115 files were changed, with 5000 lines added, and 1400 lines removed.

Major RPCS3 Improvements

Fixed Vulkan Z-culling and Graphical Improvements (#3827)

kd-11 fixed Z-culling when using Vulkan which has been broken ever since the lle-gcm merge many months ago. z-culling is the process of eliminating pixels that would be hidden, thus letting a program skip the process of rendering pixels that would be hidden behind other objects, resulting in a significant performance increase due to the lightened workload. This means users will no longer see the sun shining through objects, which was a well known issue with Demon’s Souls. This fix will impact quite a few titles, namely any that rely on z-cull to properly render graphics such as Demon’s Souls and Jak and Daxter. Nvidia users may notice the issue still appears with OpenGL however this is a driver issue.

Game Column Compatibility List (#3521)

MegaMouse added a compatibility list feature within the emulator. This allows a user to see the status of their game. While it requires a bit of set up, it saves users and testers a lot of time as they no longer have to check the website to find the status of each game in their library.

SPU Performance Improvements (#3921)

This “minor” PR with 1310 lines of code added, many of those lines being low level AVX code, improves performance with various SPU instructions by using different versions of AVX and SSE (also #4018, #3997, and #3984). Results will vary, some games never had a bottleneck here, other games see small improvements in the range of a few percent, other games see somewhat bigger improvements. It all depends on the CPU in use, and the game in question so it is hard to pinpoint exactly how much this helps, but it does help. As a simple example there was an improvement of a few fps on the main menu of a certain game, tested with a Skylake CPU.

Fix for bug on NVIDIA Linux proprietary drivers (#3998)

This pull request fixed an annoying bug that had been happening with NVIDIA Linux proprietary drivers, that made a lot of games display broken graphics when running on the Vulkan render.

Upon investigation, kd-11, with the help of Illynir, discovered that the issue was that the NVIDIA driver was not properly parsing values with exponential notation, like 1.E+2 or 1.E-10. This was fixed by converting the numbers to non-exponential notation.

Here’s an example of how Naruto looked like when in OpenGL (correct) and Vulkan (incorrect), under latest nvidia proprietary drivers on Linux. After this fix, the Vulkan render now displays correct graphics. Other games, even very popular ones, had a bigger impact on graphics due to this bug.

Games

Below are various games that improved this month, all in alphabetical order.

Armored Core V

Armored Core V used to crash past the main menu but now goes ingame for the first time! Graphics are looking decent but performance is quite low at the moment.

Cartoon Network Punch Time Explosion XL


Cartoon Network Punch Time Explosion XL now goes in game thanks to farseer’s fixes in 3977, and may be playable.

Dark Void


Dark Void became playable in december with good performance and visuals. The game ran previously but would crash if the PPU recompiler was used, something that Nekotekina fixed this month.

Demon’s Souls

The above video is quite nicely put together and compares graphics between RPCS3 running the game in 4k, and a real PS3. Not only is graphics emulation seemingly perfect, 4k rendering brings out a lot of hidden detail in armor among other things.

Gal Gun


Thanks to hcorion’s fixes in #3930, Gal Gun is now playable! Previously it did nothing, which is quite a jump! However there is no Move support yet in RPCS3 so it must be played with an ordinary controller for now.

God of War Chains of Olympus & Ghost of Sparta

These two GoW games originally released on PSP are now ingame and almost playable with RPCS3! While I maintained a steady 55-60fps the audio stuttering kept it from being playable. For some reason audio defaults to 0% so just turn the volume up in the game settings.

With this change every God of War game released on the PS3 can go ingame! Although getting Ascension ingame is difficult and requires patience.

Gran Turismo HD Concept

Thanks to various work by Nekotekina and kd-11 performance improved slightly. Be sure to use 1920×1080 resolution (not resolution scaling) with this game or graphics will have quite a few issues.

Haze


Thanks to hcorion’s fixes in #3930, Haze now goes in game, however it does suffer from the “yellow filter” issue.

Heavenly Sword

Thanks to Jarveson’s SPU fixes from last month Heavenly Sword went from crashing when going ingame, to actually going ingame and being stable. Combined with graphics fixes this month, and some performance improvements by Nekotekina, and it now runs quite well as seen in the video above!

Hyperdimension Neptunia

Thanks to improvements by kd-11, Hyperdimension Neptunia is now playable. Note: Resolution scaling must be set to 100% (default) for the game to work; the game’s engine is a bit “quirky”, to use kd-11s wording, and due to that, resolution scaling won’t work for this title.

NieR RepliCant & NieR Gestalt

This cult classic and in the shadow of the popular title NieR Automata saw major improvements to graphics this month thanks to a combination of different fixes by kd-11. Previously it had broken lighting, wrong colors, and sometimes missing graphics. All of this is fixed now and, at least at a glance, the game looks just fine. In fact, performance is improved as well and it is certainly possible to basically perform like a real PS3 in the range of 20 – 30 FPS at this point, given a modern CPU with AVX 2 and TSX support. Except this is only partially true. See, the above screenshots were taken on Linux, and the game indeed performs as shown there. However for the same user with the same hardware, and really everyone else too, performance is only about a third of this on Windows. This was investigated by kd-11 but no conclusions could quickly be drawn as to why this is the case. In general RPCS3 performs roughly the same on Windows and Linux, though it is known that some games can run a few percent faster on Linux due to the nature of the operating system. That there is such a massive difference in Nier is unexplainable for now though.

PlayStation All-Stars Battle Royale

Thanks to performance improvements by Nekotekina and some graphics fixes by kd-11 All-Stars now looks pretty good graphically, although it is still too slow to be truly playable.

Port Royale 3 Gold

This game saw a colossal performance improvement, going about 2 to 25 fps in the scenes above on an i5 6600. This is thanks to performance improvements by kd-11 and Nekotekina.

Sleeping Dogs


Sleeping dogs also made its way ingame in december and looks rather good. This was thanks to Jarves’ SPU fixes (and possibly something kd-11 did as well), and previously the game would only showed a black screen.

Sly Cooper Thieves In Time

Thanks to Jarves, this game no longer requires libaudio.sprx to boot which means audio will actually play now! However the audio is quite stuttery and the game does have some issues still as you can see in the video above.

Tales of Graces f

This game used to have a graphical glitch as seen below where the outline of various things in the game world would appear on top of other things. This depth bug was fixed by kd-11 in PR #3827, and along with using the “auto” frame rate option the game is now considered playable (some parts of the game will run at 30 fps, other parts will run at 60 fps. Attempting to always run at 60 fps causes problems).

Tokyo Jungle

A long standing issue where every animal was flickering rapidly has been fixed thanks to kd-11. It remains to be seen if the game is actually playable as no one has tested it extensively yet, but so far it seems promising.

Tron Evolution


Tron evolution went ingame for the first time this month.

Virtua Tennis 4

The graphics in the menu display correctly now thanks to fixes by kd-11, though the game still doesn’t work very well.

Uncharted 1: Drake’s Fortune

Uncharted 1 got tested quite a lot by the community, in the above video we see some gameplay from the second level of the game, which also proves it is possible to (slowly) progress a bit into it. That said, there are still occasional crashed every now and then.


In the above screenshot we see a user running Uncharted 1 with an ultra widescreen patch! That patch is truly changing the aspect ratio of the game and showing much more of the game on the screen without any stretching.


Here is also a bonus screenshot of the game running in 10k resolution!

Wipeout HD

Wipeout HD went ingame with the SPU fixes by Jarves last month, and thanks to graphics and stability fixes by kd-11, and performance improvements by Nekotekina, it now runs quite nicely. While not quite full speed yet, it is getting there.

Commits

As this month was relatively light on PRs due to the holidays, this is a fairly exhaustive list of PRs. However, it does not detail what every commit in each PR consisted of. For a full change list, see the links to the PRs themselves.

Nekotekina

3826 – Fixed a bug in YouTube (and therefore possibly games that use network functionality) caused by #3702 by changing a function in sys_net.

3842 – Fixed an issue with saves caused by passing VM memory to fs::file.

3921 – SPU optimizations. Removes SSSE3 dependency in several places, adds AVX/AVX-2/AVX512 optimizations, redesigns a few PPU instructions and refactors some SPU instructions.

3958 & 3960 – Fixes AppImage builds.

3984 – Various fixes, including to primary stack size, additions for AVX2+, more socket fixes, and the removal of /app_home/ dependency

3997 – Fix game category issues, some minor SPU fixes. Addresses some issues that appeared in #3984.

3999 – Stops cellGame from writing empty title IDs, trophy checks BDVD and HDD locations, and warns users about a broken param.sfo file.

4005 – Contains several other PRs by Velocity and lewpmk. A fix for Linux builds, made by Nekotekina, was also included here.

4010 – Fixed a regression caused by 4005.

kd-11

3772 and 3820 – This pair of PRs was a truly massive improvement to the emulator. You can read what they did here.

3827 – Fixes some regressions from #3772. Also fixes variations of the same shaders constantly compiling in some games, and fixes a bug in Eternal Sonata and Ni no Kuni by changing some default vertex attributes.

3858 – Avoids unprotecting memory unless writing is (almost) guaranteed to follow immediately. Should help stop (some) race conditions. Also has a fix for framebuffer setup that fixes some flickering.

3931 – Fixes a whole host of issues, including fixes for swizzle remaps, fixes to the blit engine, a fix for the write color buffers setting, and implements some FP instructions. This PR fixed several issues in Nier, vastly improving graphics in the game, as well as many others.

3953 – Some minor fixes. Slight style changes, fixes alphakill and an issue with color swizzle, as well as fixes an issue preventing Hyperdimension Neptunia from being playable with Vulkan.

3998 – Lowered chance of the Device Lost crash when using Vulkan + Write Color Buffers and fixed textures flickering when using OpenGL + Write Color Buffers. Both of these issues were common with Demon’s Souls. kd-11 also fixed some graphics in Tales of Graces f and created a work-around for an NVIDIA drivers bug when using Linux.

Megamouse

3823 – Fixes some Input issues such as evdev and mmjoy stick input and axis/POV capabilities, as well as some Qt issues.

3521 – Adds a compatibility column! A PR created back in October finally got finished and merge. It requires setting up OpenSSL, since it is illegal to distribute in certain countries and thus can’t be bundled with the emulator, but a welcome feature nonetheless.

3817 – Input fixes for MMJoy and evdev, as well as various input improvements. Some hair cutting was promised if this really was the final one.

3964 – And thus ended the hair cutting promise. Fixes a regression causing DS4 initial connection to not be detected properly, essentially disabling DS4 input.

3968 – Fix numpad being registered in game, or not as the case was.

3974 – Adds positive axis list to evdev, allowing users to whitelist axis/sticks that don’t use negative values in their range

3980 – Improvement to cellPadSetPortSetting. Fixes a recently introduced bug in Catherine causing some buttons to not be registered.

4003 – A fix to sorting the compatibility list

Jarves

3914 – fixes a crash when using CPU blit or when unable to GPU scale a texture. Fixes a bug in RetroArch. Fixes the LED for DS4 when using Bluetooth.

hcorion

3927 – Fixes OpenSUSE build dependencies, as well as update Qt to 5.10 on Linux and fix some Qt installer issues.

3930 – Fixes some Memory Access Violations. Gets some, maybe all, Singstar games out of the Nothing category. Also pushes Gal*Gun in to ingame from nothing, and later to playable with graphical fixes by kd-11. HAZE also goes ingame now, although with somewhat severe graphical errors, thanks to some better stubs of some functions.

AniLeo

3919 and 3920 – Fixes the version in the title bar of RPCS3 for Linux builds.

3963 – Pass some missing arguments to _sys_process_exit’s logging function.

scribam

3824 – scribam makes some minor changes to loops in rpcs3qt, as well as changes spaces to tabs left over by 3820.

3833 – scribam registered some functions in cellSysutil.

themitosan

3741 – In this PR, themitosan adds a couple new themes to RPCS3.

janisozaur

3904 – janisozaur makes Travis build with the Ninja build system.

Farseer2

3977 – Farseer2 made a fix to fs_open on mself files to reset the pointer when needed. Fixes some games that use mself files, such as Cartoon Network Punch Time Explosion XL.

3983 – Farseer2 changes sockets with fd==0 are invalid to be the correct value. Allows Rage to progress further.

VelocityRa

3763 and 3937 – VelocityRa made some improvements to trophies to report correct size requirements, and handles cases where trophies are already installed. He also added a counter for the total number of LLVM compilation dialogs. Both were merged in 4005.

elad335

3803 – elad335 fixed SPU MFC size and tag clamping. Improves SPU accuracy.

3899 – elad335 added db8cyc/db10cyc/db12cyc/db16cyc instruction detection on the disassembler.

lewmpk

3932 – lewmpk fixes a clang warning about parentheses. Merged in 4005.

Upcoming

Some of the currently open Pull Requests add important or exciting features. One by Megamouse adds gamepad profiles, allowing users to create and use multiple controller maps for all different input types. Another by Inviuz (aka Numan) implements sys_overlay, a special way for games to load external code. While it is very much a work in progress, it shows real promise because Metal Gear Solid 4 needs it to run, which it now does as seen below. However right now it can’t go ingame and only reaches the main menu. These, along with over a dozen other open PRs, promise to get 2018 off to a great start. And to round out the exciting new features, the first kd-11 PR of the year implements a rendered UI in RPCS3 that in the future will try to imitate the look and feel of a real PS3. For example, instead of showing a Qt based save/load menu as a separate window on top of the game the menu will now be rendered inside the game window. PPSSPP is another popular emulator that does the same thing.

Closing Words

If you like in-depth technical reports, early access to information, or you simply want to contribute, consider becoming a patron! All donations are greatly appreciated. RPCS3 has two full-time coders that greatly benefit from the continued support of over 700 generous patrons.

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

Happy New Year, and everyone on the RPCS3 looks forward to another exciting year of progress!

This report was written by ssshadow, Asinine, Talkashie, twdarkeh and Ani.