Commit Graph
46 Commits
Author SHA1 Message Date
jpolo1224 97d8c34fc5 Android 2.6.3: OSD reliability, hide games, custom RA sound, green Play button, Mali Vulkan speedup, ANGLE G77 fixes
- OSD: reload-immune visibility snapshot (fixes won't-turn-off); on/off hotkey now keeps the user's chosen stats
- Library: hide/unhide games; optional titles under shelf covers; Clear cached data in the App tab; refreshed drawer icons
- Per-game settings: fix scope stickiness after closing a game + open correctly from the shelf layout; green Play button that actually launches
- RetroAchievements: custom achievement-unlock sound picker
- Vulkan: re-enable attachment_feedback_loop_layout on Mali so accurate blending runs in-tile instead of the per-primitive barrier fallback (big speedup)
- ANGLE (GLES 3.1): emit GL_EXT_shader_io_blocks for interface blocks + alias glColorMaski to OES/EXT — fixes Mali-G77 black screen and mid-render crash
- In-game menu: Performance tab is now a yellow lightning icon
2026-07-14 23:17:40 -04:00
jpolo1224 add32e764c Android: fix ANGLE boot crash (null glDrawElementsBaseVertex on GLES 3.1 → alias to OES/EXT) + Jak 3 GameDB fixes (all regions) 2026-07-14 12:35:02 -04:00
jpolo1224 e833ef88c3 Android: re-add Setup / Change Folders to the library overflow menu (re-opens the setup wizard to change storage/disc folders) 2026-07-14 10:49:34 -04:00
jpolo1224 c305a647eb Android 2.6.1: fix controller remap regression, Black/OLED themes, Boot BIOS, menu scroll memory, RA file-type badge, sub-native resolution fix, achievement-sound reliability, GameDB (Tekken 4/5/Tag, Ar Tonelico 1&2, Aeon Flux, Musashi) 2026-07-14 10:40:16 -04:00
jpolo1224 9e0dc436f7 Android 2.6.0: ANGLE toggle, gyroscope, cheats/disc-swap, GameDB + fixes
- OpenGL-via-ANGLE renderer toggle for broken native GLES drivers, with a
  driver-keyed GL shader cache so switching drivers recompiles instead of
  feeding foreign program binaries to glProgramBinary (fixes Mali-G77 crash)
- Gyroscope input (aim/steering modes, sensitivity, smoothing, invert) shared
  between the Pad settings tab and the in-game Controls tab
- Re-add disc swap without closing the game, and per-cheat PNACH enable
- Xclipse GPU profile + Mali-G615 freeze gate; MediaTek Tekken 5 override
- GameDB: KH2, Tekken 5, Rumble Racing, MK Shaolin, Avatar
- Folder-reuse settings recovery (reverse-map INI + config mirror)
- In-game pause menu rail icons; make new settings searchable
- Resume/auto-load: wait for the renderer to present before restoring state
  and force a present after load (reduces black screen on resume)
- Boot crash guards (pad state before VM); FXAA + CAS sharpening
2026-07-14 02:34:14 -04:00
jpolo1224 917bc67865 CI: nightly rotation-signs + Discord changelog + timestamp versionCode
- ci-nightly-dualcore.sh signs nightlies with the release rotation lineage
  (debug<=API32 -> release>=API33) from repo secrets, so a nightly installs over
  the existing com.armsx2 build; falls back to a throwaway key (with a warning)
- versionCode = Unix seconds since 2023-11, monotonic and always above the manual
  10xx codes, so each nightly out-versions the last installed build
- versionName default 2.5.9 -> 2.6.0
- Discord announcement now includes the changelog (trimmed to Discord's limit)
2026-07-13 02:25:58 -04:00
jpolo1224 e2889838ab CI: dual-core (4k + 16k) + PGO nightly, push trigger, plain changelog
- tools/ci-nightly-dualcore.sh builds the core at both host page sizes and
  merges both .so into one APK so 16k-page devices load their native core
- nightly builds with PGO=optimize (committed pgo/armsx2.profdata)
- trigger the nightly on push to master (was schedule + dispatch only)
- plain-language changelog in the release body from filtered commit subjects
2026-07-13 00:42:11 -04:00
jpolo1224 6cfd8ee00b Android: settings scope toggle + search, BIOS scroll fix, UI polish
- Global/per-game settings scope toggle at the top of the settings rail,
  plus an All Settings shortcut at the bottom
- Settings search overlay + index
- BIOS manager: scrollable list so controller navigation reaches every entry
- Close-app entry with a confirm dialog
- i18n updates
2026-07-13 00:42:11 -04:00
jpolo1224 cfd50df201 GS: Mali/EmuCoreX renderer fixes + per-vendor mobile GPU profiles
- Mali Vulkan: drop the old blend-clamp band-aid; rely on dual_source_blend
  feature detection so only SRC1/blend-mix draws take the SW-blend path
  (no more forced Blending=Max on Mali)
- Fix intermittent stale-tile reads: input-attachment descriptor type for the
  texture-barrier feedback path, vendor-scoped to Mali
- broken_mad_deinterlace weave fallback for Mali-G57 FastMAD
- Add per-vendor mobile GPU profile system (Mali/Adreno/PowerVR)
- Tie test_and_sample_depth to texture_barrier (was forced on)
- Richer Vulkan device telemetry for field diagnosis
2026-07-13 00:42:11 -04:00
jpolo1224 a5d604e8b3 Android: feedback batch 1 — cheats settings tab, HostFS toggle, RA rich presence, in-game macros, in-game upscale list, Force-32 dithering, FXAA + CAS sharpening, freedreno driver source 2026-07-12 13:06:00 -04:00
jpolo1224 4a52347407 Android: library background = static XMB still, drop the MP4 (perf)
The looping MP4 wallpaper hurt in-library performance (sbro review). Replace it with a bundled static XMB-wave still (R.drawable.library_bg_xmb, drawn edge-to-edge via ArmsBackdrop's backgroundLayer). Remove VideoBackground.kt, res/raw/xmb_wave.mp4, and the video option from the background picker.
2026-07-12 08:34:35 -04:00
jpolo1224 98c90a2124 Android 2.5.8: OSD off-by-default + rumble + MP4 wallpaper + controller keyboard/nav
OSD now hides via RenderOverlays mirror of EmuConfig.GS->GSConfig + seed-false on first launch. Rumble: forward SetPadVibrationIntensity to Native::onPadRumble on Android (mono core had no call site). Library: bundled PS3 XMB-wave MP4 as default background, drawn edge-to-edge via ArmsBackdrop backgroundLayer (fixes landscape strip). In-app on-screen keyboard for library search; Recently Played shelf selection highlight; settings category tabs reachable via Row+horizontalScroll. Persian (fa) translation; gold RetroAchievements trophy.
2026-07-11 18:08:27 -04:00
jpolo1224 d12462c43f Android UI: match bottom library toolbar width to the top
The pinned bottom toolbar rendered edge-to-edge (full width) while the top one is
inset by the grid's 8dp + cutout content padding, so it read wider. Apply the same
side inset to the bottom bar's Box so both placements are identical width (vivi).
2026-07-11 11:30:39 -04:00
jpolo1224 6c1a138256 Android UI: toolbar top/bottom toggle (unified shape) + robust shelf recents nav
- Add a Library-toolbar position setting (App tab, Top/Bottom). Both placements
  render the SAME ArmsTopBar rounded-pill (bottomEdge just swaps the status-bar
  inset for the navigation-bar inset), so top and bottom look identical — the old
  bottom bar's top-only-rounded shape was the mismatch vivi flagged.
- At the bottom, the controller reaches the toolbar by pressing Down off the grid's
  last row; the grid reserves the matching top/bottom content inset per position.
- Fix Recently Played being skipped in shelf view for real: replace the
  selectedIndex<columns 'top row' guess (fragile when the per-row count is off) with
  a move-then-check — attempt moveSelection, and if the selection didn't move we're
  on the edge row, so step into the chrome zone. Works regardless of shelf/grid
  column count in either direction (up->chrome, down->bottom toolbar).
2026-07-11 11:24:35 -04:00
jpolo1224 ce46558113 Android UI: library camera-follow, search + language nav, revert bottom toolbar
- Revert the library toolbar back to the top (bottom bar looked worse).
- Camera-follow: the grid only scrolled to the selection while searching, so
  normal controller browsing never followed the selector. Now it follows always,
  targeting the selected cover's real lazy-grid index (accounts for the leading
  toolbar/search/recents/header items and shelf rows) and only scrolls when the
  cover is off-screen. This also lets the selector visibly climb to the top row
  and into the Recently Played shelf in shelf view.
- Make the search field a controller Search zone (Toolbar -> Search -> Recents ->
  Grid): highlights when focused, A focuses it and opens the keyboard.
- Language screen: LazyColumn -> scrolling Column so every language row composes
  and registers in the nav registry — controller nav no longer sticks on the last
  on-screen language (Italian) and scrolls to follow the selection.
2026-07-11 11:09:02 -04:00
jpolo1224 97e83393b4 Android UI: in-game Fixes pane, bottom toolbar, bluer theme
- Add a Fixes tab to the in-game pause overlay rendering the full FixesTab,
  live-applying via InGameOverlay's shared Settings; its controls are
  SettingsControllerNav items so the overlay's content-pane nav drives them.
- Move the library view toolbar (menu/refresh/sort/layout/2D-3D/background) to a
  pinned bottom bar (vivi's mockup). Controller reaches it by pressing Down off
  the grid's last row; grid reserves bottom padding + owns the status-bar inset.
- Shift the night palette toward the OG ARMSX2 blue (deep navy backdrop/surfaces).
2026-07-11 10:54:09 -04:00
jpolo1224 e6a6477fee Android UI: boot video + toggle, shelf/nav controller reach, uk/ku translations
- BootSplashActivity plays the refresh intro video (res/raw/boot_intro.mp4)
  once per process with tap/back/timeout/error fallthrough; new App-settings
  toggle (ui.bootLogo, default on) skips it straight to Main when off.
- Shelf view: report per-shelf column count so D-pad up/down move between
  rows and the top row can reach the Recently Played zone (was left/right only).
- Controller-nav skip fixes: Language row, split GPU-driver source groups,
  UI-size + in-game framerate sliders now register/adjust.
- Add Ukrainian + Kurdish languages; re-translate Russian for accuracy.
- Drop a duplicate EN i18n key (games.toolbar.background).
2026-07-11 10:31:30 -04:00
jpolo1224 01e4f07fbf Library recents zone (Up from grid -> Recently Played -> toolbar, highlight + launch); settings snap-to-top when a category chip regains focus 2026-07-11 09:54:44 -04:00
jpolo1224 bb69b97965 Pause menu two-zone nav (Up/Down tabs, Right into registry-driven content); shelf-view selection highlight; restore GPU driver source groups 2026-07-11 09:46:21 -04:00
jpolo1224 86ce34caad Controller nav rebuilt on manual registry model (settings/save-load/managers/RA/drawer/memcard + library toolbar zone); shelf left-edge alignment 2026-07-11 09:21:50 -04:00
jpolo1224 cdf2a4cf10 Recovery fixes: pre-resolve DriverManagerSection strings, restore shelf_frosted + savetowerforeground, use prebuilt native .so 2026-07-11 08:42:34 -04:00
jpolo1224 d01b94d055 Recover mono ui-overhaul (PR#3 base + session UI edits) + prebuilt native .so from vc1063 2026-07-11 08:35:55 -04:00
jpolo1224 cc6fade4f8 Merge branch 'pr3-ui' 2026-07-11 08:32:45 -04:00
jpolo1224 ed3cd1eed8 Android: re-apply mobile GS (VK push-descriptor fallback + GLES) onto canonical, guarded
Re-apply the Android-specific GS deltas on top of the canonical GS as guarded hunks so
PC/mac/Linux/Windows stay byte-for-canonical:

- VK: restore the push-descriptor fallback (Adreno/Mali stall inside
  vkCmdPushDescriptorSetKHR -> textures never bind -> black screen) as a capability-gated
  path; desktop keeps push descriptors unchanged. Mobile vendor gates
  (Mali/Adreno/PowerVR/Xclipse), dyn_shaderc, FIFO_RELAXED present mode, PowerVR swapchain
  width-align. depth_feedback forced off only under #if __ANDROID__ (desktop keeps
  feedback_loops()).
- OGL: re-apply GLES support (EGL context, is_gles shader branches, GLES query objects),
  runtime-gated by is_gles; guard 3 desktop-reachable riders (present-path
  glInvalidateFramebuffer -> is_gles, EGL SetDisplay body -> #if __ANDROID__, restore the
  negative-swap-interval probe).
- RA toast: guard the AddRect call on IMGUI_VERSION_NUM (desktop imgui 1.92.8 swapped the
  thickness/flags args; Android vendors 1.92.6) so the toast border renders on both.
- Suppress the 'Graphics API is not set to Automatic' OSD warning on Android
  (#if !__ANDROID__); desktop keeps the canonical warning.
- REFACTOR_STATUS: mark the GS re-apply resolved; note the imgui two-copies version skew.
2026-07-10 16:52:26 -04:00
jpolo1224 662c2c42ad docs: record EE fork drop + Android ryml shim in REFACTOR_STATUS 2026-07-10 14:14:32 -04:00
jpolo1224 a6aa75bff2 Android: unify EE JIT on canonical (drop mac-port fork) + fix vendored ryml build
Drop the aR5900*.android.cpp EE fork; Android now builds the canonical Phase-7 aR5900* like every other arm64 target. Device A/B (canonical EE+VU + force-float, PGO tuned for the mac-port so rigged against canonical) showed canonical EE at refresh parity on Android: GoW2 combat EE ~12.8ms, 100% speed / 60fps. The real Android perf lever is the force-float in VMManager::SetEmuThreadAffinities, not the backend. Restores the single shared-core goal.

Back-port the set_user_data() setter onto the Android-vendored rapidyaml 0.10.0 so common/YAML.cpp (from the pcsx2master merge) compiles; the PC/mac build resolves a newer system ryml via find_package. Minimal shim pending the 3rdparty rapidyaml de-duplication (REFACTOR_STATUS #4).
2026-07-10 14:12:43 -04:00
jpolo1224 ecfebfd6b2 Android: bring unified core to refresh-experimental parity
Vulkan render fixes (GS device backends), Oboe audio backend, GameDB armsx2_overrides.yaml override loader, EE+VU mac-port recompiler graft, PGO=optimize, and the VU-slam fix: an Android-only force-float in VMManager::SetEmuThreadAffinities (the slam was thread pinning locking the VU1 worker off the prime core, not the VU codegen). Also: CPU-name SoC-property fallback, Mali VK attachment-feedback-loop crash gate, MediaTek fbfetch disable, and on-device thread-placement diagnostic helpers.

The recompiler grafts and GS deltas are unguarded and land in the shared core (they reach the mac/Linux arm64 builds) - see REFACTOR_STATUS.md items 2 and 3 for the reconciliation this still needs; the VU graft is reducible to just the force-float fix.
2026-07-10 11:16:31 -04:00
jpolo1224 8beadadd9e Android UI/RA polish: User-Agent, toast border, controller warning
- Host::GetHTTPUserAgent: report ARMSX2/2.7.407.0 (the RA-registered client)
  instead of 'PCSX2 <gitrev>', which RA rejects as an outdated emulator and so
  disables hardcore unlocks.
- ImGuiFullscreen: fix ImGui 1.92 AddRect arg order (flags/thickness swapped)
  that drew a ~240px border on the RetroAchievements toast.
- VMManager: suppress the false 'Controller 1 has no input bindings' warning
  (Android injects pad state directly, bypassing InputManager bindings).
2026-07-09 10:23:59 -04:00
jpolo1224 774afbd9eb ImGui: seed s_font_info from Roboto on Android + default-font fallback
SetFonts() is never called on Android (no Qt/language layer) so s_font_info
stayed empty and AddTextFont() returned null -> blocky/blank OSD. Seed it from
the bundled Roboto-Regular.ttf, and fall back to the built-in font if the atlas
still fails so the GS device can initialise regardless.
2026-07-09 10:23:59 -04:00
jpolo1224 2512027e9a Android VM lifecycle: prompt EE stop + fix 2nd-launch kick-back
- R5900 _cpuEventTest_Shared: bail out early on VMState::Stopping/Shutdown and
  on IsExecutionInterrupted() so the EE leaves Execute() promptly on stop
  (previously hit the ~5s shutdown timeout).
- native-lib Host::RequestVMShutdown: no-op if already Shutdown. The queued
  task could re-set Stopping after the run loop already reached Shutdown,
  sticking s_state at Stopping so the next Initialize failed 'already running'
  -- kick back to library on the 2nd game boot.
2026-07-09 10:23:58 -04:00
jpolo1224 1a62f62d2a arm64/aR3000A: restore per-block IOP recompiler reset guard
The IOP dispatch loop lost its 'if (iopRecNeedsReset)' guard, leaving a bare
recResetRaw() that ran a full IOP recompiler reset on EVERY block (~800/s).
recClearLUT zeroing the LUT then dominated ~97% of EE-thread CPU in memset, so
every game crawled ~10-50x too slow (black screen / Speed 0%). Also drops a
duplicated recPtr/const_pool.Reset/recClearLUT block in the same function.
2026-07-09 10:23:58 -04:00
jpolo1224 e9b22ece5c Android: Vulkan surface + GS device bring-up on the unified core
- VKLoader.h define VK_USE_PLATFORM_ANDROID_KHR; VKEntryPoints.inl load
  vkCreateAndroidSurfaceKHR (VK_NO_PROTOTYPES); VKSwapChain create the
  ANativeWindow surface; GSDeviceVK Android surface-ext select + surface-lost
  re-acquire + non-fatal CAS on turnip.
- VKShaderCache: unversioned shaderc_shared name on Android (no .so.1).
- LnxHostSys: idempotent PageFaultHandler::Install (process reused per launch).
- imgui: enable FreeType PLUTOSVG + bundle plutosvg/plutovg for color emoji.
2026-07-09 10:23:58 -04:00
jpolo1224 baa9454c1b Android: don't compile DEV9/pcap_io.cpp (no libpcap); use the stub
The unconditional pcsx2DEV9Sources list compiled the real pcap_io.cpp on
Android, which references pcap_findalldevs / pcap_open_live / ... with no
libpcap present -> undefined symbols at link. A debug build hid this via
--gc-sections dead-stripping the unreferenced calls; the LTO release build
surfaced all 12. Android already ships Android/AndroidPcapStubs.cpp (the stub
PCAPAdapter), so gate the real pcap_io.cpp to non-Android platforms.
2026-07-08 22:25:25 -04:00
jpolo1224 11e9289454 Android: bring the platform up on the unified monorepo core
Wire platforms/android to build against the shared core and reconcile the
pieces the Android native lib needs, so the Android target compiles and
links on this repo (produces libemucore_4k.so). Per-platform builds stay
independent; the PC and iOS targets are unchanged.

Build/CMake:
- Android-aware cmake modules under platforms/android/.../cmake with
  CMAKE_MODULE_PATH repointed at them (root desktop modules untouched)
- ryml::ryml alias, TOP_CMAKE_WAS_SOURCED, drop the fatal 3rdparty
  add_subdirectory; pcsx2 PCAP guard elseif(NOT ANDROID)
- git-sync-deps step for shaderc third_party (fetch-on-demand, not
  submodules); android .gitignore for keystores/artifacts/shaderc deps
- dual-core rotation-signed build scripts (release APK + Play AAB)

Core reconciliation (APIs the native lib expects):
- GS present-cap/frameskip, Adreno framebuffer-fetch GSOption round-trip
- SPU2 channel swap + output-pause suppression
- Achievements JSON, VMManager autosave slot, WindowInfo::Android
- FileSystem SAF hooks, custom Vulkan driver path, BIOS-from-fd
- Oboe audio stream, EGL native-window, Linux/Android source guards

refresh-experimental fixes layered onto the shared recompiler/GS:
- IOP direct block chaining (aR3000A, gated s_iopBlockLinkEnabled,
  default off so behaviour is byte-identical until enabled)
- COP2 CO-bit macro-mode gate (aVU_Macro)
- EE mixed-operand constant folding
- Adreno GL coherent depth feedback via gl_LastFragDepthARM, gated to the
  Adreno GPU profile (inert on every other GPU)
- Android GPU gates: GPU-profile shader-header keystone, FIFO_RELAXED
  present mode, Mali coherent readback, Adreno-650 boot-crash gates,
  ROAA VK_ARM alias
2026-07-08 21:46:23 -04:00
jpolo1224 80d4df9d7e Restore macOS signing action args 2026-06-10 00:33:17 -04:00
jpolo1224 30eec9dbe9 Use rcodesign 0.29 for macOS entitlement config 2026-06-10 00:27:17 -04:00
jpolo1224 c7d8a07308 Verify macOS notarized JIT entitlements 2026-06-10 00:20:33 -04:00
jpolo1224 7671a71590 Fix macOS memory mapping and signing entitlements 2026-06-09 23:59:28 -04:00
jpolo1224 d97f025276 Restore macOS UI icon in CI builds 2026-06-09 16:04:18 -04:00
jpolo1224 a48e7ae8d8 Notarize macOS UI release bundle 2026-06-09 15:50:32 -04:00
jpolo1224 30e6c975e4 Fix macOS backend bundle signing 2026-06-09 15:30:32 -04:00
jpolo1224 39421d6bc8 Fix macOS setup bootstrap and duplicate games 2026-06-09 10:14:54 -04:00
jpolo1224 4ecf5e2107 macOS: update OSD branding to 2.1 2026-06-08 19:22:54 -04:00
jpolo1224 ff02d57aec macOS: enable GameDB defaults and bump 2.1 branding 2026-06-08 19:18:19 -04:00
jpolo1224 8c2461e905 macOS: port ARM64 EE improvements 2026-06-08 19:18:10 -04:00
jpolo1224 dc536ef016 Add ARMSX2 macOS UI shell 2026-06-08 01:14:16 -04:00