github ARMSX2/ARMSX3 0.9.5
ARMSX3 0.9.5

3 hours ago

ARMSX3 0.9.5

What's new:

A save data manager is now available in the app. Browse the saves you have and uninstall them without going near a file manager. You can find it in the App tab of settings.

The Info tab now tells you whether a title update is installed, as well as which version is installed.

Sonic '06 stutters and crunchy audio are fixed. SPU atomic commits were taking a barrier that stops every PPU thread dead, because the pattern that exists to avoid that barrier could never match its own whitelist, the one entry in it was 37 characters long and the hash it is compared against is 28, so nothing could ever equal it. With the cellSync ticket pattern admitted, PUTLLC went from 62,768 calls a frame to 851, and from 98.4% of them failing to 0.1%. The worst frame in a session went from 138ms to under 23ms, and no measurement window has a frame over 33ms in it any more.

Ratchet & Clank Future: A Crack in Time no longer freezes during play from my testing (tested five times in a row). Same barrier, and the same fix.

Ratchet & Clank also no longer hangs when you start a New Game (tested five times in a row). That one is a bug in the game rather than in us: it waits for the RSX to finish its command ring, but reads the position pointer once before the loop instead of inside it, so if the RSX is one command short at that instant it waits forever for a value that has already gone past. Hardware wins that race nearly every time and we were losing it about half. It ships as a bundled patch that re-reads the pointer each time round, which is what the loop was meant to do.

A full vblank event queue was stranding the VBlank thread, which stopped vblanks entirely and took the whole display pipeline with it.

RetroArch shaders no longer lock up the emulator. The RSX offloader thread checks Multithreaded RSX once, at the moment it starts, and gave up if the setting was off, but per-game settings are applied after the RSX has already started. A game whose config turns the option on therefore starts that thread while it is still off, the thread exits, and the setting then reads on for the rest of the session with nothing behind it. Everything that hands work to the offloader trusted the setting rather than the thread, so work went onto a queue nobody was draining and the RSX waited forever. Shader chains hit it because they record their own render passes and flush, the simpler upscalers hand over nothing that has to be waited on, which is why only shaders were broken. The knock-on is that Multithreaded RSX has been silently doing nothing for anyone in that configuration, it now will. (Also a note that some shaders are HEAVY, especially on an already heavy emulator where a majority of devices are GPU bound before shaders even come into play, still, it looks nice).

Out of memory crashes on Android are fixed. Vulkan data heaps are capped at 256MB, will not try to grow past what the device can actually allocate, reclaim ring memory per command buffer rather than per frame, and report a reason when a growth fails instead of killing the RSX thread outright.

Fixes to the in-app updater.

A carry and overflow bug in the PPU is fixed: MFXER and MTXER had the SO and CA bits transposed. Compiled PPU caches are rebuilt once because of it.

Per-game settings now resolve under the serial the core actually boots, so they apply to the game you set them on. Curated settings are applied at launch rather than after it, SPU XFloat settles on one migration instead of two that fought each other.

Fixes to gyro, the pad's SIXAXIS sensors were never actually being fed.

Rumble now stops while the emulator is paused instead of running on.

Mali r44p1 is kept off the attachment feedback loop path, which it does not handle.

The PPU refuses to run a partially compiled executable rather than failing in a stranger way later.

Save import handles loose save files rather than only whole folders, and a save that is still copy-protected says so at import instead of crashing when you load it. (Decrypt saves your going to import! I recommend Apollo)

Audio no longer drops blocks silently when the ring fills up.

The ARM system counter is no longer read on every guest atomic and DMA operation. Android now asks for precise timers, which no frontend had done for us, and sleep timers default to Usleep Only. SPU threads are kept off the little cluster under OS scheduling, and a thread that keeps losing a reservation line backs off instead of retrying hot. PPU threads waiting on a range lock are woken when it clears rather than spinning until they notice. The RSX no longer burns a core spinning on an empty FIFO while the whole guest is blocked.

Upstream:

This release carries a large RPCS3 merge. With commits from @kd-11 for the blit engine and surface cache work, tile boundary handling, pitch compatibility for overlapping sections, swizzle propagation, host-side writes to unlocked destination surfaces, and the texture cache refactor underneath it. To @Megamouse for Big Picture content paths, a cellVdecGetPicItem use-after-free, PS Move dialog and tracker work, patch manager search and identical-name handling, and the Qt and OpenCV updates. To @digant73 for Game Collections (#19292, #19349) and ISO timestamps, @BeezBumba for Big Picture Mode and game title fonts (#19341), @schm1dtmac for the macOS ISO verification and PPU LLVM fixes (#19103), @elad for the PPU debugger callstack fixes, @mariobob for untranslated game list categories.

@CamilleLaVey's revised SGSR filter maths are in as well: edge-direction weighting in the plain variant, and a floor on two divides so they cannot blow up.

Updates will be at a slower pace going forward, I am entering a very busy time in my life and ARMSX3 for the most part relies on me solely, I am more than open to more contributions, and I am super grateful for all the PR's I've received already! I'll try and update ARMSX3 when I have the time, (and don't worry, for ARMSX2 there is a whole team of talented developers constantly working on improvements).

Enjoy!

Don't miss a new ARMSX3 release

NewReleases is sending notifications on new releases.