ARMSX3 1.5
The new RSX, by @kd-11
The RSX is the PS3's graphics chip, and everything you see in a game goes through RPCS3's emulation of it. kd-11 has spent about two years redesigning that emulation from the ground up, and his rewrite landed in RPCS3 this week: 88 changes and more than 13,000 lines of code. ARMSX3 1.5 runs on it.
What changed
- One giant piece became clear separate parts. Most of the RSX used to live in a single file that had collected years of unrelated code. It is now split the way the hardware works: one part reads the game's stream of graphics commands, one handles the display (frames, timing and the vblank signal games wait on), and one is the renderer that actually draws, on Vulkan or OpenGL.
- The PS3's side and the phone's side are kept apart. What the game believes about its graphics chip is now stored separately from the real renderer doing the work. Each side can be understood, and fixed, without tangling up the other.
- The chip itself is modelled more faithfully. The new core follows the RSX's own command processor, and kd-11 drew on the community's documentation of NVIDIA's hardware to take a lot of guesswork out of how it behaves.
- Games can keep more than one graphics context. The hardware state and the software state are now separate, so several contexts can exist side by side, the way they can on a real PS3.
- It is built so the renderer can be swapped while a game runs. On PC, RPCS3 uses this to switch between Vulkan and OpenGL mid-game, and to restart its renderer after a GPU driver crash. On mobile, ARMSX3 keeps renderer and driver changes on Apply & Restart, and closes the game cleanly after a GPU crash, which is the safer choice on mobile drivers.
What it means for you
- ARMSX3 is on the same graphics core as RPCS3 again. RPCS3's graphics fixes and improvements from here on are written for this design, and ARMSX3 can now take them as they arrive.
- ARMSX3's own graphics work moved over with it: frame generation, remote play, custom drivers like Turnip, Multithreaded RSX, frame pacing, and the Adreno and Mali fixes from earlier releases.
Savestates start fresh
The new core stores the graphics chip's state differently, so savestates made in 1.4.x won't load in 1.5. Make a normal in-game save before you update. Picking an old state shows a message, and the game keeps running if done while in game instead of hanging trying to load the old incompatible save.
Games
-
Bundled game fixes now turn on for everyone, stuff like the Ratchet & Clank freeze fixes patches, Burnout Paradise, J-Stars, Splatterhouse, Skylanders: Spyro's Adventure, and so on, without needing to download the patch database first.
-
WET now boots and plays.
OpenGL
- OpenGL renderer. ARMSX3 now has a second rendering option. Before ARMSX3 1.5 OpenGL was a dead setting waiting to be implemented, well now OpenGL runs on your device's own driver, or on ANGLE (OpenGL Driver setting), which draws through Vulkan and can avoid bugs in some Mali and other non-Adreno GPU drivers. It's slower than Vulkan and should be treated as a fallback option, similar to every other emulator (Vulkan + custom drivers is still the recommended option for ARMSX3).
App
- Logs now note how the last session ended (closed, crashed, or stopped by Android to free memory).
