Commit Graph
100 Commits
Author SHA1 Message Date
Stenzek c401e9318d CPU/Recompiler: Preserve pending loads on memory exceptions
Include the pending load in exception flushes so RaiseException commits it before entering the handler on every backend.
2026-10-10 21:47:41 +10:00
Stenzek 3a8b6fccfc CPU/Recompiler: Trap constant signed arithmetic overflow
Detect overflow in folded ADD, SUB and ADDI and use the interpreter exception path, including writes to zero and branch delay slots.
2026-10-10 21:47:41 +10:00
Stenzek bd29ee475f CPU/Recompiler: Dispatch interpreter fallback exceptions
Exit generated blocks when the interpreter raises an exception, preserving its handler PC across all backends and implementing the missing RISC-V and LoongArch fallback paths.
2026-10-10 21:47:41 +10:00
Stenzek e78ab9a273 CPU/Recompiler: Keep link-register delay slots in order
Track ra as the implicit branch-and-link destination and check decoded register dependencies before swapping the delay slot.
2026-10-10 21:47:41 +10:00
Stenzek 0aa0c767e1 CPU/Recompiler: Cancel pending loads on self moves
Compile same-register moves as writes to cancel load delays, preserving constant operands before clearing the destination.
2026-10-10 21:47:41 +10:00
Stenzek ed990b9275 CPU/Recompiler: Respect load delays when swapping NOP slots
Check pending loads before accepting a NOP delay slot so branches read the original register value.
2026-10-10 21:47:41 +10:00
Stenzek 9bedaa6163 FileSystem: Add more ReadFileToString() overloads 2026-10-10 21:47:41 +10:00
Stenzek 6d96829465 FileSystem: More RVO optimizations 2026-10-10 21:47:41 +10:00
Stenzek a8fb9d70e4 FileSystem: Use shared file open for ReadBinaryFile/ReadFileToString 2026-10-10 21:47:41 +10:00
Stenzek aaffbd66d9 FileSystem: Extract find result sorting to function 2026-10-10 21:47:40 +10:00
Stenzek 066d89715c FileSystem: Add error parameter to FTell64() 2026-10-10 21:47:40 +10:00
Stenzek 60aec342eb FileSystem: Make OpenSharedCFile() wrap OpenCFile() on non-Windows 2026-10-10 21:47:40 +10:00
Stenzek 659ff37089 FileSystem: Backport additional helper functions 2026-10-10 21:47:40 +10:00
Stenzek ba3590f902 Core: Don't reset folders when resetting settings
Users having their data save locations would be unexpected.
2026-10-10 21:47:40 +10:00
Stenzek 95722d8e99 Settings: Don't copy controller type to game
These are part of the controller settings...
2026-10-10 21:47:40 +10:00
Stenzek 8bb030b8cf Settings: Add a dedicated key for overlays 2026-10-10 21:47:40 +10:00
Stenzek 4ad124e8d1 StringUtil: Fix possible integer overflow in EncodeAndAppendUTF8() 2026-10-10 21:47:40 +10:00
Stenzek 4e652d5bb9 System: Provide content details to OnSystemStarted()
Avoids the OnGameChanged() call later.
2026-10-10 21:47:40 +10:00
Stenzek 07d3a934a6 GameList: Synchronize settings between FullscreenUI and Qt
Also share translations with other hosts.
2026-10-10 21:47:40 +10:00
Stenzek e02bb9c748 GameList: Allow use of external SettingsInterface 2026-10-10 21:47:39 +10:00
Stenzek d253d0a1d9 GameList: Don't persist cache map between refreshes
It was cleared anyway.
2026-10-10 21:47:39 +10:00
Stenzek a4048c9c37 GameDatabase: Sort disc sets by save title
And allow lookup by name.
2026-10-10 21:47:39 +10:00
Stenzek dbc8b22917 Threading: Add WaitFor() to ConditionVariable 2026-10-10 21:47:39 +10:00
Stenzek 83153676d7 SettingsInterface: Guard against copying to self 2026-10-10 21:47:39 +10:00
Stenzek 93e53494ac Achievements: Separate login and credential saving steps
Allows saving to an external settings interface, not needed on desktop.
2026-10-10 21:47:39 +10:00
Stenzek 364c7bd485 Achievements: Extract bucket names out of FullscreenUI 2026-10-10 21:47:39 +10:00
Stenzek 18e2aa1615 Deps: Update to 20261010 2026-10-10 21:47:39 +10:00
Stenzek 9cb25f7e98 Qt: Fix crash when desktop file check is skipped 2026-10-10 21:47:38 +10:00
Stenzek 21b05557c7 Qt: Fix desktop environment conditions 2026-10-10 21:47:19 +10:00
Stenzek cbcbbe1eba GameDB: Disable auto-analog on Khamrai 2026-10-10 15:37:08 +10:00
Stenzek df8059758b Achievements: Don't try to fetch badges without cache
Why are you trying to run two instances out of the same directory anyhow?
2026-10-07 22:15:51 +10:00
Stenzek e0668baab4 Achievements: Don't lock in prefetch callback
Always executes on the core thread, and avoids a deadlock if the cache
is not open (e.g. you are running two instances).
2026-10-07 21:53:36 +10:00
Stenzek 697599c47a CI: Use prefix path in cross appimage
Hopefully fix it being broken in Qt 6.12.
2026-10-06 17:54:22 +10:00
Stenzek baf6c425d0 System: Fix incorrect title being copied into save state header
How on earth did I derp this up...
2026-10-06 17:39:04 +10:00
Stenzek 898b6a3caa GameDB: Fix a bunch of incorrect release dates 2026-10-06 17:39:04 +10:00
Stenzek 4122fed9ad INISettingsInterface: ClearSection() should not create an empty section 2026-10-02 20:33:49 +10:00
Stenzek 9d00d6b6e3 GPU/HW: Use correct format for ROV buffers 2026-10-02 20:33:48 +10:00
Stenzek fd88101c80 VulkanDevice: Fix spec violation in ROV clear 2026-10-02 19:47:46 +10:00
Stenzek 14c2267628 Qt: Use AppRoot for translations
Hopefully fix it breaking when running under an AppImage on Linux, with
AppRun having a different AT_EXECFN value.
2026-10-01 21:42:33 +10:00
Stenzek acad15618e Deps: Update to 20261001 2026-10-01 21:09:12 +10:00
Stenzek 8fa9ef5394 FullscreenUI: Fix focus reset on escape in game list search 2026-10-01 15:35:33 +10:00
Stenzek 3f037f2682 CDImageCHD: Read out the correct sector size depending on mode
Probably doesn't affect anything in normal PSX dumps, but possibly
homebrew.
2026-10-01 15:09:00 +10:00
Stenzek e68431fda8 CDImagePPF: Handle non-mode2 sectors
Don't think anything will actually rely on this, but just in case...
2026-10-01 15:08:57 +10:00
Stenzek 4d3dadd07e CDImageMemory: Read each sector in its native format
Hopefully fixes the crash with mode-1 sectors when precaching is
enabled.
2026-10-01 15:08:57 +10:00
Stenzek 39a1e37be9 Qt: Update English translation catalog 2026-10-01 14:35:47 +10:00
Stenzek 003ff5a8d7 Qt: Update machine translations 2026-10-01 14:35:09 +10:00
Stenzek 8d42a0c022 FullscreenUI: Fix compiler warning 2026-09-30 21:25:05 +10:00
Stenzek 2d8e5b68a5 MDEC: Don't clear output FIFO on new command
Fixes corrupted MDEC-decoded-images in Bealphareth.
2026-09-30 21:25:03 +10:00
Stenzek b3b2bbc751 FullscreenUI: Display progress for on-demand game list load
Better than freezing up without any indication as to what's going on.
2026-09-30 00:33:10 +10:00
Stenzek 2c1fba1cd5 FullscreenUI: Size loading screen text and progress separately
Avoids wrapping on longer text.
2026-09-30 00:31:30 +10:00
Stenzek 4091d29353 FullscreenUI: Fix change disc menu getting stuck in some scenarios
e.g. using playlist.
2026-09-29 23:44:09 +10:00
Stenzek a429876f53 Misc: Remove more unused include guards 2026-09-29 23:34:08 +10:00
Stenzek 41c1fb10e9 Qt: Use posix_spawn for updater relaunch on Linux 2026-09-29 18:06:25 +10:00
Stenzek bfb23fb8c9 GPU: Improve CRTC function readability 2026-09-29 11:34:20 +10:00
Stenzek 60f7ffa2d0 GPU: Fix scanline sync before vertical_display_start
If the current line was before start, it wouldn't sync before end.
2026-09-29 11:32:07 +10:00
Stenzek 8a46ed8b7d Misc: Replace std::shared_mutex with Threading::SharedMutex 2026-09-28 21:17:34 +10:00
Stenzek d78fd23db9 ImGuiManager: Avoid unsafe read of context pointer on core thread 2026-09-28 01:33:14 +10:00
Stenzek 616c41d492 ImGuiManager: Stash overlays in separate draw list when transition active
Fixes OSD messages and notifications getting caught in the transition
and looking terrible.
2026-09-28 01:33:14 +10:00
Stenzek c4b4496e9b FullscreenUI: Display subset icon as game icon in subset view
Same for the background.
2026-09-28 00:29:51 +10:00
Stenzek f3d2843541 FullscreenUI: Add background image blurring for headers 2026-09-28 00:29:51 +10:00
Stenzek d901b25907 D3D12Device: Ensure all samplers are initialized in LookupSingle()
Because a single sampler can later get used as a group.
2026-09-28 00:29:51 +10:00
Stenzek 9fcff157a2 D3D12Device: Remove MAX_UNIFORM_BUFFER_SIZE
This was a Vulkan-only quirk.
2026-09-28 00:29:51 +10:00
Stenzek de1fd8c667 GPUDevice: Move UNIFORM_PUSH_CONSTANTS_SIZE into base class 2026-09-28 00:29:50 +10:00
Stenzek 2859162551 GPUDevice: Remove MultiTextureAndUBO pipeline layout
Was only used by ReShade, which can be swapped to use the push constant
layout. The push constants remain unused, which _should_ hopefully mean
the cost is basically zero because they're at the end of the root
signature and not read by the shader.
2026-09-28 00:29:50 +10:00
Stenzek 2ab88c6d9b ImGuiManager: Move blur constants into main UBO
Avoids pipeline changes while drawing.
2026-09-28 00:29:50 +10:00
Stenzek 10632b92e5 GPU/HW: Simplify pipeline layouts 2026-09-28 00:29:50 +10:00
Stenzek 5e54cade98 GPU/HW: Fix background replacements disappearing after TC toggled off 2026-09-28 00:29:50 +10:00
Stenzek dc4e772980 VulkanDevice: Fix incorrect hazard tracking in stream buffer
Draw A (maps) -> Flush -> Draw B (no map) -> Draw C (map) would allow
Draw C to overwrite Draw A's uniforms.

Mainly an issue if we run out of descriptors.
2026-09-28 00:29:50 +10:00
Stenzek 0619481dcb MetalDevice: Drop feedback loop path
I could never test this since I don't have a non-Apple GPU, and I don't
think it ever worked properly anyway.
2026-09-28 00:29:50 +10:00
Stenzek 56dbfea7fd Qt: Fix doubled-up help description 2026-09-27 12:33:12 +10:00
Stenzek f9e12bb1e3 Qt: Simplify mute setting callback 2026-09-26 21:23:49 +10:00
Stenzek 79fc5454d1 Common: Remove unnecessary include 2026-09-26 21:23:38 +10:00
Stenzek a2aa7295e3 GameList: Use correct string_view constructor 2026-09-26 21:23:31 +10:00
Stenzek 62e48451aa Win32RawInputSource: Fix wrong OnInputDeviceConnected() call 2026-09-26 21:23:04 +10:00
Stenzek 8293e84b86 Qt: Display bound devices in controller pages
Or "Multiple Devices". This way the labels don't need to display the
device name, reducing the chances of it being ellipised.
2026-09-26 18:08:38 +10:00
Stenzek 202c7d8399 Qt: Add pill-label css class 2026-09-26 17:59:45 +10:00
Stenzek 85c4acea80 Timer: Use global initializer for timer frequency on Windows
Gets rid of a branch.
2026-09-26 17:16:11 +10:00
Stenzek 4c721f375b VideoThread: Use dynamic spin loop on ARM
ISB timing can vary between CPUs and clusters.
2026-09-26 17:13:36 +10:00
Stenzek 608a0c3c26 Common: Use single isb for ARM PauseCPU()
Yield was definitely wrong here, I should read the documentation
properly...
2026-09-26 17:13:11 +10:00
Stenzek bbebc317a7 Common: Use second thread for assertion dialogs
Stops everything exploding with recursive assertions when the message
pump is allowed to continue for the calling thread.
2026-09-26 02:38:24 +10:00
Stenzek d04078319a GameList: Fix possible null string-view construction 2026-09-26 01:44:59 +10:00
Stenzek edd41dff15 SDLInputSource: Use persistent identifiers when mapping
Allows player numbers to change without invalidating bindings.
2026-09-26 01:43:06 +10:00
Stenzek 7495b76245 SDLInputSource: Rely on reload to enable accelerometer
Since device changes trigger a reload now, we don't need to scan the
binding list just to check if anything needs it.
2026-09-26 01:29:59 +10:00
Stenzek 59e2f1da2a SDLInputSource: Poll immediately after initializing
Reduces delay before controller is detected.
2026-09-26 01:29:59 +10:00
Stenzek 64b1e2b46c SDLInputSource: Simplify polling
And use the actual events for the changed-flag, rather than counting.
2026-09-26 01:29:59 +10:00
Stenzek aa77ed54da Qt: Move DS5 player LED setting into LED dialog
Free up space.
2026-09-26 01:29:55 +10:00
Stenzek 7a8e8a0777 InputManager: Use SmallString for binding conversions
And enable more RVO.
2026-09-26 01:05:55 +10:00
Stenzek eed22aa286 InputManager: Use a shared mutex for synchronization
The sources mutex protects source state when it is read by multiple threads.

When the exclusive lock is acquired, a source is updating its internal controller list and it is
not safe for another thread to read. As such, the write lock is only acquired on the core thread.

Public functions to InputManager will take the shared lock when they want to read aforementioned
data. Core thread functions do not need to acquire the shared lock, because doing so puts us at
risk of deadlocking from recursive locking.

However, if public functions are called on the core thread, taking the shared lock briefly will
be fine.
2026-09-25 21:35:44 +10:00
Stenzek d76435ca76 InputManager: Extract internal state to private header 2026-09-25 21:35:44 +10:00
Stenzek 501d3a989c InputManager: Reload input bindings after source hotplug
Instead of doing it on every connection, batch them together.
2026-09-25 21:35:44 +10:00
Stenzek 0ae22c1a95 ImGuiManager: Read pointer state directly from InputManager
No need to queue to the video thread for movement.
2026-09-25 21:35:44 +10:00
Stenzek 58efbb8c81 InputManager: Use atomics for host pointer position
Thread safe reading.
2026-09-25 21:35:44 +10:00
Stenzek ee8b45a83d InputManager: Use atomics for rawinput/pointer count
Fixes data races on read from other threads.

Also eliminate the second source of truth for gamepad type.
2026-09-25 21:35:44 +10:00
Stenzek 687178a00f InputManager: Internalise private functions 2026-09-25 21:35:44 +10:00
Stenzek 73b5a24165 Threading: Add SharedLockGuard helper
And remove UpgradeLock, not doing it this way.
2026-09-25 21:35:44 +10:00
Stenzek d9cb895ddb Controller: Unify some of the translation strings 2026-09-25 15:25:46 +10:00
Stenzek e68536dcd7 NeGcon: Create common base class for NeGcon controllers
And move common logic into base class.
2026-09-25 15:25:46 +10:00
Stenzek 62299a5092 LightgunController: Create base class for lightgun controllers
And move common logic into there.
2026-09-25 15:25:46 +10:00
Stenzek 8e4dbf1532 Qt: Fix latency description not updating 2026-09-24 18:30:24 +10:00
Stenzek cd5066662c Qt: Bind audio output volume through regular settings updates 2026-09-24 16:20:34 +10:00