mirror of
https://github.com/ARMSX2/ARMSX3.git
synced 2026-08-24 16:58:52 -07:00
Pause reached the core for the first time. Rpcs3Bridge.pause() set a bool and returned, on the belief that RPCS3 has no explicit pause entry point -- Emu.Pause() exists and _rpcsx_surfaceEvent has always called it on surface loss, which is why backgrounding the app was the only thing that paused. Exported as _rpcsx_pause through all four layers; resume already reached the core, so the pair was asymmetric. Restart no longer crashes: setCustomDriver dlclose'd the previous driver handle, and applyRendererPrefs re-applies the driver on every start, so restart unloaded the library VMA had resolved vkGetPhysicalDeviceMemoryProperties2 out of. ~VKGSRender then freed its heaps and UpdateVulkanBudget called into an unmapped mapping. An ICD cannot be unloaded while anything resolved from it is reachable, so it is no longer closed. Restart no longer returns to the library either: shutdown() set stopRequested, called kill() and returned with the VM still live, so the run loop's finally started the replacement and the in-flight teardown killed it -- two BootGame calls, then Unloading ISO, by which point the restart flag was spent. shutdown() now waits (bounded) for the core to report Stopped, and the restart is queued on vmStopControl behind it. FPS cap applies at every value. ConfigStore recorded a persistent core override of Video@@Frame limit=60 and Settings rewrote it on every push, both from a migration escaping a stored 120 -- but that node is the cap control, and overrides replay last, so presets were pinned at 60 while 20 and 45 worked through Second Frame Limit. The Vblank Rate force stays, since Frame limit Auto resolves to it. Stale overrides are cleared once. 90 and 120 dropped from the row: the min() in the pacer discards them. Cover art for PKG installs: the library grid's fallback chain stopped one leg short of the extracted ICON0.PNG while the in-game menu's did not. Both now share one chain, so they cannot diverge again. has()/discIconFile require bytes rather than existence, and the staging rename is checked instead of discarded. Licences are grouped per game and collapsed instead of a flat list of content ids. Trophies: a library-wide browser and an in-game tab for the running title, reading TROPCONF.SFM and TROPUSR.DAT directly -- no account, no network. The in-game set is identified from the core's own current_trophy_name (try_get, since get<> would construct it outside emulation and hand back an empty name), falling back to TROPDIR on disk because a game registers its context lazily. Note the entry stride there is 16 + entries_size, not entries_size. Also: renderer.upscale.label was defined twice, so Internal Resolution was dead.