Commit Graph

32966 Commits

Author SHA1 Message Date
JosJuice
490615c72a
Merge pull request #14142 from JosJuice/directiofile-cant-create-saf
Common: Treat DirectIOFile as unable to create SAF files
2025-11-23 09:50:44 +01:00
Jordan Woyak
151d295b2c
Merge pull request #14148 from jordan-woyak/hookable-event-add-remove-inside-trigger
HookableEvent: Allow hooks to be added and removed from within a Trigger callback.
2025-11-23 02:20:47 -06:00
JosJuice
30dbcb2f80
Merge pull request #14128 from jordan-woyak/fix-run-on-object-race
DolphinQt/QtUtils: Simplify RunOnObject and eliminate Common::Event race. Introduce Common::OneShotEvent class.
2025-11-22 21:52:17 +01:00
Jordan Woyak
6464ed9e6b
Merge pull request #14157 from jordan-woyak/fix-rush-speed-display
CoreTiming: Fix percent speed display when "Rush Frame Presentation" is enabled.
2025-11-22 14:46:00 -06:00
JosJuice
f4f7424a9f
Merge pull request #13583 from LillyJadeKatrin/retroachievements-android
Android Support for RetroAchievements
2025-11-22 17:00:03 +01:00
Jordan Woyak
cab8d7ca01 CoreTiming: Fix percent speed display when "Rush Frame Presentation" is enabled. 2025-11-22 05:04:09 -06:00
JMC47
3fd8d072bf
Merge pull request #14037 from jordan-woyak/presentation-timing
Add "Rush Frame Presentation" and "Smooth Early Presentation" settings.
2025-11-22 04:49:03 -05:00
JMC47
ccc19aafe0
Merge pull request #14119 from jordan-woyak/si-status-response-length
HW/SI: Fix CMD_STATUS response lengths.
2025-11-22 04:38:12 -05:00
Jordan Woyak
11318e0be5 HookableEvent: Allow hooks to be added and removed from within a Trigger callback. This fixes a deadlock in FIFOFifoRecorder. 2025-11-21 16:58:20 -06:00
Jordan Woyak
c9b0e4928a DolphinQt/OnScreenDisplayPane: Swap the positions of "Show Performance Graphs" and "Show Speed Colors". 2025-11-21 01:35:28 -06:00
Jordan Woyak
8efc4086f0 DolphinQt/OnScreenDisplayPane: Rename "Graph Update Rate" back to "Performance Sample Window" and don't disable it based on "Show Performance Graphs". 2025-11-21 01:35:22 -06:00
Jordan Woyak
4f30aaf1ca
Merge pull request #13152 from Naim2000/sdlock
SDIO: report write lock status
2025-11-20 15:04:39 -06:00
Jordan Woyak
2719a5673e
Merge pull request #14121 from jordan-woyak/warn-silence
Common and VideoCommon: Silence a few warnings.
2025-11-19 22:09:19 -06:00
Jordan Woyak
1a71f0fa2e SDIO: Remove file "good" checks so errors are properly produced. 2025-11-19 21:05:57 -06:00
Naim2000
f1f8b0a825 SDIO: the CID/CSD are sent a bit differently 2025-11-19 21:05:54 -06:00
Naim2000
227c4e0515 SDIO: report actual error if writes are disabled 2025-11-19 20:11:05 -06:00
Naim2000
2e340ab160 SDIO: report write lock status 2025-11-19 18:58:13 -06:00
Jordan Woyak
2acb49544c
Merge pull request #13539 from tygyh/DiscIO-Remove-redundant-casts
DiscIO: Remove redundant casts
2025-11-19 17:40:42 -06:00
Jordan Woyak
41b6ab40e1
Merge pull request #13619 from y21/usbv5_getversion_size
Check buffer out/size in HID_USBv5/USB_VEN GetVersion Ioctl
2025-11-19 17:32:33 -06:00
Jordan Woyak
d0341b3bfc
Merge pull request #14127 from jordan-woyak/movie-cpu-thread-guard
Movie: Replace a blocking RunOnCPUThread call with a CPUThreadGuard.
2025-11-19 13:43:05 -06:00
LillyJadeKatrin
ddced1a070 RetroAchievements - Android login callback
Modify the RetroAchievements login code in Android to pass in a callback, pop a message if login fails, close the login box if it succeeds.
2025-11-18 20:40:15 -05:00
JosJuice
9883235c0c Common: Treat DirectIOFile as unable to create SAF files
In 405baed805, we made the assumption that whether OpenAndroidContent
is able to create a new file depends on the open mode, the document
provider, and the positions of the celestial bodies. However, I'm
fairly sure that it can't create files at all as currently implemented.

First, ContentResolver.openFileDescriptor is documented as throwing
FileNotFoundException if the file doesn't exist. Now, the SAF
documentation is notoriously unreliable on matters like these, and
document providers can do whatever they want anyway, so we can't
actually trust this to mean that FileNotFoundException will always
be thrown if the file doesn't exist. But second, the Dolphin function
ContentHandler.unmangle is also unable to handle files that don't
already exist (unless the passed-in URI isn't mangled to begin with,
but to the best of my knowledge, there's no way to get a non-mangled URI
for a file that doesn't exist (unless you make assumptions about how the
document provider's URI scheme works, which we don't do in Dolphin)).
Summed up, it looks a lot like OpenAndroidContent can't create files,
or at the very least can't do so reliably.

Therefore I'm making DirectIOFile throw an assertion and return false
in situations where it's being asked to create a file under SAF. For
reference, there's no code in Dolphin that actually tries to create a
file under SAF. In all instances where we use SAF to write to files, the
file is created by the system file picker before it returns the URI of
the file to us.

What does this change gain us? First, if someone in the future tries to
use DirectIOFile to create a file under SAF, they'll be immediately
informed that this isn't supported rather than discovering it doesn't
work and chalking it up to SAF being bad for unpredictable reasons.
Second, we get rid of a call to File::Exists, which is a notable
performance improvement for game list scanning due to SAF and Dolphin's
"unmangling" being bad for reasons that unfortunately are entirely
predictable to those of us who have stared into the SAF void.

I've tested that game list scanning and game conversion still works.
2025-11-18 23:17:03 +01:00
Jordan Woyak
5a6fce31b2 DolphinQt/QtUtils: Simplify RunOnObject and eliminate Common::Event race. 2025-11-18 14:19:21 -06:00
Jordan Woyak
d25742fe8b Common: Introduce a OneShotEvent class. Unlike Common::Event, OneShotEvent is safe in situations when being immediately destructed. 2025-11-18 14:19:21 -06:00
Jordan Woyak
605cc579a4 Common/Functional: Add InvokerOf template which can convert function pointers to functor types. 2025-11-18 14:19:21 -06:00
Jordan Woyak
1b63776f2d Common/ScopeGuard: Fix move constructor. 2025-11-18 14:19:21 -06:00
JosJuice
9cc4d1b835
Merge pull request #13748 from Dentomologist/autoupdatechecker_delete_old_updater_log_file
AutoUpdateChecker: Delete old Updater.log file
2025-11-18 18:12:47 +01:00
JosJuice
49e9cd42d4 JitArm64: Call GetImm before BindToRegister in subfcx
When BindToRegister is called, the register cache marks the relevant
guest register as no longer containing an immediate. However, subfcx was
calling GetImm after BindToRegister. This led to a lot of panic alerts
after 2995aa5be4 added an assert to GetImm to check that the passed-in
register is an immediate.

Both before and after 2995aa5be4, the actual value of the immediate
wasn't overwritten by BindForRegister, only the fact that the register
is an immediate. Because of this, the emitted code happened to work
correctly.
2025-11-17 20:00:36 +01:00
Jordan Woyak
6380ad6abb Movie: Replace a blocking RunOnCPUThread call with a CPUThreadGuard. 2025-11-17 11:57:43 -06:00
LillyJadeKatrin
98678e9a8b AchievementManager - Add Android to user agent
If the build is an Android build, identify it as such in the AchievementManager user agent so that android builds can be tracked separately for debug purposes.
2025-11-16 22:05:53 -05:00
JosJuice
b6e062f2e3
Merge pull request #13689 from JosJuice/lock-core-any-thread
Core: Let any thread call previously host-thread-only functions
2025-11-16 18:35:17 +01:00
JosJuice
3ff4985120
Merge pull request #12134 from JosJuice/jit-constprop
Jit: Extract immediate handling to separate ConstantPropagation class
2025-11-16 18:34:49 +01:00
JosJuice
91c3a58889
Merge pull request #13922 from TryTwo/imgui_add_default_font
OSD/Imgui: Add a better default font
2025-11-16 13:58:18 +01:00
JosJuice
b9d9f36ce5 JitArm64: Replace dirty flag and partially replace RegType enum
Like Jit64, JitArm64 now keeps track of the location of a guest register
using three booleans: Whether it is in ppcState, whether it is in a host
register, and whether it is a known immediate. The RegType enum remains
only for the purpose of keeping track of what format FPRs are stored in
in host registers.
2025-11-16 09:52:09 +01:00
JosJuice
2995aa5be4 JitArm64: Don't store immediate values in register cache
Like the previous commit did for Jit64, JitArm64 can now handle the
combination of a value simultaneously being in a host register and being
a known immediate.

Unlike with Jit64, I've put the codegen-affecting changes in this commit
and the move away from the RegType enum in a follow-up commit. This is
in part because the design of JitArm64 made it easy to implement the
codegen-affecting changes without combining it with a big bang
refactorization, and in part because we need to keep RegType around for
keeping track of different float formats in Arm64FPRCache, complicating
the refactorization a bit.
2025-11-16 09:52:09 +01:00
JosJuice
817bb9d94c Jit64: Don't store immediate values in register cache
They're now stored in ConstantPropagation instead.

I've also removed the LocationType enum. The location of each guest
register is now tracked using three booleans: Whether it is in ppcState,
whether it is in a host register, and whether it is a known immediate.
The first two of these booleans are stored in the register cache, and
the last one is stored in ConstantPropagation. This new model allows us
to handle the combination of a value simultaneously being in a host
register and being a known immediate. It also keeps track of which
registers are dirty, which was previously kept track of in X64CachedReg.

The old model maps to the new model as follows:

                                default    host_reg    immediate

Default                         true       false       false
Discarded                       false      false       false
Bound                           (!dirty)   true        false
Immediate                       false      false       true
SpeculativeImmediate            true       false       true
[previously unrepresentable]    (!dirty)   true        true
2025-11-16 09:52:09 +01:00
JosJuice
4114a0b506 Jit: Update constant propagation during instruction
This commit makes the JIT set/clear the individual registers of
ConstantPropagation immediately instead of at the end of the
instruction. This is needed to prevent Jit64::ComputeRC, which reads
from a register written to earlier during the same instruction, from
reading back stale register values from ConstantPropagation in the next
commit.
2025-11-16 09:52:07 +01:00
JosJuice
502b48a690 JitArm64: Make FlushRegisters unlock condition more robust
To find out whether a host register needs to be unlocked, FlushRegisters
checks if the guest register is known to be a zero immediate. This works
right now, but it will stop working correctly once we gain the ability
to have a guest register be a known immediate and be in a host register
at the same time, because a register that's known to be a zero immediate
may have had a host register allocated prior to the call to
FlushRegisters. Instead, we should check whether the register is
RegType::Register after we're done calling BindForRead.
2025-11-16 09:50:31 +01:00
JosJuice
7065b93ba5 JitArm64: Pass index to more Arm64GPRCache functions
This refactorization is needed for upcoming commits.
2025-11-16 09:50:31 +01:00
JosJuice
502317a485 Jit: Move rlwimix to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
bac911aac4 Jit: Move srawx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
c136fd9807 Jit: Move srwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
bb645e6cbb Jit: Move slwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
45760841b2 Jit: Move divwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
fc6c278007 Jit: Move divwux to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
c7d8a0b276 Jit: Move subfic to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
204a8fbd53 Jit: Move subfx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
2134991be8 Jit: Move multiplication by 0 optimization to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
7456ba3d3d Jit: Move mullwx, mulhwx, mulhwux to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
b469981c72 Jit: Move mulli to ConstantPropagation 2025-11-16 09:50:31 +01:00