ARMSX3 0.7
- What's new from me :
Armored Core: For Answer is now playable. The mech was spawning under the floor in the tutorial, which turned out to be an ARM64 bug in the PPU recompiler affecting every game, not just this one. This is bug was an upstream RPCS3 bug, and it affects all ARM64 builds. Fixed on ARMSX3! (You will have to recompile modules due to ARM64 code gen changes, sorry).
Fixed a second bug while I was working through the Armored Core issue. The PPU cache key is the executable's SHA-1 plus a settings bitset, with nothing identifying the emulator build, so the first attempt at the fix silently reused code compiled by the previous version and appeared to do nothing. That means every previous PPU codegen fix was a no-op for anyone with an existing cache, and only worked on fresh installs. PPU caches now carry a build identity and invalidate properly.
ARM64 SPU block checksum collisions. The checksum folded two thirds of every block through absolute difference, which is not injective, so adding the same value to two words left it unchanged and similar SPU job binaries hashed alike. Now plain summation. This is what "Precise SPU Verification" was working around, and that workaround can go back off for the frames it costs.
SPU blocks are no longer permanently poisoned when a trampoline rebuild fails.
Fixed two shipped Vulkan specification violations, and a read/write hazard on the render pass path.
Performance:
Render pass churn cut in heavy scenes: roughly 113 to 85 passes per frame, 62.8 ms to 51.2 ms in the Batman: Arkham City used as my test case. On a tile based GPU every pass boundary is a full tile store and reload.
RSX FIFO idle no longer burns a core on sched_yield, worth about 11% of total CPU.
Logcat no longer allocates and makes an IPC call per log line.
ADPF (Android performance hints) is now actually implemented. The setting existed but did nothing, so a 30fps locked game looked permanently late to the scheduler and clocks were boosted for no extra frames.
New Features:
Added the Oboe audio backend.
Added Patch import.
Added the toggle to "Silence All Logs". If logs are off we cannot help with a bug report, but it is worth real frames in log-heavy titles.
"Precise SPU Verification" is now a normal setting instead of only reachable by hand editing the config.
- Ported from ouroboros420/rpcsx (better known as RPCSX Clanker).
Work by @ouroboros420 brought into ARMSX3.
GPU Turbo.
Power and thermal handling, including using the ARM WFE instruction to idle threads instead of spinning, which draws less power and leaves more headroom before the device throttles.
Android crash and freeze robustness: JIT illegal instruction handling, file and thread fixes, EINTR handling.
Savestate and WSI surface lifetime.
Honest RAM VRAM budgeting.
Persistent SPU object cache design, re-keyed against our config surface.
Occlusion query and RSX fixes.
Android frame pacing, and tuning for tile based mobile GPUs.
- Ported from rfandango/rpcsx
Work by @rfandango, brought into ARMSX3.
ZCULL deadlock fix on Turnip, so occlusion queries no longer hang on Adreno with the Mesa driver.
ARM64 SPU checksum handling.