Adds the import row for Lossless.dll, the multiplier, Performance shaders and Motion detail, plus the strings for all of it. Frame Generation was not reaching the emulator. Rpcs3Bridge.setSetting is a translation table keyed by (section, key) and anything absent is silently dropped, so the toggle looked like it worked and did nothing. Enums also have to cross as NAMES rather than indices -- sending "1" would have been wrong even with the entry present. Found by an unconditional probe in the present path, after being wrong about the cause twice; the probe printed mode=0 while the UI held 1, which was the whole answer. Performance shaders default ON. It selects framegen's 3.1p shader family instead of 3.1, which is materially cheaper, and on a mobile GPU the full-quality path costs more than the frames it buys. Both families are extracted from the user's DLL already, so this switches between shaders that are both sitting in the cache. Motion detail is the optical-flow resolution, stored as a percentage rather than upstream's divisor so the slider reads the right way round. Both take effect when frame generation next starts, since the shader family and the flow scale are baked into framegen's device and pipelines at initialize; the descriptions say so. The description also warns about the two things testers will otherwise report as bugs: on-screen text shimmers because the overlay and the game's own menus are interpolated along with everything else, and toggling mid-game pauses for a few seconds while a second device and the pipelines are built.
ARMSX3
Uses the latest RPCS3 upstream code (the recent ARM64 improvements included).
Building
Only arm64-v8a is supported. You need the Android SDK with NDK r27 or newer, CMake 3.30 or newer, and a JDK 17. Android Studio ships all of these.
Clone with submodules, then fetch the two third party checkouts that are not submodules:
git clone --recursive https://github.com/ARMSX2/ARMSX3.git
cd ARMSX3
git clone https://github.com/SnowflakePowered/librashader 3rdparty/librashader
git clone https://github.com/bylaws/libadrenotools android/armsx3-ui/app/src/main/cpp/libadrenotools
Build the core. This is the long part and produces an unstripped library of around 1.3 GB:
export ANDROID_HOME=$HOME/Library/Android/sdk
cmake -B build-android -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_HOME/ndk/<version>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-31 \
-DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build-android --target rpcsx-android -j8
Strip it and put it where the app expects it:
llvm-strip --strip-unneeded build-android/android/libarmsx3-core.so
cp build-android/android/libarmsx3-core.so \
android/armsx3-ui/app/src/main/jniLibs/arm64-v8a/
Then build the app:
cd android/armsx3-ui
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew :app:assembleRelease
The apk lands in app/build/outputs/apk/release/.
Note that the core library has to be rebuilt and copied again whenever anything under rpcs3/ or android/src/ changes. Gradle does not build it for you.
The Discord Social SDK is proprietary and is not redistributed here. Get it from Discord's developer portal and drop it in app/libs/ and app/src/main/cpp/discord_sdk/ if you want that feature. The build skips it otherwise.
Running it needs PS3 firmware, which is not included. License
GPL-2.0-only, the same as RPCS3. See LICENSE. Some files may be licensed differently, check the file headers.
Based on RPCS3, https://github.com/RPCS3/rpcs3