Progress Report: February 2018

RPCS3 has reached version 0.0.5! The full change log since 0.0.4 can be read here, but the highlights are massively improved compatibility (nothing section is down to 1.34%!), better AVX-512 and AVX2, as well as input improvements and profiles.
We also saw the end of PSP2 emulation in RPCS3. While it remains alive in a separate branch, the Vita emulator has been removed from master in light of the Vita3K project.
kd-11 also implemented a native user interface, allowing for games to be played fully with a controller, with the small exception of the on-screen keyboard, which doesn’t exist yet.

This report will focus on the changes that happened in February, which include some exciting work slimming down the nothing and loadable sections. RPCS3 is within reach of having every tested PS3 game be at least in the loadable section, if not the intro section!

Table of Contents

Major Improvements
Games
Commits
Upcoming
Conclusion

On compatibility database statistics, there’s not a big difference from last month as less games were tested, even though there were massive changes to the emulator (expect a beefier March report!). We can see an overall ~0.20% decrease on all categories except Ingame, which increases by ~0.80%. Note that we currently only have 34 games left on Nothing, and plan on making that number even smaller very soon!

Game Compatibility: Game Status
Game Compatibility: Monthly Improvements (February 2018)

On GitHub statistics, 6 939 lines of code were added and 36 937 were removed through 43 Pull Requests by a total of 15 authors.

Major RPCS3 Improvements

RSX Improvements (#4162)

kd-11 delivered another round of huge RSX improvements, fixing a ton of issues.
This is known to fix the blur regression in Trails of Cold Steel 1 and 2, the missing lens flare on Twilight Town in Kingdom Hearts 2.5 HD, texture flickering in Ratchet & Clank games, broken graphics in Journey, improving rendering in Cars 3 menus, amongst various others improvements, some unknown as we can’t test every game everytime.
Check the Games section for further details on these games.

Firmware Modules Callbacks (#4051, #4137, #4197, #4216)

These pull requests by scribam merged this month, properly registered several callbacks for diverse firmware modules, moving several games out of nothing, as well as fixing freezes and crashing in many others.
While not all of the features from these modules work properly yet, these additions represent a huge boost in compatibility and stability for a large number of titles, lists of which can be found throughout scribam’s PRs. A couple of examples are Tekken Tag Tournament 2, which went ingame for the first time, and Metal Gear Solid V: Ground Zeroes which also went from nothing to intro.

YoRHa GUI Theme (#4228)

A YoRHa (from NieR Automata) based theme for RPCS3’s QT GUI was made by AniLeo, who had previously made the Kuroi (Dark) theme.

Games

Journey

kd-11’s changes greatly impacted Journey’s graphic rendering this month. Illynir on our Discord server managed to play through the whole game with proper graphics! Unfortunately, it still runs way too slow to be considered Playable. In certain scenarios, this game might still not render properly for some people due to race conditions.

Ratchet & Clank

kd-11’s RSX changes fixed the texture flickering that occurred in all Ratchet & Clank games. Here’s a small comparison video:

Tekken Tag Tournament 2

cellMusic callbacks implementation made this title finally go ingame!

Rock Band

All Rock Band games went out of Nothing to display Title Screen and menus by implementing the currently unknown 01000000 filesystem flag. It’s not possible to play the games as of now because RPCS3 doesn’t support special peripherals yet.

3D Dot Game Heroes

Apart from a few (rare) crashes, this game runs very well and the graphics are also looking good!

Silent Hill: Downpour

Silent Hill: Downpour has been played from start to finish with only some graphical issues and the Prologue section causing issues. This footage was recorded on a mid-range CPU so you can expect even better performance if you have a powerful CPU.

Ni no Kuni

Fifazalata in our Discord server managed to finish this game. Unfortunately, it still suffers from performance issues in certain parts and crashes at the end of cutscenes if they’re not skipped.

Cars 3: Driven to Win!

RSX improvements caused the rendering of this last PS3 title (it was released on July 2017!) to slightly improve.

Godzilla

By adding 2-channels mode for cellAudioOutGetDeviceInfo, this game went out of the Nothing section right into Ingame!

Thexder Neo

This game went out of the Loadable section right into Ingame!

Metal Gear Solid V: Ground Zeroes

By implementing cellMusicDecode callbacks, MGS V went from Nothing to showing the Title Screen!

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 February. Many of the unmentioned PRs are simply small updates, fixes, and other small improvements, sometimes only to the GUI.

Nekotekina

4131 – This huge pull request brings a lot of changes to the CPU side of the emulator. It adds AVX2 and XOP paths to some SPU Instructions on the ASMJIT Recompiler, handles exceptions at game list update and when a broken patch.yml file is present, adds an initial implementation for a future CPU Translator, fixes and rewrites several PPU and SPU instructions, and improves deduplication logic on game list.

4160 – Removes PS Vita emulation and adds a branch preserving the code.

4170 – Some minor additions to CPUTranslator (bitcast, trunc, zext, sext), and adds some options to Vulkan to work around issues.

4223 – Implements ICmp operations on CPUTranslator, optimizes SPU Interpreters, makes SPU decoder similar to PPU decoder. Fixes a regression that caused boot to crash when booting from recent list. Improves TTY output: uses atomic variable to sync TTY size, implements console_putc (liblv2), writes in plaintext instead of HTML and fixes random line breaks in TTY. Performance in TTY logging is improved overall.

kd-11

4136 – Adds some OpenGL API compliance fixes, implements proper texture read barriers on Vulkan and improves RSX framebuffer code: If pitch is 64, checks the log2 dimension bits instead to determine size. This fixes a regression that broke graphics in games like Yakuza 3 Demo, Ninja Gaiden Sigma and Ninja Gaiden Sigma 2.

4162 – This huge pull request brings a lot of changes to RSX emulation. Details on this and what we know to have improved can be found on the ‘Major Improvements’ section.

4193 – Implements base swapchain type to remove dependency on WSI providers being present. This is the case when attempting to run Vulkan from a secondary GPU whilst the primary GPU is an NVIDIA one on linux. Two additional display providers other than the WSI one are also provided, one for WIN32 and another for X11 to cover the common cases.
This allows use of a secondary GPU on linux which was a big problem for graphics development on linux. Note that while mesa drivers can present data from secondary GPUs, proprietary drivers do not, and often times the user will have the NVIDIA GPU as primary to avoid problems with X. Overhead of using the native sw fallbacks is currently about 4ms at 720p, 7ms at 1080p (~250fps max at 720p, ~125fps max at 1080p).
While this PR in itself may not mean much to most users, the possibilites with display out are now infinite. Additional swapchain providers can be added to do cool things like writing images to file, injecting custom postfx, encoding image output to video and streaming over a network, etc, etc.

flash-fire

4175 – Adds the flag CELL_FS_O_UNK. What it actually does is currently unknown, but Rock Band now goes in game.

hcorion

4192 – Adds an easy way for package builders to disable native cpu optimizations (-march=native)

4226 – Simplifies the Linux build scripts for updates to future Qt versions.

Megamouse

4016 – Adds a convenient checkbox that enables the removal of additional game caches and configs when using the game list’s game removal feature. Future updates might include game data removal as well.

4106 – Fixes firmware installations for vfs. Older builds would always use the default directory, leading to “missing” firmware files in case of using a different directory for dev_flash.

4140 – Finally removes the redundant game list toolbar as was decided long ago. The convenient buttons for the categories will most likely be added to the main window once they got new icons. This also makes the gui code a lot more readable and less confusing.

4158 – Minor code simplification for the various gui’s boot processes.

4159 – Improves the vfs dialog by using simple clicks instead of tedious doubleclicks for the path selection and simplifies some code. Also fixes a possible bug where the trophies would ignore the vfs.

4181 – Fixes an issue where right clicking and selecting boot refreshes the game list, causing it to return to the top in grid view.

4202 – Updates RPCS3 to use Qt 5.10.1 on travis and cmake. Appveyor builds are the only ones left that still run on 5.10.0.

4227 – Enables the use of firmware or custom fonts in stylesheets. Just place your font in either fonts or dev_flash/data/font and use the actual font name (not the filename) in your stylesheet with font-family: yourfont.ttf;

4234 – Fixes QDockWidgets’ backgrounds when they’re detached from main window.

AniLeo

4154 – Compat list colors now match website. Some custodial work, as well as some dependency updates.

4228 – Adds new YoRHa (NieR Automata) UI based theme for RPCS3’s UI.

elad335

4002 – Implements sys_gpio syscalls.

4073 – Returnes enosys on unimplemented calls. Fixes issue 4071.

4147 – Various SPU fixes. Adds a stop code, removes a redundant check and adds a missing one.

4190 – Adds some files to gitignore.

4194 – Allows spu disassembler to wrap around rather than reporting illegal address. Fixes potential conflicts with main storage in the debugger.

scribam

4051 – Adds callbacks for various functions to reduce possible crashes or freezes in certain locations.

4082 – Reduce possibilities of crash or freeze when using the related functions in specific cases like video recording, exporting or uploading.

4137 – Reduce crashes or freezes when calling photo exporting functions.

4144 – Adds previously missing function names sceNpMatchingGetRoomMemberList, sceNpMatchingJoinRoomGUI, sceNpMatchingGetRoomListGUI and sceNpMatchingSendRoomMessage

4149 – Make cellNetCtlGetInfo return the correct value in disconnected mode.

4169 – Fixes some bugs in the sceNP and cellGame module and enables Bound by Flame to reach ingame status.

4197 – Adds callbacks for functions in cellMusic. Fixes issues in a range of games; list can be seen in PR comments.

4216 – Adds callbacks for functions in cellMusicDecode. Metal Gear Solid V: Ground Zeroes now reaches the intro instead of doing nothing.

4225 – Adds a previously missing 2-channel-mode to cellAudioOutGetDeviceInfo that helps “Godzilla” to go from nothing to ingame! Also helps “Sakigake!! Otokojuku-Nihon yo, Kore ga Otoko de aru!” to progress further.

TGE

4029 – Makes the game window spawn centered on top of the rpcs3 main window instead of always being centered on the primary screen. This also keeps the actual screen borders and taskbar in mind to stay completely visible and not get cut off.

4109 – Fixed a potential crash while using the native overlay.

zarroboogs

4139 – Improves the Appveyor build with several changes: Updates Qt to version 5.10.0, uses 7z instead of zip to reduce the RPCS3 artifact size to ~2/3 of what it was before, includes the latest compatibility database in the artifact, adds openSSL artifacts and various other fixes.

4206 – RPCS3 now uses the format rpcs3-{tag}-{commit_count}-{commit_hash} for naming. RPCS3 also now has matching names on both Windows and Linux builds.

4208 – Fixes some issues from #4206 re:travis. Exposes some variables in AppVeyor for API usage. Also bumps RPCS3 version to 0.0.5.

isJuhn

4176 – Implemented _sys_qsort in sys_libc_.cpp which allows libvdec LLE to work with applications such as Twitch TV. Occassionally throws an error with liblv2.sprx only mode.

Nicba1010

4148 – Adds Appveyor artifact sha256 hashes.

jfhs

4027 – Makes improvements to GDB debug server, making it work with changes to RPCS3’s core as well as other fixes.

zekesonxx

4138 – Fixed a crash on broken symlinks, e.g. when a drive is not mounted.

abbradar

4205 – Fixes NixOS builds.

Upcoming

But does it run Crysis?

And apparently, other games too.. Interesting games. Soon? Soon.

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. Currently 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.

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