April has been a month full of advancements in nearly every aspect of RPCS3. Performance boosts, graphics fixes, and compatibility improvements are plentiful.
Table of Contents
On Compatibility statistics, we can see a huge increase in Playable titles. A lot of games were retested, and many Ingame or below ones were found to now be Playable. There was also a considerable decrease on the amount of Loadable games and a slight increase in games classified as Nothing, as new games were added into the category.
On Git statistics, 7 018 lines of code were added and 4 535 were removed by 12 authors.
Major RPCS3 Improvements
”Major Fixes” by kd-11 (#4469)
Appropriately named “Major Fixes”, this PR made some of the biggest and most noticeable improvements this month. OpenGL textures were reimplemented, Write Colour Buffers on Vulkan was fixed, texture cache issues were addressed, and an “ancient” CLEAR_SURFACE colour mask decoding bug was fixed. See below for some comparison screenshots from these changes.
”Fixes” by kd-11 (#4382)
Merged near the beginning of April, this made several changes to RPCS3. Both render-to-3D and render-to-cubemap were fixed which resulted in more games drawing reflections. A proper Z-curve decoder was implemented, which fixed “swizzled” 3D storage decoding, resulting in improvements to palette LUTs in Skate 2 and other games. Alphakill, which was unfortunately broken in the “Epic Fixes” PR earlier in the year, has also been repaired with these changes. Below is a video and some images showcasing games that improved from these changes.
SPU ASMJIT v2.0 (#4422)
One of the most recent updates is SPU ASMJIT 2.0, providing an improved version of the original ASMJIT implementation. This affects the overall performance of the emulator and also increases compatibility and stability! Some games didn’t improve much while others, such as Yakuza and Drakengard, benefited greatly.
On the technical side RPCS3 now compiles Übertrampolines which are used to perform fast binary searches between multiple compiled code variants for a given address. Change some instructions to now be Inline which were previously falling back to the Interpreter. And finally build stackless functions on a lower assembly level, for basic blocks. This is, similar to what the PPU LLVM recompiler currently does. Which was implemented to improve its compatibility with libfiber. While this isn’t a state-of-the-art performance improvement, it should provide necessary compatibility.
While this does affect many titles, here is an example with Yakuza 3. Actual performance improvements vary between games and CPU used, and if there are bottlenecks other than SPU emulation. The tests were performed on quite modern and high end processors, improvements are expected for older models as well, as long they have AVX support.
A test made on an i5-4690 shows a minor improvement, but on an i5-7300HQ the improvement on the same test was huge. In the second screenshot this CPU is as fast as an i5-4690, going from 6fps to 9fps. On lighter areas the game goes around 30fps on both CPUs whereas they couldn’t before.
This PR provided major improvements to performance on TSX enabled CPUs (high-end Intel Skylake and newer, such as i5-6600k and i7-6700k, and many others). Transactional Synchronization Extensions (TSX) is an extension to the x86 instruction set architecture that adds hardware transactional memory support, speeding up execution of multi-threaded software. While TSX support has been known since 2015, RPCS3 has been able to use it since 2017 and has now been improved upon. Thanks to this PR, users with a compatible CPUs have reported upwards of 40% higher performance in some cases.
There were also tests on non-TSX CPUs such as Ryzen and similarly there was a noticeable improvement in performance, although not to the same extent. Subjectively one of our testers with a Ryzen CPU reported that frame rate was not necessarily increased, but it stayed at a more constant level with less variability from second to second.
Discord Rich Presence Integration (#4396)
Adds support for Discord Rich Presence in to RPCS3! With this feature, you can share what games you are playing and how long you’ve been playing them, all through Discord’s Game Activity Feature. This feature can be enabled or disabled via an option in the Emulator settings tab (thanks to isJuhn).
RPCS3 relies heavily on Discord. With over 3,000 people online at nearly any given time and over 28,000 in the server, RPCS3’s Discord is one of the largest, if not the largest, for an open-source software project. In addition to providing a community where people can discuss RPCS3’s progress, games they play on it, and sharing screenshots from those games, it actively contributes to development by given the developers real-time chats where they can discuss with each other and with the public at large about how to fix issues.
Back in the September 2017 progress report, we had highlighted that in addition to dedicated forums, there was a need to have a dedicated wiki for RPCS3 which would provide useful information to users. Finally, thanks to Ani and HerrHulaHoop, our wiki has been finalised and is now ready to accept contributions from the community. Check it out here!
We’ll be using the new wiki for some much needed functions such as:
1. Maintain information for general usage of RPCS3 and addressing some frequently asked questions to improve user experience. A lot of information and useful pointers is currently spread across our forums, issue tracker and discord channels. With the wiki, we will catalogue them in a single location making it more accessible to all users. This should also be of big help for those who aren’t very experienced with RPCS3. Our mission is for the wiki to be the best source for accurate and up-to-date RPCS3 information.
2. We will have separate game pages for each game capturing the basic data about the game as well as emulation specific details. For example, the game pages will contain information on developers, publishers and release dates, as well as information on IRD files for each GameID present and links to relevant pages. For now, we will only be covering Playable games.
3. We will also capture the recommended settings for each game and other specific emulation information such as known issues and special notes. This has been a long requested feature which will hopefully help save a lot of effort and make RPCS3 more user friendly.
This is only the beginning of the wiki and more functionality will be implemented soon.
The Last of Us
Some of you may have seen The Last of Us go ingame on the first of April only to think it was an April Fools’ joke. However, we’re glad to say that this wasn’t the case! Just a few weeks after this game went ingame for the first time, Nekotekina made some changes to the SPU which allowed this title to go ingame with the ASMJIT recompiler. This resulted in a massive performance improvement which you can see in the video above. With the fabled SPU LLVM finally on the way, this legendary title may soon see even more performance gains in the coming days.
Drakengard 3 can be played from start to finish with no major issues, thanks to improvements made in March. However, the game was first confirmed to be completely playable this month! You can see how it performs in the video above.
Demon’s Souls has been steadily improving over the past few months, to the point where graphical issues are almost entirely gone and performance has started to exceed real hardware.
Asura’s Wrath can be played from start to finish with good performance (aside from shader compilation) and near-perfect visuals. The original Playable report for this game was made in late March with a 4670K and the user reported a stable 30fps with no crashes.
Lollipop Chainsaw Massacre
Lollipop Chainsaw previously suffered from a bug where the game crashed when a trophy was unlocked. Thanks to the recent fix from megamouse, this issue has been resolved and the game is now fully playable.
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 April. Many of the unmentioned PRs are simply small updates, fixes, and other small improvements, sometimes only to the GUI.
4377 – Improve save data dialog by only showing new data when necessary, also cleans up cellSaveData a bit;
4384 – Improved Support for TSX, see coverage in major improvements;
4402 – Fixes issues with the TSX changes above;
4417 – SPU: minor fixes, fixes the non-TSX path in SPU, a regression caused by earlier TSX improvements;
4422 – SPU ASMJIT v2.0, see coverage in major improvements.
4382 – rsx: Fixes, see coverage in major improvements;
4469 – rsx: Major Fixes, see coverage in major improvements.
4364 – Stylesheets are now loaded properly from the /share folder when in AppImage or make install;
4389 – Bundle libstdc++6 with AppImage to make it work on trusty;
4396 – Adds Discord Rich Presence Integration, see coverage in major improvements;
4436 – Fixes AppImages for distros that are not ubuntu 14.04;
4459 – Fix appimage graphics, cleanup and appdata.xml fix.
4406 – Fixes misbehaviour in the vfs manager: Clicking “Reset” in the vfs manager would crash the app before. Also, “Reset” or “Reset All” did not reset the list to the defaults as one might think, but clean it and then use the current setting. Furthermore the settings were saved without regard to accepting the dialog or not.
4419 – Adds more checks for invalid parameters to the cellPad module. It is yet unknown if this affects any games;
4453 – Implements the missing log repaint functionality. Changing stylesheets now also repaints the old log messages in their new and correct colors.
4336 – Debugger Refactoring.
4432 – Fixes PPU disasm for branch opcodes: Fixes a mistake in the PPU opcode specification that caused it to display incorrect disassembly for certain opcodes.
4424 – Fixes a regression in the native overlay that caused a crash in some games when opening the save dialog, e.g.in “Uncharted”;
4503 – Improves the github readme by telling users to build preferably with Release-LLVM and giving better instructions for the Visual Studio 2017 setup.
4401 – Finally fixes the bug that got many games stuck at the end of cutscenes. The most popular game that got fixed by this is “Ni No Kuni”.
4445 – Fixes some games stuck on black screens like “Folklore” or “Heavenly Sword” by implementing sysCacheClear();
4449 – Makes the game “Cross Edge” playable by initializing a missing parameter in cellGameDataCheckCreate2;
4475 – Adds an option to disable Discord Rich Presence. You can find the corresponding checkbox in the Emulator tab in the settings dialog.
4471 – Fixes minor typos in the Debug Overlay and the Travis script.
4471 – Adds compatibility with the new FFmpeg version 4.0.
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. As of last month, RPCS3 now has two full-time coders that greatly benefit from the continued support of over 700 generous patrons.
This report was written by ssshadow, Asinine, Talkashie, Ani and HerrHulaHoop.