Welcome to August’s Progress Report! Firstly we would like to apologize for the delay in publishing this report. RPCS3’s progress reports are solely written by volunteers and a few of our regular writers could not contribute to this report due to personal commitments. If you hate seeing RPCS3’s reports get delayed and would like to contribute to them, please apply here.
If you thought July was a big month for RPCS3, then prepare yourself for this progress report. This month saw 20 pull requests from eladash alone as he set a goal to have all his work merged in RPCS3 before his conscription service began. Not wanting to be outdone, Nekotekina and kd-11 also made a dozen pull requests each improving various parts of the emulator. We’ve got a lot to go over so let’s get straight into it!
In addition to the following report, further details of Nekotekina and kd-11’s work during August and upcoming contributions can be found in their weekly reports on Patreon. This month’s Patreon reports are:
Table of Contents
August saw a major change in the way games are counted in the compatibility statistics with all online multiplayer games in the Intro category and below being excluded. This was done to better represent the state of the emulator’s progress as these titles did not work as the servers that they wish to connect to no longer exist. Thus, even if RPCS3 becomes 100% complete, these games will not work unless somebody sets up a private server and emulates the original server accurately. These titles are still present in the compatibility list and are represented with a lightning bolt symbol next to their title. While they will still show up in all search queries, they will no longer be included in our statistics to showcase a more accurate picture of RPCS3’s development.
Moving on to actual improvements, our testers finally picked up the slack from the past few months and extensively tested the Ingame category which gave the Playable category its largest increase of the year. Every other category saw large decreases with Ingame shedding 88 games and Intro and Loadable recorded one of their largest drops ever percentage wise with drops of 17% and 20% respectively. An effort was also made to merge duplicated titles in the compatibility list which also aided the drop in these categories. As mentioned in the previous month’s progress report, the Nothing category doubled in size to 4 games due to erroneous tests, but this has since been fixed bringing the category back down to 2 games.
On Git statistics, there have been 8536 lines of code added and 5418 removed through 71 pull requests by 15 authors.
For Windows users, if you encounter an error stating that VCRUNTIME140_1.dll is missing when trying to run RPCS3, please install Visual C++ Runtime 2019. With the move to using certain features available only with Build tools v142 in Visual Studio 2019, RPCS3 now requires the latest Visual C++ Runtime. Users can also find the link to the runtime on our Quickstart guide.
Major RPCS3 Improvements
Version increment to 0.0.7 (#6446)
In light of all the recent improvements made, RPCS3 has now bumped its version to 0.0.7! This has been long overdue considering the increase in compatibility and performance seen since January 2019. Apart from improvements to the core, we also saw the inclusion of support for PlayStation 3 accessories and the DualShock 3 controller, a native On-Screen Keyboard interface, various new themes for the emulator’s UI and the ability to increase frame caps using options such as Vblank frequency and Clocks scale.
Unfortunately, the full changelog is not yet available as it is a massive effort to document since it spans over 800 commits. However, users who wish to know all the improvements made to the emulator since version 0.0.6 can read our monthly progress reports starting from February 2019. A select few improvements were described in the Major Improvements section of every month while the full list of improvements available in the Other Improvements section.
Please note that the release marked on GitHub is only to mark the milestone. All users are recommended to download the latest master build from our website to get all the latest improvements and benefits.
Improvements made by eladash (#6286)
Anyone who follows RPCS3 knows eladash as a developer who has immensely improved almost every part of the emulator, especially the accuracy and performance of PPU and SPU emulation. Thanks to his work, a large number of games have become compatible with the PPU and SPU LLVM recompilers, performance on non-TSX CPUs has drastically improved and his lv2 & MFC contributions related contributions largely increased game stability. He is also known for analyzing issues plaguing games present in the Loadable and Intro categories, and helping them advance to the Ingame and Playable categories. In particular, some of his most notable cases is getting several Naughty Dog titles to progress ingame and figuring out the very last issue that kept Metal Gear Solid 4 from properly booting.
Unfortunately, eladash has to say farewell to the project as he has to fulfil his country’s military conscription requirements. This means that his contributions will be significantly curtailed from August till the end of his term. However, not wanting to leave things unfinished, elad made it a point to complete most of his contributions and have the same merged into RPCS3’s master repo. The end result of this was having 20 pull requests merged in this month alone, each one targeting a different part of the emulator. While we all love to see elad’s contributions to the emulator, it is simply not possible to cover all the contributions he made in the month. Instead, we’ve decided to focus on few important contributions that greatly benefitted us all. for the full list of contributions made by eladash, please see refer to the Other Improvements section.
First off, elad improved the implementation of various instructions relating to the PPU such as FCTIW, FCTIWZ, FCTID and FCTIDZ when the floating-point operand rounds to an integer bigger than INT32_MAX. Next, he fixed shift count in the PPU interpreter’s implementation of SRD and SLD instructions by masking the shift count with 127. While these improvements may seem minor, its impact was significant to say the least. Together with other improvements made in the pull request, Metal Gear Solid 4 went ingame for the first time on RPCS3! As a community, I don’t think we could’ve asked for a better parting gift than this.
eladash sure knows how to go out with bang!
In addition, elad also improved sys_get_current_time() to scale time relatively to emulator startup instead of Epoch to fix issues where the system clock would loop back after about 30 minutes to the beginning of timestamp when emulator was first launched.
Several weeks ago, while analyzing and fixing regressions, kd-11 encountered a particularly puzzling issue in newer Naughty Dog games, such as The Last of Us and Uncharted 3. Multiple user reports indicated that the graphics quality regressed and had a lot of ‘noise’ in their presentation. After spending days analyzing logs and traces, kd-11 realized that these were not actually regressions but rather issues that were always present in the games and hidden under other bugs. Now that they were out in the open, kd-11 decided to investigate these issues deeper and see if they could be fixed.
At first, kd-11 couldn’t find any possible solution, until he noticed that these games use the SPUs in addition to the RSX to render graphics which led him to theorize how a game would render with both Cell and RSX at the same time. He added a memory hash routine to scan large sections of memory for alterations and found a hit – the engine was rendering in parallel with both processors and re-injecting results from the previous frame into the last stage of the next frame. This meant that it was necessary to accurately initialize memory with Cell contents, a feature already planned, but largely unimplemented called “Read Color Buffers” and “Read Depth Buffers”. Several days later, this feature was implemented and the results were immediately promising. Users can find these options under the Advanced tab of the Settings menu.
In the meantime, kd-11 also received complaints of very poor performance in these games, and it was reported that using the “CPU blit” option seemed to help with this. For those unaware, CPU blit simulates the GPU copy engine on the CPU which is naturally inefficient but provides better accuracy. However, from the user reports it was clear that enabling this option yielded a performance benefit and was a clear indicator that something was broken. Investigating this further, kd-11 rewrote the blit engine behaviour to simulate a proper DMA controller and treating PlayStation 3 VRAM as completely separate memory from the main PlayStation 3 memory. He also added a DMA memory mirror pool with a sparse memory pool but this is still handled manually instead of relying on the GPU driver. This work drastically improved performance of the code and gave a few more frames in affected titles, including Naughty Dog games, God of War 3, etc. While the new blit engine DMA work is still not complete, its improvement to performance is already promising. Do note that in most affected titles there may not be much improvement in framerate if RSX is not the bottleneck.
Next, kd-11 created a PR dubbed “MGS4 fixes”, which implements 24-bit floats in depth texture decode step [D24S8 -> ARGB8], fixes some shader decompiler bugs and fixes behavior of varying registers. In the latter case, not all registers are created equally. Some registers have in-built saturate modifiers and texN registers can have their behavior altered through other registers. All tests that kd-11 wrote were confirmed on real hardware.
As the pull request title says, these changes fixes most graphical glitches found in Metal Gear Solid 4, as well as many other games. The depth issue which caused geometry to flicker in and out as well as being able to see through walls/characters has been fixed. Unfortunately, the issue causing shadows to appear completely black is still present as the fix for the issue caused too many regressions in other titles and had to be removed from August’s improvements.
Also, kd-11 made some improvements and changes, like implementing separable render target masking, fixing black textures in inFamous 2 and inFamous: Festival of Blood, some graphical issues in GTA V and a long-standing bug involving missing lifebars in JoJo’s Bizarre Adventure: All Star Battle.
Finally, kd-11 implemented GPU acceleration for texture decoding, which does benefit games that modify data a lot on the CPU. It also should help alleviate the performance impact of “Read Color Buffers” and “Read Depth Buffers” options.
With kd-11’s major contributions covered, let’s look at what Nekotekina has been up to. With a dozen pull requests merged this month, Nekotekina has been improving various core components and fixing few old regressions. We certainly can’t cover all of it here, so let’s focus on the removal of the fxm object manager in favour of g_fxo.
Before we understand what these object managers offer, let’s start at the top. A global variable is a variable with global scope, that is visible and accessible throughout the program. The set of all global variables is known as the global environment or global state. These variables greatly increase the ease of work, especially when many functions are involved. However, they are also considered dangerous as their values can be changed by any function that is called, increasing the chances of errors if misused by programmers. It also renders the overall code less modular and hence brought a need for an alternate solution. This is where objects managers come in as a replacement for global variables.
One such object manager, fxm was used to reset the global state automatically after emulation restart in a manner that prevented misuse by programmers. While it served the emulator’s functions well, it proved to be quite inefficient due to its use of reference counting pointers and the global mutex. In addition to this, it also had an overtly complex API that proved to be misleading. Nekotekina set out to find a more efficient solution to this function and designed g_fxo as a result. This new light-weight object manager is designed with a simpler API and provides an object that “just exists” without any synchronization overhead!
Once finalized, fxm was deprecated and replaced with g_fxo across all parts of the emulator that used it. While these improvements may not be readily visible in games today, it sets the stage for further improvements to the emulator’s stability. Users who wish to know more about Nekotekina’s contributions and their impact to the emulator, can read his status update on Patreon.
Screenshot function (#6334)
After adding support for the DualShock 3, microphones, guitars and various other peripherals in the past few months, GalCiv is back to add another heavily requested feature, native screenshot support. While we already have a plethora of methods to take screenshots of the games we play, they all are limited to taking screenshots at the screen resolution. With the introduction of resolution scaling in RPCS3, users have been able to increase the internal resolution up to insane resolutions such as 10240×5760 but the screenshots shared were sadly compressed down to the screen resolution which rarely exceeded 4K.
Thus there was a growing need to capture the screenshot prior to it being downscaled to the monitor’s resolution. This is where GalCiv jumped in and decided to capture the screenshot directly from the GPU’s framebuffer right before it is passed to the monitor. With a little guidance from kd-11, GalCiv was able to implement this feature in both OpenGL and Vulkan backend. Users can now press F12 to take a screenshot in-game (in the PNG format) which will be saved in the /screenshots/ directory.
Combining the new screenshot feature with the widescreen patch for Demon’s Souls makes for some amazing wallpapers!
More screenshots taken at native resolution thanks to this new feature.
RPCS3’s GUI has seen constant improvement throughout the year and this month is no exception. One major development is the new Advanced tab in the Settings menu to feature select settings that were either hidden within the Debug tab or not present in the GUI at all. This allows users to now easily modify settings such as “Vblank frequency” and “Clocks scale” from the GUI instead of manually editing game-specific custom config.yml files. With the new wave of 60FPS patches leveraging these setting options, the Advanced tab will certainly reduce efforts by the user to utilise such patches.
The next set of improvements are not aimed towards the graphical user interface (GUI), but in fact the exact opposite, the command-line interface (CLI). For a long time, users have expressed the need for a more robust CLI implementation in RPCS3. While RPCS3 did have a CLI, it was very limited in it’s capabilities and suffered from certain bugs preventing it from being truly useful. For a long time, this did not pose any issues as users were expected to use the emulator’s native GUI and only a niche group of users actually tried using the emulator through the CLI. However, as the emulator has matured over the years, there is a growing need to implement an automated suite that tests that would efficiently alert developers of any regressions caused by their changes.
But before we even think of attempting to create such a framework, the emulator should be capable of accepting commands through CLI or other non-GUI methods. To this end, Megamouse decided to improve the CLI and allow the emulator to work in a headless mode without any GUI or visuals whatsoever. However, since work on improving RPCS3’s CLI was being undertaken, the niche group of CLI users resurfaced and asked for a non-GUI mode to be added in additional to the headless mode. Both modes take the same approach but differ in their objective. The –no-gui parameter will not show RPCS3’s GUI but will allow games to launch with a game window whereas the –headless parameter will provide a mode completely devoid of visual output (no GUI or game window).
Along with this, the –hidpi parameter to launch RPCS3 with or without high DPI scaling (1 for enabled, 0 for disabled, default being 1). This does not override QT_AUTO_SCREEN_SCALE_FACTOR set in the environment, so users can now freely set their own scaling. The –version parameter was also improved to show the app version number. Click here for a full list of parameters accepted by emulator.
Thanks to Whatcookie creating a FPS patch for Demon’s Souls, it is now fully playable at 60 FPS! You can find the patch and instructions on our blog post here.
JoJo’s Bizarre Adventure: All-Star Battle
For the longest time, JoJo’s Bizarre Adventure: All-Star Battle ran with excellent performance but was not categorized as Playable due to a single graphical bug, missing lifebars during battle. After over a year, kd-11 finally managed to pin down the issue allowing this title to finally be considered Playable. All in all, It’s a good time for JoJo fans!
But can it run Crysis? Well, kinda… In August, Crysis 3 progressed ingame for the first time and marks the milestone of all titles from the Crysis series being capable of progressing ingame on RPCS3. However, this is Crysis 3 we’re talking about, so the game is currently extremely unstable on RPCS3 and suffers from serious graphical issues as well. Soon™
American Football and Rugby
This month saw 4 rugby and gridiron titles improve in compatibility. With most of the graphical issues resolved, NCAA Football 14 and Tecmo Bowl Throwback were found to finally be Playable! On the other hand, All-Pro Football 2K8 and Rugby League Live 2 went ingame for the first time. Sadly, All-Pro Football 2K8 suffering from low performance and a few graphical bugs while Rugby League Live 2 currently suffers from severe graphical issues. Nonetheless, it’s exciting to see how these exclusive titles will improve in the coming months!
Deception IV: Blood Ties & The Nightmare Princess
Another one for the weebs! The PlayStation exclusive title Deception IV: Blood Ties and it’s expansion pack Deception IV: The Nightmare Princess were tested and found to also be playable. These titles went ingame as early as 2017 but suffered from low performance preventing it from being playable. Thanks to the recent improvements to the emulator, both titles run at full speed on mid-range hardware.
Car Racing and Combat
Up next is a nice dose of car racing and combat titles. First up we have two racing titles, MotorStorm RC & Ben 10 Galactic Racing that are now fully playable on the emulator. But if weapons strapped to vehicles is more your style, Full Auto 2: Battlelines & Calling All Cars! were also found to be fully playable this month with minimal issues!
Mobile Suit Gundam: Target in Sight & Armored Core: For Answer
Looking at mecha titles, Mobile Suit Gundam: Target in Sight was found to be playable with good performance and graphics bumping the number of Playable titles in the Gundam series to 3.
Armored Core: For Answer
This title previously suffered from a physics bug where the character would endlessly fall through the ground upon progressing ingame, keeping this title in the Intro category. Thanks to the recent accuracy improvements made to the emulator, this bug has now been fixed and the game progresses ingame and has surprisingly strong performance. The game also seems to render graphics well, with the exception of the character model. A user over at our forums, makotech222, managed to finish the game on the emulator without a single crash. Further testing is necessary to determine if this title is indeed playable.
Journey: Collector’s Edition mini-games
Those who purchases the Journey: Collector’s Edition got thatgamecompany’s Flow and Flower in addition to Journey on the single Blu-ray disc. But that’s not all, the disc also included 3 never-before-seen mini-games from the studio’s 24hr Game Jams: Grave Diggers, Duke War!! and Nostril Shot. These 3 titles neither released on any other platform nor released as stand-alone games. Upon recent testing, all 3 titles were found to be fully Playable on RPCS3! While are small titles, their successful compatibility reiterates the founding goal of emulators to preserve games that would otherwise be simply lost in time.
There have been numerous other pull requests merged during the month that couldn’t make it to the Major Improvements section. We have collected a list of all such 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.
6293 – Added fallback implementation for waitable atomics that may improve performance with macOS and BSD;
6312 – Added new library loading modes: Load liblv2.sprx and manual selection and Load liblv2.sprx and strict selection;
c43a – Fixed a regression in VFS initialization;
6394 – Switched AppVeyor to use VS 2019 since VS 2017 advertised support for inline variables but had a bug preventing its use;
6421 – Fixed regressions caused by the above pull request;
6423 – Fixed regressions caused by the above pull request;
6425 – Fixed an emulator crash on Linux when the Create PPU cache option is selected in the Game list;
6444 – Fixed VFS filename escaping technique to allow control characters in filenames such as newlines. Windows does not allow the use character such as “:” while other operating systems typically do;
6450 – Fixed an issue with system time wrapping around about every 30 minutes on Windows caused by a 64-bit multiplication overflow. This was fixed by correctly using 128-bit intermediate multiplication results.
6314 – Improved image_in implementation by correcting a typo (scale_x -> scale_y) and removing convoluted temporary buffer creation to just use vector allocator instead;
6325 – Fixed minor regression caused by the above pull request;
6338 – Fixed broken support for rgb pack16 formats; Added rgba444 transport values required by After Burner Climax;
6376 – Fixed GL flushing of D24S8; Fixed FragDepth register initialization to match PlayStation 3; Improved memory usage by freeing ‘storage’ blocks if they get inherited by an actual framebuffer; Fixed OpenGL deadlock when using WCB and loading final framebuffer from CPU; Fixed stale references to invalidated surfaces in texture cache. See coverage in major improvements here;
6377 – Fixed offloader deadlock by requiring all spinlocks to invoke a wait callback in the backend;
6414 – Fixed semaphore timeout bug by adding pending flip requests as a reason to invoke the RSX local task handler and release the vblank semaphore;
6426 – Fixed surface cache hit tests by avoiding broken tests due to queue_tag being called before pitch is initialized, returning the actual memory range covered while exclude trailing padding in surface -> get_memory_range() and calculating coordinates in src with src_pitch, not required_pitch;
72fb – Fixed a regression in sys_timer_usleep;
6281 – Improved accuracy of sys_vm_invalidate by not zeroing out contents of targeted memory;
6274 – Allowed loading liblv2.sprx with “Manually load selected libraries” and “Load automatic and manual selection” library loading options;
6319 – Fixed stack memory state checking in vm::check_addr where boundaries may be “allocated” but not mapped (guard pages);
6330 – Fixed potential segfaults in the debugger when attempting to set breakpoints on non-executable memory. Also, implemented vm::page_executable which may be useful in the future;
6269 – Improved sys_ppu_thread_create implementation by removing Remove 1MB limit for stack size, treating 0 stack size argument as 4KB instead of 16KB and returning CELL_ENOMEM for 0xffff’ffff >= stack_size > 0xffff’d000 which could have overflowed in VM due to the addition of 2 guard pages and the alignment up. Fixed crashing in Akiba’s Trip 2;
6329 – Improved fs::remove_all to properly reflect the correct error code during entries removal failure;
6286 – Fixed FCTIW, FCTIWZ, FCTID and FCTIDZ instructions handling when float rounds to an integer bigger than INT32_MAX, and fixed shift count in SRD and SLD instruction’s PPU interpreter implementation by masking the shift count with 127. Also, made sys_get_current_time() scale time relatively to emulator startup instead of Epoch. See coverage in major improvements here;
6336 – Fixed regressions caused by the above pull request;
6340 – Fixed regressions caused by the above pull request that caused seizure breakdancing in Ratchet & Clank Future: Tools of Destruction;
6321 – Fixed nv0039::buffer_notify when encountering overlapping memory at all cases; Fixed overlapping transfers of nv3089::image_in and nv0039::buffer_notify when out_pitch != in_pitch || out_pitch != out_bpp * out_w and memory destination and source is overlapping; Fixed undefined behaviour in image_in when using negative scaling;
6339 – Changed the default option for Sleep Timers Accuracy to Usleep Only;
6347 – Added additional pattern to PPU analyzer imports. This fixed issues in The Bourne Conspiracy and Ratchet & Clank Future: Quest for Booty where the emulator would hang for an extended period during the PPU initialisation phase;
6346 – Improved sys_process_get_number_of_object and implemented lv2_spu_image. This fixed a crash during the loading screen of ModNation Racers;
6076 – Added new accuracy control for PUTLLUC accuracy setting with the non-TSX path;
6364 – Fixed possible out of range methods execution with RSX emulation as command destination register progresses above UINT16_MAX limit;
5883 – Fixed temporary awakening of the wrong threads using awake threads-list with FIFO protocol (because it doesn’t match with the native priority protocol of the scheduler) by making thread-lists scheduling atomic; Fixed state fragmentation of running threads queue state at the time of beginning to end of thread list wakeup;
5863 – Implemented FPCC handling on floating point operations for PPU Interpreter (precise);
6385 – Fixed mapping on vm::null (0x0) address (used in recovering from SPU access violations after emulation stop by allocating the unmapped memory, now working on any address from 0x0 to 0xffff);
6405 – Improved sys_cond_wait implementation to wait for the thread to be scheduled before relocking the mutex which matches with the kernel behaviour on the PlayStation 3.
6292 – Changed behaviour of “Open Custom Config Folder” option to also select the proper file in the explorer on Windows and in the finder on macOS in addition to opening the directory;
6322 – Updated Appveyor CI to use Qt 5.13. This allows RPCS3 to benefit from relevant internal bug fixes and improvements to High DPI scaling;
6326 – Added two additional options to change the icon colors in the Trophy Manager and Save Manager. These options can be found in the GUI tab of the Settings menu. Also, fixed wrong icon height in the Save Manager when no icon was found and few possible crashes in the Save Manager and the Trophy Manager;
6335 – Improved the number of supported keys for US and German keyboards and added an option to select the keyboard type in the System tab. Support for more layouts can be added quite easily in the future; Fixed multiple issues relating to the use of keyboard commands involving the Shift key when using the basic keyboard handler. For example, games want to be passed information as “Shift+5 was pressed” instead of “% was pressed”. Previously, there was no easy way of knowing this as Qt would skip the second key and convey only that “Shift and another key was pressed to get %“. The same logic was also added for the Alt key. This fix is currently present only on Windows;
6383 – Fixed an issue where older games that do not use the APP_VERSION parameter in their PARAM.SFO showed Unknown version in the game list. In such cases, the emulator now falls back to using the VERSION parameter;
6206 – Implemented both cellSaveDataDelete functions to allow users to delete save data from the save data list. Upon selecting an entry for deletion, a dialog will spawn asking for user confirmation. If the user accepts, the directory of that entry will be removed and another dialog will confirm the removal. If something went wrong a dialog will alert the user in the same manner. The list will be shown again in all cases. This process will repeat until the list dialog was cancelled, so the user can remove as many entries as needed; Added the initial focused entry feature to the native save dialog. The list will now keep its focus on the same index while performing actions in the list, instead of resetting the focus to the first element with every user interaction; Also, fixed an issue with save data autoloading;
6406 – Fixed a crash that occurred when the save data list overlay was loaded with focus on an element that didn’t exist;
6369 – Fixed mismatched enum string formats in sys_config;
6375 – Fixed compilation error on Gentoo by reapplying old template depth to compilers;
6432 – Fixed warnings relating to improper string concatenation in rsx_decode;
6360 – Removed the fallback font from the YoRHa theme as a workaround to a bug in Qt 5.13 where having both fonts causes stylesheets to use the fallback font even if the primary font is present, but uses the first font when there’s no fallback font.
6412 – Updated OpenSSL DLLs to 1.1.1 in Appveyor builds;
6324 – Addressed a few Qt deprecation warnings;
6302 – Fixed a bug in suspend+stop threads where threads that were suspended couldn’t be stopped which broke the Sly Trilogy launcher. Now cpu::stop flag is tested prior to testing cpu::suspend;
6355 – Fixed a bug in Vulkan suboptimal swapchain affecting X11 Linux desktop with RADV and Freesync enabled (compositing disabled);
6354 – Fixed a crash on Linux when using newer versions of KDE.
6371 – Improved vibration with the XInput pad handler through the use of std::chrono to correctly measure time between calls and preventing u8 values from overflowing and producing false positives on newVibrateData.
6366 – Changed severity of SYS_SYNC_PRIORITY_INHERIT protocol from Fatal to Warning as it was not actually implemented on the PlayStation 3.
6344 – Updated tooltip for the native UI to mention that only Latin characters are currently supported (English, French, German, Italian and Spanish languages). For more details, please read our February 2019 progress report.
6299 – Changed log level of shader cache removal as Success instead of Notice.
6256 – Expanded support to Visual Studio 2019 Build Tools v142 and improved NMake CL implementation.
4850 – Implemented support for AES-NI hardware acceleration to improve decryption performance.
We hope you liked this report and look forward to the next one! If you would like to contribute to the project, you can do so either by contributing code, helping the community or becoming a patron. RPCS3 has two full-time developers working on it who greatly benefit from the continued support of the many generous patrons. In exchange, patrons also get special support over on our Discord server and get access to early updates directly from our lead developers. If you are interested in supporting us, consider visiting our Patreon page at the link below and becoming a patron, or join our Discord server to learn about other ways of contribution.
We’re always looking for dedicated writers to help us write these reports. If you have the skill, time and are willing to help, please apply here. Also, come check out our YouTube channel and Discord to stay up-to-date with any big news.
This report was written by HerrHulaHoop, MarioSonic2987, Megamouse, GalCiv and Digitaldude555.