Welcome to October’s Progress Report! Thankfully, there have been no major delays in publishing this time around, and we hope to continue gradually closing the gap even further in the future.
On the other hand, since both of our main developers were busy this month doing heavy refactors and rewrites in the background, not all of the changes are ready to be showed off just yet. While Nekotekina’s current efforts aren’t about yielding direct and spectacular changes to begin with, we did do a write-up about kd’s changes and another graphics related PR from ruipin here in the Upcoming section below.
This isn’t to say that October was without any changes, as one entry of a cult-classic and previously PlayStation exclusive AAA series, Yakuza, just hit playable this month! For this, and more, let’s dive in and see what happened during the month!
In addition to the following report, further details of Nekotekina and kd-11’s work during October and their upcoming contributions can be found in their weekly reports on Patreon. This month’s Patreon reports are:
Status update from kd-11 (2018-10-07)
Status update from kd-11 (2018-10-21)
Status update from Nekotekina (2018-10-28, part 1)
Table of Contents
Looking at the compatibility database, we can see the numbers continue to move in the right direction at a slow, but steady pace. Around 60 new games have been added to the Ingame and Playable categories, and several has transitioned up between those. Also, with the consistent bug fixes and accuracy improvements, our developers and contributors continue to chip away the Intro and Loadable categories, as well as improve the games of other categories. For further details, take a look at the compatibility history page to see which games in particular had their status’ changed during the month.
On Git statistics, there have been 4,128 lines of code added and 2,583 removed through 30 pull requests by 8 authors.
Major RPCS3 Improvements
Fixed u16 Index Arrays’ Overflow (#5229)
This month, eladash fixed an issue where overflows occurred during the addition of 20-bit vertex base indices to 16-bit index arrays by storing the calculated indices in 32-bit arrays instead. This turned out to be plenty impactful, as it fixed the exploding vertices seen in the Yakuza series, Lego series and a bunch of others:
Improved Texture Parameter Handling (#5206)
After some detective work, eladash also figured out further details about RSX texture register reads and their accepted value ranges. This includes: mipmap, height and width not being allowed to be zero; depth parameters being completely ignored if the texture type is non-3D, even when set to silly values such as 0 or 513; and lastly, not throwing exceptions when using height above 1 with 1D textures. Thanks to this, he was able to remove a few hacks and improve overall compatibility. These changes fixed Remember Me and probably more:
Various Cosmetic Changes (#5210, #5216, #5217, #5272, #5286, #5247)
Apart from the aforementioned technicalities, some UX/UI related changes have been put in place during the month as well. While on their own they might not have been that significant, together we thought they do deserve a dedicated section.
Thanks to Megamouse, users now have a GUI option, within the per-game settings in the “Emulation” tab, to toggle and alter the shader loading background discussed in the September report, as well as a Master Volume slider within the “Audio” tab to enable boosting the game’s audio.
In addition to this, issues with our native overlay implementation, such as being only able to select the top and the bottom save slot (4456) or not being possible to switch up the Circle and Cross buttons when playing Japanese titles (4226), have both been fixed. To elaborate a bit on the latter one, the issue was that the Circle button in Japanese titles is usually the Select/Accept button, while on the native overlay its the Cancel. This lead to the native overlay being immediately cancelled upon opening it. Users can now switch up these buttons of the native overlay, and thus, take care of this issue without needing to disable it completely.
Lastly, the gamelist saw some changes as well. Users can now bulk-add their games via “File” -> “Add Games”; a feature that was previously only possible via drag&drop. The other notable improvement here was regarding the Grid View, which thanks to MSuih, now also displays compatibility ratings as seen below:
Thanks to eladash fixing the issue with u16 index arrays overflowing, all of the major issues with Yakuza Kenzan have been fixed! Yakuza Kenzan has since been also confirmed to be playable from start to finish with good performance and stability:
Fan-translators has since reached out both under the reddit thread for this video, and below the video within the comments, asking for help with finishing the translation. According to them, the main story and the sidequests have already been finished, only the HUD, item descriptions, mini-games, etc. are left. If you are interested in helping them, check out the comment they left here.
Yakuza 3, 4 & 5
During October, a user from our forums reported that they managed to play through these three entries of the Yakuza series from start to finish! Due to performance and instability issues however, these titles remain in the “Ingame” category for the time being. Click on the images below for a full 5K screenshot!
Ninja Gaiden Sigma 2
A user on our discord server by the name of “aneesaw” managed to finish Ninja Gaiden Sigma 2 this month! Although it has been finished, we still do not consider it Playable, due to the performance not quite being up to scratch just yet.
Spider-Man: Edge of Time & Spider-Man: Shattered Dimensions
These two Spider Man titles managed to finally hit Playable in October. Feel free to check out some gameplay from them below:
Majin and the Forsaken Kingdom
This console exclusive title was also found to be playable this month:
Thanks to one of eladash’s pull requests (5248), Amplitude went from Loadable all the way up to Playable:
There have been numerous other pull requests merged during the month that just couldn’t make it to the Major Improvements section. We have collected a list of all other improvements here, and attached a brief overview to each. Make sure to check out the links provided for them if you are interested, as their GitHub pages usually uncover further details as well as the code changes themselves. To see this whole list right on GitHub, click here.
5211, 5213 – Series of LLVM recompiler and other backend improvements to fix outstanding issues and slightly optimize performance;
5244 – Further refactoring and improvements to the backend and fixed performance overlay on Linux.
5206 – Removed few texture parameter hacks, see coverage in the Major Improvements section above;
5229 – Fixed overflow with u16 index arrays, see coverage in the Major Improvements section here;
5246 – Fixed tile binding to main RSX memory in GCM, which addressed a few DX12 crashes and allows tiles and zcull bindings in RSX captures to be inactive;
5248 – Implemented register usage in draw calls using inlined vertices arrays, bringing Amplitude from Loadable to Playable!
5274 – Fixed PPU stack allocation size calculation by allocating the calculated result instead of using the raw stack size from the register, a typo from PR 5244;
5280 – Fixed RSX capture replay thread creation and restored capture system to the original state after PR 5244;
5292 – Fixed HLE libGCM regression caused by changes to the PPU threading system in PR 5244;
5291 – Improved RSX FIFO queue viewer by fixing command readings, scrolling and added auto jumping to the current FIFO’s “instruction address” register (GET register) on startup.
5210 – Added shader loading screen options to the emulator settings (Configuration -> Emulator) and customization options for said shader loading screen. This includes enabling the new background image and changing its levels of blur and brightness;
5216 – Fixed input problems with the native overlay which addressed the save dialog issue where the list would automatically jump to the end of the list. Also fixed skipped dialogs;
5217 – Added support for Japanese button layout. On Japanese consoles the X and O buttons are usually switched in OS dialogs like save/load etc. The prior implementation resulted in some level of confusion particularly when playing Japanese titles;
5250 – Added proper titles to the dialog boxes when compiling shaders or LLVM modules (Instead of “Normal Dialog”);
5272 – Added Master volume to audio settings (Configuration -> Audio);
4121 – Fixed incorrectly reset evdev configurations on Linux when using multiple devices with the same name by adding enumeration to the device names;
5286 – Added “Add Games” option to the file menu. It adds all games in the selected folder to the game list. This was only possible with drag&drop before;
5283 – Fixes the path in which RSX captures (.rrc files) are stored (from main directory to /captures) and adds title id and timestamps to their names. “Strict mode” is no longer required to take RSX captures.
5247 – Added “Show Game Compatibility” option to the view menu, for displaying game compatibility status while using the grid view;
5268 – Added Master volume setting to config.yml.
5267 – This PR set the Qt renderer surface to Vulkan on MacOS only, which now allows RPCS3 to work with MoltenVK. Do note that RPCS3 still does not work well on MacOS, as every commercial game we know of crashes;
5255 – This PR made the ‘help’ command line argument work, added a –version option, and set the Qt application name.
5241 – Edited RPCS3 GitHub README to add punctuation and improve readability.
5183 – Improved PPU Interpreter’s accuracy of fnmadd and fnmadds instructions;
5234 – Improved PPU Interpreter’s accuracy of vec_vsl and vec_vsr instructions;
4921 – Improved PPU Interpreter’s accuracy of vec_vminfp instruction.
5116 – Fixed a warning that shift overflowed data type width.
FIFO Rewrite by kd-11
Since the middle of September, kd-11 has been busy rewriting FIFO command queuing, aiming to break past the performance limitations we have been experiencing in draw call heavy titles. This task has proven to be much more challenging than expected however, as RPCS3’s renderers required significant changes to how they worked. With some of the new experimental code already in master as of this report, a minor performance boost can already be perceived even without the further optimizations and the complicated FIFO optimization passes enabled.
The most obvious places these changes will (and already do) cause significant improvements, is in situations with high draw call counts, such as in Ratchet and Clank titles. As of this report, kd-11’s pull request for this set of changes has already been submitted to our trackers, so users are free to test it before its changes make it into the master builds. You can check out how the PR progresses towards completion and merge, and help out with testing it here.
A more detailed rundown on what roadblocks were hit during the PR’s development, why it took so long, and just how exactly were things changed in the end will be covered in November’s Progress Report.
Further Texture Cache Fixes and Predictor Rewrite by ruipin
Since ruipin has finished working on the texture cache rewrite we talked about in our September Report, he encountered further minor bugs and oddities. Amongst all these however, the texture cache predictor badly needed a rewrite, as it broke in a number of ways after his enormous PR got merged. He has since rewritten it, and along with other fixes, he submitted a PR you can find here. Further testing is also needed here, so user contributions are welcome!
This sums up our October report. 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 now has two full-time coders that greatly benefit from the continued support of over 800 generous patrons.
This report was written by Asinine, dio, digitaldude555 and elad335.