October was a huge month for RPCS3. Our lead graphics developer, kd-11, implemented High Resolution Rendering and made many improvements to the emulator. While Nekotekina made some general improvements to the emulator, which will be discussed in this report, he also bought some parts and assembled a new computer with a future-proof CPU which will allow him to debug RPCS3 more efficiently, faster, and allow him to make sure newer instruction sets like AVX-512 work properly with RPCS3 when the right time comes. You can find more details on the latter and also discuss further on it at https://www.patreon.com/posts/pursuing-avx-512-15151688
Table of Contents
Starting off with the compatibility statistics as usual, the Intro/Loadable/Nothing categories keep growing small and Ingame/Playable titles keep increasing. We’ve also hit 500 playable games this month!
Looking at the GitHub statistics, 16 authors have pushed 131 commits to the master branch. Here 180 files have changed and there have been 12,626 additions and 5,068 deletions of lines of code. Below some of the major improvements from these code changes are summarized.
Major RPCS3 Improvements
High Resolution Rendering (#3557)
This was the showcase feature of the month! Being able to render games at resolutions up to 10k allows you to see detail that just wasn’t visible with 720p. This is especially noticeable with games that have highly detailed assets such as Demon’s Souls. Best of all, the performance hit is so small that you can even achieve the same performance at 4k with any modern dedicated graphics card that supports Vulkan. Take a look at the video below for some side-by-side comparisons.
But kd-11 didn’t stop there! He also added in support for up to 16x Anisotropic Filtering which greatly improves texture detail and implemented support for vSync with Vulkan. Read the blog post on High Resolution Rendering for more information.
Thanks to flash-fire, RPCS3 now has support for trophies! Users will receive a notification whenever a trophy has been unlocked, and they can even track trophy progression and information in the new Trophy Manager window. This should bring more of a social aspect to the emulator and maybe even some competition between users.
This is very much a Work In Progress: there will be design and functionality improvements in the coming months.
Fixed clear commands for depth only passes (#3618)
By fixing this, kd-11 removed the need for the Invalidate Cache Every Frame option which was a workaround used to fix graphics (mostly shadows) in certain games. This option was a workaround on missing buffer invalidate commands on rsx. There were instances where it was obvious a depth buffer should have been reset but the contents were still present long after the frame was completed. A workaround was needed to circumvent this issue while we investigated why the buffer contents were not cleared.
Jarves found a check that discarded clear commands when the framebuffer was determined to be in a disabled state, and discovered that disabling it sent the missing clear command down the pipeline correctly. After reworking the framebuffer check to accept empty framebuffer descriptors as long as a depth surface was active, the option was no longer needed. The rsx now correctly clears buffer contents when required and the workaround is no longer necessary.
That means users no longer need to figure out if their game(s) need this option enabled as the setting has been removed from the GPU tab, making it easier to configure RPCS3! This also fixed an issue with Ni No Kuni where shadows would sometimes follow the camera around.
Page Fault Implementation (#3611)
After flash-fire’s Page Fault Implementation changes were merged, many Unity games progressed further or even became fully playable! More notably however, all Gran Turismo games progressed from nothing to loadable! Future progress is cautiously optimistic as overall emulation is improved. GT utilizes tons of threads (>40), resulting in many race conditions currently.
SPU Accuracy Improvements (#3661)
Jarveson improved the accuracy of the SPU Decoders which resulted in some rather notable improvements to RPCS3. This fixed an issue with LittleBigPlanet Karting and made quite a few games progress further or even go ingame for the first time! More details below. It’s hard to say how many games got improved from this change, but as testers continue their efforts of keeping the compatibility list up to date they will undoubtedly make more discoveries.
A few improved Games
Dead Space 3
Thanks to accuracy improvements to the SPU decoders by Jarveson, Dead Space 3 and Mass Effect both go ingame for the first time! There are some graphical issues in both titles but overall they look rather impressive.
Need for Speed: ProStreet
Jarveson’s SPU accuracy improvements also managed to push this well-known racing game a bit further this month. This game now reaches the title screen in RPCS3 for the first time. While the interface renders at the correct aspect ratio, the graphics do not. The game unfortunately crashes when trying to start a race.
We are once again coming closer to answering the age old question “But can it run Crysis?” thanks to the recent SPU accuracy improvements from Jarveson. This is the first time Crysis 3 has displayed any graphics.
Fighting Climax Ignition
The image on the left shows the state of this game before the texture cache fixes by kd-11. It previously froze at that screen. Now, as pictured on the right, it goes ingame and runs well. Unfortunately it still suffers from random crashes, but this is a step in the right direction.
Midnight Club: Los Angeles
Thanks to some regression fixes from Nekotekina and Farseer you can now play this game with the latest RPCS3 builds. The performance is still far too slow to be considered playable and there are still some graphical issues, but it has improved quite a lot.
BlazBlue Continuum Shift EXTEND
Thanks to kd-11, BlazBlue Continuum Shift no longer has a black bar on the top of the screen as you can see in the before (left) image. This issue, which was also present in other BlazBlue games, is now fixed.
When Vikings Attack
This Playstation exclusive PSN title is now playable thanks to flash-fire’s Page Fault Implementation.
Rain is another Playstation exclusive PSN title which got improved thanks to flash-fire’s Page Fault Implementation, this month marked the first time it has gone ingame.
Battle Princess of Arcadias
Yet another Playstation exclusive became playable this month thanks to some recent improvements.
Trails of Cold Steel 2
One user in our Discord channel came across this rather amusing rare bug in Trails of Cold Steel 2.
More Improvements (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 October. Many of the unmentioned PRs are simply small updates, fixes, and other small improvements, sometimes only to the GUI.
#3575 – Various improvements including fixing regressions with Skate 3, GTA V, Wolfenstein and FFX HD. He also optimized the loading of PPU modules and allowed users to cancel loading the shader cache when launching a game without crashing RPCS3.
#3672 – Nekotekina began his implementation on ppu_acontext which is a discrete interval analyser. This should help optimize RPCS3 by essentially guessing values that will be passed to it ahead of time. This will also hopefully help fix some PPU Unregistered function errors, further increasing RPCS3’s compatibility. Also allows users to launch (S)ELF files with PS3 flags through cmd such as –sendargumenttoself further improving debugging.
#3686 – Added the ability to delete LLVM pre-compiled objects (cache) from within the RPCS3 interface. Fixed some NPDRM warning messages and more.
#3563 – Improved memory protection behavior when strict rendering mode is off. And improved how strict mode works when using OpenGL. This fixed broken text and other issues in games such as Catherine or LBP Karting when strict rendering mode is off. This was also a very welcome improvement because strict rendering mode doesn’t work with high resolution rendering. Fixes an issue where RPCS3 would hang when a user with Windows and an NVIDIA GPU resized the game window or entered full-screen. This only affected users that were using the resolution scaling option and was fixed a few days after the resolution changes were merged.
#3571 – Forces actual vSync, rather than adaptive. Adaptive gives good frametimes, but can still have tearing. True vSync prevents tearing, but may cause judder. If you’re experiencing judder disable vSync.
#3581 – Fixed a random crash users with Windows and an Nvidia GPU experienced when resizing the gsframe(game window).
#3587 – Fixed some issues with the texture cache, resulting in multiple games being fixed or improved. Of these games, several of them were console exclusive titles, like “Super Robot Taisen Z” and “Dengeki Bunko: Fighting Climax”.
#3591 – Allows full, albeit slow software emulation of the blit engine. This option is exclusively for debugging, and has been added to the debug tab. Also fixes memory protection in strict mode, which should stop the emulator from hanging with Write Color Buffers enabled.
#3638 – These changes included debugging improvements, a fix for a crash in VirtualMemory due to 0 pitch, and more. This was responsible for fixing the strange black bar in the BlazBlue games as well as fixing a few issues with Yakuza 4. There are surely other games affected by this as well.
#3600 – Updated Vulkan submodules, this makes it easier to use newer Vulkan SDK versions for debugging which new drivers are based upon. It’s possible that this change may have had a minor performance improvement.
#3618 – The “glMultiDrawArrays” function is now emulated as it is broken on Windows drivers. If you have an AMD video card and were experiencing crashes or even a BSoD in Demon’s Souls, this should have fixed the issue. Removed the need for the Invalidate Cache Every Frame option which was already detailed under the major features section here.
#3629 – Extends workarounds from 3618 to work on Linux as well. Drops the experimental build warning on self-compiled builds.
#3651 – Makes strict mode more accurate by removing draw call batching, which is known to fail in rare cases. Fixes a bug introduced in vertex rewrite; probably fixes some corrupt 2D graphics.
#3668 – Improvements to the texture cache that fixed a rare issue where RPCS3 would hang when using Write Color Buffers. Temporarily reverts some incompatible code that caused driver crashes. Improvements to the GSFrame (game window) which fixed a bug when using the “start fullscreen” option in RPCS3.
#3527 – Allows the debug tool(s) to be recolored in custom stylesheets, such as the Kuroi (Dark) theme By Ani.
#3530 – Moved the renderer info to emu_settings. Added some tooltips and checkboxes to debug tab, refactored game_list_frame to be easier to understand and more workable.
#3532 – Fixed some issues with the experimental build warning, as well as smoothed out jumping while scrolling in the game list. All bootable categories now display in the game grid, as networking was partially implemented.
#3540 – Fixed a regression that caused a mismatch between the number of entries in the game grid and the grid size.
#3550 – Megamouse created a syntax highlighter which can be attached to any text field. Currently it’s only implemented in the cg_disasm tool but in the future it will most-likely be added to other areas of RPCS3. It’s possible to add RegExp rules to highlight/colorize certain words, variables or comments making displayed code more readable.
#3558 – Tooltips now show in the description box, instead of in popup text. Various edits to tooltips for accuracy.
#3619 – Added clear to the context menu(right click) of the TTY log. Already existed in main log.
#3670 – Fixes the save data dialog from being the wrong size initially. Looks much better when first run.
#3553 – This commit fixed the sceNpManager callback regression. This affected GTA IV, GTA V, Midnight Club: LA, Tony Hawk’s Pro Skater and more.
#3631 – This PR, titled “Save Manager Improvements”, added the ability to select and delete multiple entries at once, open their corresponding save folders and more. These changes, while small, made the save manager quite a bit more user friendly. There are most certainly more changes to come to further improve the save manager.
#3657 – Trophies now respect the system language.
#3674 – Fixes an issue where if a user had a game located in a NOT_READY drive such as an empty physical/virtual disc drive RPCS3 would crash upon launch.
#3519 – Implemented joystick deadzone support for evdev (linux). This was a very welcome improvement for anyone using RPCS3 on linux with a controller.
#3551 – Added the ability to map the left joystick inputs to the dpad with evdev (Linux). This made it possible to play with a flight stick and some other controllers. Simply set “Left Analog to Dpad: true” in the config_linuxjoystick.yml file.
#3554 – When compiling RPCS3 with LLVM (default) cmake will now compile from the LLVM submodule if and
only if a suitable LLVM version is not installed on the system. This means it’s now possible to compile RPCS3 with Linux distributions that do not support LLVM 4.0. This will also be very helpful when RPCS3 is updated to LLVM 5.
#3633 – This first time contributor made some improvements to the debugger’s User Interface inside RPCS3. The current instruction is now shown in the middle so you no longer have to scroll up to see previous instructions. MRG95 also added a breakpoint list so you can see all of the current breakpoints and made some functionality changes.
#3574 – Another first time contributor, yzwduck, fixed an issue where some of the vertex shader code was not generated properly. This caused Utawarerumono Itsuwari no Kamen to freeze with an gl::glsl::link_exception error.
Pad Improvements and Button Mapping (#3611)
Megamouse began implementing the ability for users to map controllers that use Xinput, Evdev (Linux), DualShock 4 and MMJoystick from within RPCS3. The process is very fast and simple; just select the button you want to remap and press the button you wish to change it to. These changes also allow users to change joystick deadzones and rumble settings.
Initial work on sys_usbd syscalls (#3673)
hcorion laid the groundwork for connecting USB devices to RPCS3. This is annoying and laborious work, because, like a lot of the syscalls on the PS3, they’re completely undocumented. It’s through sheer luck that we even know the names of some of them. It’s most likely that game developers weren’t even given documentation on these syscalls. Thankfully, Clienthax lent his PS3 DECR to hcorion, and even bought a Skylanders Portal to assist with debugging these syscalls.
This PR ‘stubs’ the USB syscalls. Stubbing a syscall won’t magically make it work like it would on a real PS3, but it implements them just enough so that it should work without regressing other games.
Also coming soon…
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 600 generous patrons.
This report was written by ssshadow, Asinine, Talkashie, and Ani.