Releases: ouroboros420/rpcsx
v2026.06.22-0836
RPCSX-Clanker core — v2026.06.22-0836
The PlayStation 3 emulation core (librpcsx-android.so, arm64), synced to RPCS3
0.0.41 content and extensively adapted for ARM64 / Adreno / Turnip. Ships
separately from the app and is loaded at runtime.
New & notable
- Synced to RPCS3 0.0.41. CPU/SPU recompilers, the lv2 kernel, Cell HLE,
loader, crypto and util are now at 0.0.41 content (ARM64-adapted, and ahead of
upstream in several ARM areas). - New shader decompiler. The fragment-program decompiler was re-vendored to
the upstream 0.0.41 Assembler engine (SPIR-V 1.5) — the one default-render-path
subsystem that had been a generation behind. - Texture pop-in eliminated. The texture-cache core was re-vendored to 0.0.41
with per-surface resolution scaling. - Cast shadows fixed on Adreno/Turnip via depth-only alpha-test discard
suppression and correct float-depth sampling. - RPCN netplay re-vendored to protocol 30 (protobuf), with client-side
password derivation and a JNI bridge for the app's account/server UI. - Credentials secured. RPCN secrets are no longer written to external storage;
the plaintext password is never stored, logged, or transmitted.
Graphics / RSX / shaders
- New fragment-program Assembler decompiler with the producer side fully wired:
TEXTURE_FORMAT_CONVERT raised so texel conversion emits (fixed disappearing
geometry, enabled foliage), DISABLE_EARLY_Z for cyclic-zeta draws, fragment
outputs gated by mrt_buffers_count, fp16 extension when supported, fragment
constants on the upstream _fetch_constant model. - Hardware texel remapping (format_ex): correct SNORM/sRGB/BX2 normal-map and
non-INT8 conversion; raw texture alpha preserved through conversion. - Vulkan correctness ports: WAW barrier after the present clear, per-source
image-layout dedup in the copy path, sub-4-byte and wide-block GPU deswizzle,
DXT45 unaligned-source guard (ARM), occlusion-query handling. - Host memory coherency: mm_flush(ranges) wired into the nv0039 DMA / nv3089
blit paths. - Mobile-tiler frame-time jitter tuning (predictor confidence + ZCULL cadence)
with per-interval frame-time + readback-source instrumentation in the perf log.
CPU / recompilers
- SPU FRSQEST exponent computed via arithmetic instead of a LUT (upstream
#18905) — bit-identical, drops a per-module 1kB table. - PPU: fixed null dispatch for adde./subfe. Rc-variants (latent crash); IR
optimization passes run on ARM. - vm: skip read-only reservation range-locks when taking a writer lock.
- ARM busy_wait scaled to the device's hardware timer.
lv2 / HLE / loader
- sys_fs: CELL_ENOTDIR propagation; open_raw error-code fidelity.
- sys_ppu_thread_detach zombie-join returns CELL_OK; sys_spu_image_open_by_fd
implemented; SPU events notified after releasing group mutexes; COOPERATE
guard restored on group suspend/resume. - mmapper lazy shared-memory allocation (savestate format v2).
- Networking socket fixes; sceNp DRM time conversion; cellPad validation;
cellSaveData delete-path bounds check.
Savestate
- PPU scalar registers serialized unconditionally — the core fidelity fix
(closes a version-gate desync). - ZSTD-compression finalize missed-wakeup fixed.
- Reload crashes fixed: re-Init firmware VFS so mounts survive; track/destroy all
Android WSI surfaces (NATIVE_WINDOW_IN_USE); SEV-wake WFE-parked threads.
Networking / RPCN
- Emu/NP re-vendored to protocol 30 (FlatBuffers → Protobuf + abseil, wired into
the Android arm64 cross-compile); clans SDK symbols ported. - RPCN JNI bridge (config / hosts / account / enable); client-side PBKDF2-HMAC-
SHA3-256 password derivation. - rpcn.yml moved to app-internal storage, excluded from backup, with one-time
migration; other players' NPIDs/names redacted from netplay logs.
In-game overlays
- Home and quick menus re-vendored from upstream with SDF text rendering wired
into the Vulkan backend; new Clanker Features live-toggle tab. - Quick-menu toggle crash fixed (display_manager locked around button presses).
Power / thermal / memory
- Battery-saver core override (default ON; meaningful idle-CPU drop, no fps cost
on the test device). Big-cluster affinity, low-power WFE, thermal cap and ADPF
hints are default OFF and experimental. - Device-scaled PPU compile memory budget fixes first-launch OOM on
memory-constrained devices.
Known issues
- Frame-time jitter with Write Color Buffers (e.g. Demon's Souls): holds 30fps
but uneven pacing — inherent to synchronous color-buffer readback on a mobile
tile GPU. - Smooth-shaders (async interpreter) forced OFF (freezes); synchronous path used.
- No persistent SPU object cache (short warm-up each launch).
- Some titles still crash/stall (e.g. God of War 3 / SPURS class).
- Savestates may not be compatible across versions.
Built against LLVM 19.1.7 to match upstream. The emulator is the work of the
RPCS3 and RPCSX teams; this fork only ports it to Android. Support them:
https://rpcs3.net/ and https://github.com/RPCSX/rpcsx . Piracy is not permitted.
v2026.06.10-2252
v2026.06.10-2252 (f8d5550)
The JIT backend switch. After auditing every emulator subsystem against
upstream RPCS3 and fixing everything found, one divergence remained: we were
the only ARM64 RPCS3 variant running LLVM 20 as the recompiler backend -
upstream validates all PPU/SPU code generation against LLVM 19.1.7, and aps3e
(which boots some games we don't) builds exactly 19.1.7 on Android. This
release moves our recompilers onto that same validated backend.
IMPORTANT: one-time recompile (again)
First boot of each game rebuilds its compiled code under the new backend (the
long "Compiling PPU modules" screen). Do not close the app during it. Without
this, games would keep running code produced by the old backend.
Changed
- PPU/SPU JIT backend: LLVM 20.1.3 -> 19.1.7 (matching upstream RPCS3 and aps3e).
- Per-game configs now store only the settings you actually change; everything
else follows your global settings automatically. Recreate older custom
configs to get this behavior. - Game covers show the installed game version (APP_VER) with the new app.
Fixed
- Enabling "Asynchronous Texture Streaming 2" made games unbootable on Adreno
GPUs (the async scheduler was used despite being disabled by the driver
capability check). It now correctly falls back, matching upstream. - Kernel SPU-wakeup fixes (lost-event class) ported from upstream.
- ISO reader: truncated/corrupt ISOs no longer silently hand games zero-filled
data; large directories no longer parse garbage entries or hang.
Diagnostics
- SPU stall watchdog: a freeze with audio still running now logs which address
the SPU engine starved on and whether its content changed. Please attach
RPCSX.log for any freeze, even without a crash.
v2026.06.10-1034
v2026.06.10-1034 (a87d74c)
The result of a full audit of every subsystem against upstream RPCS3. Nine fixes over v2026.06.09-1528, all verified line-by-line against upstream-shipped corrections.
IMPORTANT: one-time recompile on first boot
The first boot of each game shows a long "Compiling PPU modules" screen (up to 20-30 minutes for large games). Do not close the app during it - this is a one-time cost per game, required so that all code-generation fixes actually take effect. Investigation showed that compiled-code caches from older versions were silently reused across updates, which means several previous fixes never actually ran on updated installs. This release fixes that permanently.
Fixed
- Compiled-code caches are now versioned. Old cached PPU code (which still contained known miscompiles) is no longer reused after updates.
- Texture cache corruption during texture-heavy loads. A broken container operation corrupted the texture cache's invalidation bookkeeping on every blit burst (typical at game mode/level entry). Likely related to silent crashes at level entry - please report results.
- GPU scratch buffer races. Missing Vulkan memory barriers let GPU operations race on a shared buffer, which could silently corrupt emulated memory during certain texture readbacks.
- Thread-safety fixes: a data race on the Vulkan descriptor tracking list; two render-target lifetime issues.
- Kernel synchronization fixes (lost-wakeup class): a waiter-counter leak and two state-handling bugs in lwcond/mutex/rwlock, relevant to games that freeze after minutes of play.
- Module loader fixes: a transcription bug that could overwrite loaded modules' export tables in guest memory; an allocation-sizing bug on the relocatable-ELF path; an out-of-bounds read in RSX offset translation.
Diagnostics
- The crash logger now captures SIGABRT and SIGBUS. Crashes that previously ended the log silently will now record the aborting thread and a native backtrace - if a game still dies with no error dialog, the log will finally show why. Please attach RPCSX.log for any crash.
Known issues (honest status)
- Uncharted: Drake's Fortune still crashes deterministically; the cause is not code generation (it reproduces on the interpreter) and is still being investigated.
- White Knight Chronicles II may still hit the RSX crash after extended play; this build contains a candidate fix - reports welcome.
Install
Let the in-app updater pick it or grab librpcsx-android-arm64-v8a-armv8.2-a.so (modern devices) or librpcsx-android-arm64-v8a-armv8-a.so (older devices) and install manually.
v2026.06.09-1528
v2026.06.09-1528 (9422395)
Two recompiler correctness fixes over v2026.06.09-1104.
Fixed
- SPU store elimination: restored a memory-barrier guard present in upstream RPCS3 that our recompiler snapshot had dropped. Without it, a register store occurring before a GPR memory barrier could be wrongly eliminated.
- PPU branch folding: disabled a branch-folding optimization that upstream RPCS3 also disabled because it miscompiles calls (upstream issue #18287).
v2026.06.09-1104
Highlights
- Fixes startup crashes in video/FMV games (Dead or Alive 5 Ultimate, White Knight Chronicles II, and others).
- Fixes an SPU code-generation bug that corrupted SPU state in SPU-heavy games.
- Full firmware-module parity with upstream RPCS3 after a complete audit.
Fixed
- Video decoder crash (
cellVdecQueryAttr). Games that query a video decoder no longer crash on startup. The AVC/H.264, MVC, MPEG, VC1 and DivX decoder firmware modules were missing and have been restored. Affects Dead or Alive 5 Ultimate, White Knight Chronicles II, and any title with cutscenes/FMV. - SPU register corruption. A faulty ARM code-generation path (
tbl2/tbx2) could silently miscompile the SPU's most common shuffle operation and corrupt SPU state, crashing SPU/SPURS-heavy games. The recompiler now uses a safe lowering (the same approach used by the reference Android build). This should fix inFamous and is expected to help Uncharted and similar titles — please report results. - Restored missing firmware modules for full upstream parity:
libsvc1d(VC1 video),sceNpBasicLimited, andcellSpursInitializeForSpuSharing— closing "unresolved import" gaps.
Internal
- Completed a full audit: every emulator-to-firmware call is now backed by a registered function, and the lv2 syscall table matches upstream.
- Builds on the 2026.06.08 fixes (shutdown-hang fix, FMV-freeze demuxer rework, decoder/audio re-vendor, PPU reservation priority).
Install
Grab librpcsx-android-arm64-v8a-armv8.2-a.so and let the in-app updater pick it, or replace the core library manually.
v2026.06.08-1005
RPCSX-android core build. Update via the in-app core updater, or download the
.so for your device and install it manually.
Highlights
-
Shutdown hang fixed. Closing a game — or force-closing after a freeze —
no longer leaves the app stuck. The internal "Emulation Join Thread" was
deadlocking by joining itself; deferred shutdown work now runs on the
main-thread dispatcher instead of inline on the worker thread. -
Frozen intro movies (FMVs) fixed in some games. The PAMF demuxer was
re-vendored to the upstream SPU-accurate implementation, which carries the
fix for demux events firing before the game has finished initializing FMV
playback. The upstream fix is named for White Knight Chronicles II; the
same movie stall also affected Disgaea 3 and Disgaea D2 intros.
Media stack
- Full demux -> decode subsystem brought up to current upstream:
cellDmuxPamf (now SPU-accurate, HLE by default), cellDmux, cellPamf,
cellVdec, cellAdec, cellAtracXdec, plus the new codec stub headers.
Other changes since v2026.06.07-1950
- PPU reservation priority over SPUs (reduces livelock-style stalls).
- cellAudio _mxr000 surmixer event-queue fixes.
- Core now reports each patch's game titles, enabling patch search by game
name in the app's Patch Manager. - Earlier module updates: cellVideoOut, cellMsgDialog / cellOskDialog /
cellUserInfo / cellAudioOut, cellRec, sceNp*.
Variants
- librpcsx-android-arm64-v8a-armv8-a.so — baseline; runs on every arm64 device.
- librpcsx-android-arm64-v8a-armv8.2-a.so — optimized (dotprod / LSE);
auto-selected by the app on capable devices.
Note for testers
The new demuxer is SPU-accurate — more correct (the reason the FMVs unfreeze),
but slightly heavier during movie playback. Please confirm whether
WKC2 / Disgaea 3 / Disgaea D2 now play through their intros, and watch movie
performance.
Credits: FMV fix by capriots (RPCS3 72b872df6); PPU reservation priority and
cellAudio _mxr000 fixes by Elad (RPCS3). Ported to ARM64/Android.
v2026.06.07-1950
RPCSX Android - core v2026.06.07-1950
SPU recompiler performance (AArch64), ported from upstream RPCS3:
- ROTQBY-family byte shuffles now use the native TBL instruction instead of
emulated pshufb. (upstream 2d1be0918, Nekotekina) - GBH/GBB gather-bits use ARMv8.6 I8MM (smmla/ummla) on capable chips and
ARMv8.2 dot-product (sdot/udot) otherwise, collapsing the bit-gather into
1-2 NEON ops; scalar fallback on older devices.
(upstream 3164d4495 + d25972e19, Whatcookie) - FSM/FSMH/FSMB/FSMBI use an idiomatic ~2-instruction NEON lowering instead of
a sequence LLVM codegens poorly. (upstream 2f2ac69d6, Whatcookie)
Stability / crashes:
- Fixed a crash when the app loses its surface (backgrounded, closed, or during
shutdown) while no pad thread is active. - Fixed Android emulation-stop sequencing: qt_events_aware_op - the core's
synchronous "wait until stopped" primitive used throughout Emu stop/kill -
was an empty no-op on Android, so stops returned while teardown was still in
flight. It now waits correctly (bounded). Strong candidate fix for the
multi-minute hang some games hit when stopping; please confirm on device. - cellMusicDecode: guard against an out-of-bounds read in the LPCM decode path.
(upstream 883a6889e, Megamouse) - Reduced "Failed to lock sudo memory" log spam (183 errors -> 1 warning;
benign on Android, where the memlock limit can't cover all guest memory).
PS3 firmware modules - 94 modules re-vendored to upstream RPCS3 HEAD, bringing
accumulated correctness fixes, including:
- cellSaveData (save ordering/comparator fixes), cellFs, cellGame
(cellHddGameCheck dataVersion, folder creation), cellSysutil (date/time
format), cellFont + FreeType, ATRAC audio codecs, GIF/JPEG/PNG image codecs,
SPURS job-queue helpers, NP utilities, sys_* HLE wrappers, and more.
For testers: these are SPU-codegen + firmware changes - please report any
audio/SPU glitches or per-game regressions with a full log.
v2026.06.07-1036
RPCSX Android v2026.06.07-1036
Fixes
- Reworked the SPU reservation-notification system (rtime-keyed, no lost wakeups) — targets the Uncharted 2 freeze and SPU sync stalls. Please test heavily.
- Per-game / community config now saves correctly (was failing to create custom_configs/ — "config rejected" is fixed).
Builds
- armv8-a (all devices) and armv8.2-a (modern devices); the app auto-picks the right one.
- First boot after updating recompiles once.
v2026.06.06-1532
RPCSX Android core v2026.06.06-1532
Fixes (since v2026.06.06-1015)
- Fixed the SPURS hang/black-screen (e.g. Uncharted 2 after the warning logo) and SPU-driven graphical glitches — an SPU channel state-bit collision (upstream 7d0df300e).
- Performance: the JIT now targets your real CPU instead of a fixed low-end core, and correctly picks the big/prime core (e.g. Cortex-A720) on big.LITTLE devices. The resolved CPU is shown in Device Info.
- Reservation/PUTLLC writeback correctness, kernel fixes (PPU thread stack size, file read fast-path, sys_cond/sys_mmapper/sys_event), and lock-free atomic hardening.
Builds
- Two variants: armv8-a (all devices) and armv8.2-a (modern devices — faster atomics). The app auto-downloads the right one.
- First launch after updating recompiles shaders/PPU once, then caches.
v2026.06.06-1436
RPCSX Android core v2026.06.06-1436
Fixes
- Fixed the SPURS freeze that hung games at a black screen (e.g. Uncharted 2 after the warning logo). Our SPU channel code aliased two state bits onto the same flag, corrupting multi-SPU mailbox sync so the SPURS kernel jumped to a null address. Ported from upstream RPCS3 (7d0df300e, by Elad). This can also clear up SPU-driven graphical glitches, since corrupted SPU results affect geometry.
- Major performance fix: the emulator now targets your actual CPU. It was hard-coded to optimize for "cortex-a34" (a tiny low-end core) on every device. It now detects the real chip (e.g. Cortex-A76/A720) and tunes generated code for it. Expect higher FPS, especially on modern phones. Your first boot will recompile once as the cache rebuilds for your CPU.
- Extra correctness double-check on SPU reservation writeback (PUTLLC).
- Kernel fixes: PPU thread stack size, file read fast-path, sys_cond / sys_mmapper / sys_event.
- Lock-free queue / atomic pointer concurrency hardening (ASLR/fat_ptr).
Notes
- Requires the matching app build (v2026.06.06-1436).
- First launch after updating recompiles shaders/PPU once, then caches.