Commit Graph

33358 Commits

Author SHA1 Message Date
Jordan Woyak
2a771937cf
Merge pull request #14294 from JosJuice/textureinfo-getters-header
VideoCommon: Move TextureInfo getters to header
2026-01-19 14:42:20 -06:00
JosJuice
b07c78aabe VideoCommon: Move TextureInfo getters to header
This improves my PC's performance on RS2 Hoth by... 0.1% or so, which I
think is within the margin of error. But this change also cuts down on
boilerplate.
2026-01-19 19:46:21 +01:00
Dentomologist
f4b88af71e JitRegister: Check Open return code
If the call to `Open` a perf map fails don't set `s_is_enabled` (though
it could already be true if you're also using VTUNE) and don't call
`std::setvbuf` with a null stream.

Also fix a typo in a comment (`if` -> `in`)
2026-01-18 17:26:26 -08:00
Dentomologist
7490dea278 JitRegister: Verify IOFile IsGood
Use IOFile's bool operator to check that it's not just open but good.
2026-01-18 17:26:26 -08:00
Dentomologist
935f537a80 JitRegister: Fix IsEnabled when using VTune without perf
Set `s_is_enabled` to `true` in `Init` when `USE_VTUNE` is defined so
that `IsEnabled` returns true even if perf isn't being used.
2026-01-18 17:26:26 -08:00
Admiral H. Curtiss
710905138c
Merge pull request #14290 from Dentomologist/jitregister_remove_redundant_open_file_check
JitRegister: Remove redundant check for open file
2026-01-19 02:06:57 +01:00
JosJuice
3b1a4739bc JitArm64: Special-case fmadds with single-precision inputs
If all inputs to an fmadds instruction (including cousins like fmsubs,
fnmadd...) are single-precision, then the result is identical between a
double-precision calculation with an error-free transform (whether the
calculation is fused or not) and a single-precision FMA instruction
(must be fused). So as a performance optimization in JitArm64, if we
were going to use double precision with EFT but the inputs are singles,
instead we'll use a normal single-precision FMA instruction without
anything extra. This lets us skip both the EFT and double-to-single
conversions.

Also renaming `inaccurate_fma` to `nonfused` because it's confusing that
`inaccurate_fma` and `m_accurate_fmadds` have such similar names
despite controlling separate things.
2026-01-18 20:03:54 +01:00
JosJuice
58487f1633 Jit: Implement error-free transformation for single-precision FMA
This implements the equivalent of 07443e2d41 in Jit64 and JitArm64.
Aims to fix https://bugs.dolphin-emu.org/issues/13865.
2026-01-18 20:02:49 +01:00
JosJuice
6ac7ffcdd7 Jit64: Return FixupBranch from HandleNaNs
This will be used in the next commit to skip running code that's
unnecessary when the result is NaN.
2026-01-18 20:02:49 +01:00
JosJuice
d5067b6276 Jit64: Replace MOVSD with MOVAPD in software FMA
Should be a little faster by avoiding false dependencies. Note that
there is one remaining MOVSD that really needs to be a MOVSD.
2026-01-18 20:02:49 +01:00
JosJuice
caad84c636 JitArm64: Reduce register pressure for inaccurate FMA with accurate NaNs
If result_reg is set to a temporary register instead of VD because of
accurate NaNs, there's no need to allocate a secondary temporary
register because of inaccurate FMA.
2026-01-18 20:02:49 +01:00
JosJuice
84261cfc23 Arm64Emitter: Fix Q bit of vector SHL/URSHR encoding
This doesn't affect any existing callers, because all existing callers
use quad registers.
2026-01-18 20:02:49 +01:00
JMC47
fe668ebc89
Merge pull request #14033 from JosJuice/jitarm64-inaccurate-fma-double
JitArm64: Always use double precision for inaccurate FMA
2026-01-18 13:52:06 -05:00
JMC47
f8b47c031f
Merge pull request #14291 from JosJuice/defer-textureinfo
VideoCommon: Defer creating TextureInfo
2026-01-18 13:33:14 -05:00
JosJuice
fb07406f10 VideoCommon: Defer creating TextureInfo
TextureCacheBase::LoadImpl has a hot path where the passed-in
TextureInfo never gets used. Instead of passing in a TextureInfo, let's
pass in the stage and create the TextureInfo from the stage if needed.

This unlocks somewhere above an additional 4% performance boost in the
Hoth level of Rogue Squadron 2 on my PC. Performance varies, making it
difficult for me to measure, so treat this as a very approximate number.
2026-01-18 13:04:06 +01:00
JosJuice
addededecf JitArm64: Always use double precision for inaccurate FMA
When we're emulating single-precision FMA using an FMA instruction,
there's no precision benefit from using a double-precision instruction,
assuming all inputs are single-precision. But when we're emulating
single-precision FMA using separate multiplication and addition
instructions, there is.

This change increases the precision of inaccurate FMA to the same level
as Jit64, which matters since the only reason we have the inaccurate
FMA mode is for sync compatibility with Jit64.
2026-01-18 10:36:00 +01:00
Jordan Woyak
362d359787 ARDecrypt: Code modernization. 2026-01-18 01:22:10 -06:00
iwubcode
373e35ed5b
Merge pull request #14267 from jordan-woyak/std-expected
Common: Replace Result with std::expected.
2026-01-17 22:33:15 -06:00
iwubcode
6d40f4e897
Merge pull request #14265 from JoshuaVandaele/std-unreachable
c++23: Replace Common::Unreachable with std::unreachable
2026-01-17 22:32:53 -06:00
Dentomologist
3424983a65 JitRegister: Remove redundant check for open file
The check only happened if `USE_VTUNE` wasn't defined, and in that case
it was immediately followed by the same check again.

The check used to avoid an unnecessary call to `StringFromFormatV` in
certain circumstances, but that call was removed in
be81fe86e1.
2026-01-17 16:39:04 -08:00
JMC47
035bcffc63
Merge pull request #14289 from Sintendo/typos
Fix various typos and spelling mistakes
2026-01-17 19:10:50 -05:00
JMC47
d098f2bba9
Merge pull request #14274 from JosJuice/jitregister-check-enabled
JitRegister: Check IsEnabled before constructing string
2026-01-17 18:23:43 -05:00
JMC47
cffa4422c9
Merge pull request #14258 from JoshuaVandaele/dinput-unconditional-mousebuttons
DInputKeyboardMouse: Always report all possible buttons
2026-01-17 18:23:26 -05:00
JMC47
a5b34d43fc
Merge pull request #14215 from Tilka/disasm
GekkoDisassembler: fix multiple issues
2026-01-17 18:21:09 -05:00
JMC47
9e8e644fbf
Merge pull request #14193 from jordan-woyak/budokaiprogressive
GameSettings: Dragon Ball Z: Budokai 1 and 2 adjustments.
2026-01-17 18:20:37 -05:00
JMC47
581bef63be
Merge pull request #14250 from jordan-woyak/wmreal-bb-no-pool
WiimoteReal: Immediately disconnect balance boards when disabled.
2026-01-17 18:16:04 -05:00
Jordan Woyak
dffc7a650d Common: Replace Result with C++23's std::expected. 2026-01-17 16:58:45 -06:00
Joshua Vandaële
e822cc3715
c++23: Replace Common::Unreachable with std::unreachable
Requires at least GCC 12, Clang 15, MSVC 19.32, or AppleClang 14.0.3.
2026-01-17 23:53:21 +01:00
iwubcode
b556bd99d7
Merge pull request #14268 from JoshuaVandaele/std-tounderlying
c++23: Replace Common::ToUnderlying with std::to_underlying
2026-01-17 16:49:57 -06:00
JMC47
8a606fca88
Merge pull request #14286 from JosJuice/textureinfo-vector
VideoCommon: Don't create mipmap vector in TextureInfo
2026-01-17 16:03:26 -05:00
OatmealDome
7ec5b06ab9
Merge pull request #14287 from Sintendo/mac-cmake-fix
Fix MacUpdater build on CMake 3.31+
2026-01-17 14:51:23 -05:00
Dentomologist
3042918952
Merge pull request #14213 from cscd98/readvalue
mingw: move ReadValue definitions into cpp to fix visibility
2026-01-17 11:37:27 -08:00
Sintendo
1e0473e44f Fix various typos and spelling mistakes 2026-01-17 20:11:38 +01:00
Sintendo
eedee51b93 Fix MacUpdater build on CMake 3.31+
Building on macOS with a recent CMake version would result in the
following error:

CMake Error at Source/Core/MacUpdater/CMakeLists.txt:48 (add_custom_command):
  The following keywords are not supported when using
  add_custom_command(TARGET): DEPENDS

As it turns out, this form of `add_custom_command` does not accept
DEPENDS, but versions of CMake prior to 3.31 silently dropped it.
2026-01-17 18:25:49 +01:00
JosJuice
f7b4d2738b VideoCommon: Don't create mipmap vector in TextureInfo
The TextureInfo constructor creates a vector of MipLevels. This could be
good for performance if MipLevels are accessed very often for each
TextureInfo, but that's not the case. Dolphin creates thousands of
TextureInfos per second that it never accesses the mipmap levels of
because there's a hit in the texture cache, and in the uncommon case of
a texture cache miss, the mipmap levels only get looped through once.

To make the common case of texture cache hits as fast as possible, let's
not create a vector in the TextureInfo constructor. This commit
implements a custom iterator for MipLevels instead.

In my testing on the Death Star level of Rogue Squadron 2, this speeds
up TextureInfo::FromStage by 200%, giving an overall emulation speedup
of a bit over 1%. Results on the Hoth level are even better, with
TextureInfo::FromStage being close to 300% faster and overall emulation
being over 4% faster. (Single core, no GPU texture decoding.)
2026-01-17 17:57:07 +01:00
Sepalani
faa977f5ee LogitechMicWindow: Fix compilation when cubeb is disabled 2026-01-17 01:51:38 +04:00
Joshua Vandaële
0e348ee159
MenuBar: Add entries to open the config and cache folders 2026-01-15 20:40:48 +01:00
JMC47
2aee998a8e
Merge pull request #14199 from JosJuice/jit64-rcoparg-isimm
Jit64: Return current value from RCOpArg::IsImm
2026-01-12 13:06:09 -05:00
Jordan Woyak
5162608df9 Revert "Externals: Update zlib-ng to v2.3.2"
This reverts commit 34b402b631.
2026-01-11 20:29:05 -06:00
Jordan Woyak
dc8f2995ef
Merge pull request #14273 from JosJuice/x64-oparg-padding
Jit64: Make OpArg and TrampolineInfo smaller
2026-01-11 16:14:50 -06:00
JMC47
79a4034aa0
Merge pull request #14251 from JoshuaVandaele/cmake-editorconfig
.editorconfig: Update CMake style
2026-01-11 16:28:03 -05:00
JMC47
823d111922
Merge pull request #14255 from JoshuaVandaele/bsd-fix
cpp-ipc: Fix builds on non-FreeBSD BSDs
2026-01-11 16:27:29 -05:00
JMC47
28a8fa5de6
Merge pull request #14229 from JoshuaVandaele/zlib-ng
Externals: Update zlib-ng to v2.3.2
2026-01-11 16:03:18 -05:00
JMC47
79255f550d
Merge pull request #14275 from JosJuice/hotkey-vector
HotkeyManager: Don't allocate heap memory in GetInput
2026-01-11 15:41:03 -05:00
JosJuice
3c771ade4b HotkeyManager: Don't allocate heap memory in GetInput
Profiling Dolphin using Heaptrack, this turns out to be the cause of
more than half of all temporary allocations. Though since it's in a
separate thread, I suppose it wasn't affecting performance very much.
2026-01-11 21:14:34 +01:00
JosJuice
c54dc9db60 JitRegister: Check IsEnabled before constructing string
Without this, every time we finalize a JIT block, we have to allocate
memory for a string and format the string.
2026-01-11 21:01:49 +01:00
JosJuice
3ea366119f Jit64: Make TrampolineInfo smaller
Combined with the previous commit, this brings the TrampolineInfo struct
down to 48 bytes. This matters, because Jit64 has a big
std::unordered_map where it stores many megabytes of TrampolineInfo
entries.

The key saving comes from shrinking the len member from u32 to u16. It
should be safe to even turn it into a u8, but going that far brings no
additional savings due to how the padding works out.
2026-01-11 19:12:26 +01:00
JosJuice
283218bc29 x64Emitter: Reduce padding in OpArg
By moving members of the OpArg struct around, we can cut down on how
much padding the struct needs. Now it has a size of 16 bytes, small
enough for function calls to pass it in two registers instead of on the
stack.
2026-01-11 19:07:08 +01:00
OatmealDome
e065b34a64
Merge pull request #14272 from OatmealDome/liquid-glass-begone
DolphinQt: Disable Liquid Glass on macOS when built with Xcode 26
2026-01-09 22:28:16 -05:00
Joshua Vandaële
55f0715ad4
c++23: Replace Common::ToUnderlying with std::to_underlying
Requires at least GCC 11, Clang 13, MSVC 19.30 (VS2022 17.0), or AppleClang 13.1.6 (XCode 13.3).
2026-01-09 23:49:10 +01:00
OatmealDome
6be6e7734b
DolphinQt: Disable Liquid Glass on macOS when built with Xcode 26 2026-01-09 08:27:12 -05:00
LillyJadeKatrin
dfba2802ad Fix RetroAchievements dev search freezes
Re-added a line of code from a cancelled PR (that I thought was in
main already) that RetroAchievements uses to properly synchronize
memory reads and writes with the emulator frames. This appears to
fix some pretty major freezing and deadlocks in the RA dev tools.
2026-01-09 08:20:21 -05:00
iwubcode
cc0ce62e7f
Merge pull request #14252 from Dentomologist/set_standard_to_c++23
Set standard to c++23 for non-MSVC compilers
2026-01-08 14:35:17 -06:00
Joshua Vandaële
6cc121aceb
DInputKeyboardMouse: Always report all possible buttons 2026-01-07 01:08:34 +01:00
Dentomologist
ba32260c29 Set CMake version range to 3.20...4.2.1
CMake support for c++23 was added in 3.20.

Remove statements explicitly setting the following policies to NEW.
These policies were introduced in or before 3.20, and now that 3.20 is
the minimum version they will automatically have the NEW behavior.

Policy:  Introduced in
CMP0079: 3.13
CMP0084: 3.14
CMP0091: 3.15
CMP0092: 3.15
CMP0099: 3.17
CMP0117: 3.20

Disable scanning c++ source files for module imports (introduced as
CMP0155 in 3.28) since we don't use modules and that policy triggers
build errors with Clang if the clang-scan-deps tool isn't installed.
2026-01-06 14:44:20 -08:00
Joshua Vandaële
2005b0365e
cpp-ipc: Fix builds on non-FreeBSD BSDs
cpp-ipc is explicitely only available on Windows, Linux, QNX, and FreeBSD. Trying to build dolphin on any another BSD such as OpenBSD or Haiku currently leads to failure because of this.
2026-01-06 21:46:33 +01:00
JosJuice
2098b4b1ca DSP: Remove HLEMemory functions
During my quest to rid Dolphin of the memory-unsafe GetPointer function,
I didn't realize that DSPHLE had its own set of memory access functions
that were essentially duplicating the standard ones. This commit gets
rid of them and replaces calls to them with calls to MemoryManager.
2026-01-05 16:15:17 +01:00
Dentomologist
af585e0bd0 Metal: Move ObjectCache constructor and destructor
Move the constructor and destructor after the definition of the class
`Internal`.

This fixes an error generated by Clang from the destructor of
`std::unique_ptr<Internal>` when setting the standard version to c++23:

`invalid application of 'sizeof' to an incomplete type 'Metal::ObjectCache::Internal'`.
2026-01-04 17:56:25 -08:00
Dentomologist
b1c9c13ca3 VolumeFileBlobReader: Define default destructor in source file
Fix an error generated by Clang from the destructor of
`std::unique_ptr<FileInfo> m_file_info` when setting the standard
version to c++23:

`invalid application of 'sizeof' to an incomplete type 'DiscIO::FileInfo'`
2026-01-04 17:56:08 -08:00
Craig Carnell
e4f6d9bad4 mingw: move ReadValue instantiations in cpp for compatibility 2026-01-04 21:16:30 +00:00
Joshua Vandaële
7f6bf67182
CMake: Apply editorconfig formatting 2026-01-04 12:59:56 +01:00
Jordan Woyak
cb07f9608c WiimoteReal/IOWin: Determine the Bluetooth name of HID interfaces to differentiate between Wii Remotes and Balance Boards. 2026-01-03 16:50:39 -06:00
Jordan Woyak
fb2a46c4cf
Merge pull request #14248 from jordan-woyak/windows-balance-board-fix
WiimoteReal/IOWin: Fix Real Balance Board connections.
2026-01-03 16:48:39 -06:00
Jordan Woyak
918a419131 WiimoteReal: Immediately disconnect balance boards when disabled rather than placing them in the temporary pool. 2026-01-03 04:59:55 -06:00
Jordan Woyak
17a518ef30 WiimoteReal/IOWin: Fix Real Balance Board connections. 2026-01-02 15:56:32 -06:00
Jordan Woyak
93e5f58460 DiscIO/Volume: Fix CreateVolume for WiiWare. 2026-01-02 14:55:20 -06:00
Sepalani
b05a7e2059 IOS/USB: Add helper to set return values of IsoMessage's packets 2026-01-01 15:44:18 +04:00
Jordan Woyak
329ab1f518
Merge pull request #14232 from iwubcode/const_flags
Common: update Flags to allow const object usage
2025-12-30 18:12:12 -06:00
Jordan Woyak
d84dd20991
Merge pull request #14208 from cristian64/broadband_adapter_ipc_freebsd
Core/HW: Enable BBA (IPC) in FreeBSD.
2025-12-30 17:59:59 -06:00
Joshua Vandaële
74b1930da4
JitArm64_RegCache: Fix is always true warnings 2025-12-29 11:12:07 +01:00
Joshua Vandaële
f9fe82f19e
ShaderAsset: Fix shadowed variable
`samplers` is a member defined in ShaderAsset.h
2025-12-29 11:12:07 +01:00
LillyJadeKatrin
9fae55e098 RetroAchievements - Corrected MEM2 Alignment
rcheevos expects Wii MEM2 to be aligned to 0x10000000 in recent updates;
this corrects AchievementManager to do so.
2025-12-28 14:47:27 -05:00
iwubcode
aa1605e95a
Merge pull request #14228 from iwubcode/clear_compiler_work_resource_mgr
VideoCommon: clear all compiler work when resource manager shuts down
2025-12-27 13:09:21 -06:00
JosJuice
db6c3b783c
Merge pull request #14234 from JoshuaVandaele/wunused-cpipeline
CustomPipeline: Remove unused functions
2025-12-27 11:17:27 +01:00
JosJuice
73f2ac6eb0
Merge pull request #14233 from Sintendo/fix-shader-resource-warning
VideoCommon: Fix ShaderResource init order warning
2025-12-27 11:16:21 +01:00
Joshua Vandaële
35c6a6e612
CustomPipeline: Remove unused functions 2025-12-27 09:07:42 +01:00
Sintendo
1b3485b6fd VideoCommon: Fix ShaderResource init order warning 2025-12-26 23:15:17 +01:00
iwubcode
c9ef05c4b3 Common: update Flags to allow const object usage
Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
2025-12-25 21:07:45 -06:00
iwubcode
66c392f729 VideoCommon: initialize stored viewport to 0, fixes a crash in debug mode for d3d 2025-12-24 15:23:25 -06:00
Joshua Vandaële
34b402b631
Externals: Update zlib-ng to v2.3.2 2025-12-24 11:44:37 +01:00
iwubcode
f846fc0d02 VideoCommon: clear all compiler work when resource manager shuts down 2025-12-24 01:51:55 -06:00
JMC47
4b086b1256
Merge pull request #14223 from jordan-woyak/wmreal-windows-device-enumeration
HW/WiimoteReal: Cache the enumerated Wii remote HID interface list between calls to FindWiimoteHIDDevices.
2025-12-23 17:01:44 -05:00
Jordan Woyak
fc4cbf9c6f HW/WiimoteReal: Cache the enumerated Wii remote HID interface list between calls to FindWiimoteHIDDevices. 2025-12-23 00:16:10 -06:00
Jordan Woyak
c55218200a WindowsDevice: Add DeviceChangeNotification class. 2025-12-23 00:02:36 -06:00
JMC47
0a3aac6d85
Merge pull request #14043 from iwubcode/custom_resource
VideoCommon: separate the concept of a 'resource' from an 'asset', add Material/Shader loading
2025-12-22 17:08:02 -05:00
JMC47
d458d6d92a
Merge pull request #14206 from cscd98/send-message
mingw: replace usages of SendMessage due to clash with existing function
2025-12-22 13:41:03 -05:00
JMC47
6d9978519a
Merge pull request #14205 from cscd98/interface-replace
mingw: replace usages of Interface as clashes with existing struct
2025-12-22 13:40:41 -05:00
JMC47
0aaa29d047
Merge pull request #14185 from mbc07/osd-tooltip-fix
DolphinQt: minor fixes for the OnScreenDisplayPane
2025-12-22 13:39:22 -05:00
JMC47
561428b80d
Merge pull request #14184 from jordan-woyak/es-setuid-faster
IOS/ES: Make the Wii menu "Data Management" "Save Data" screen not nearly as hard to emulate at full speed.
2025-12-22 13:38:55 -05:00
JMC47
b1f0d883cf
Merge pull request #14174 from JoshuaVandaele/minizips-cmake
Use minizip-ng's CMakeLists instead of relying on our own implementation
2025-12-22 13:36:52 -05:00
JMC47
f76a2ec004
Merge pull request #14166 from jordan-woyak/immediate-xfb-limit
VideoCommon: Add setting to limit immediate swaps to one per VI.
2025-12-22 13:35:52 -05:00
JMC47
07d071a0b8
Merge pull request #14158 from jordan-woyak/gcadapter-poll-rate-display
GCAdapter: Calculate poll rate for display in UI.
2025-12-22 13:35:24 -05:00
JMC47
8a64bc499f
Merge pull request #14154 from jordan-woyak/result-parameter-order
Common/Result: Swap order of template parameters to match C++26's std::expected.
2025-12-22 13:34:11 -05:00
JMC47
9fe177bc21
Merge pull request #14151 from iwubcode/material_asset_boolean
VideoCommon: fix MaterialAsset so that boolean parameters are written properly
2025-12-22 13:33:48 -05:00
JMC47
38a89c6365
Merge pull request #14150 from iwubcode/clear_async_compiler_work_items
VideoCommon: add method to async shader compiler to clear pending/completed work, use on shutdown
2025-12-22 13:33:25 -05:00
JMC47
bc03aa72ac
Merge pull request #14147 from oltolm/wrl
AudioCommon / VideoBackends / WinUpdater - cleanup WRL code
2025-12-22 13:32:59 -05:00
JMC47
ddb35428ce
Merge pull request #14143 from jordan-woyak/set-state-from-cpu
Core: Allow CPUManager::SetStepping to be called from the CPU thread to no longer rely on host to exit stepping mode.
2025-12-22 13:31:22 -05:00
JMC47
7ec676b452
Merge pull request #14117 from iwubcode/end_utility_drawing
VideoCommon: avoid assuming global state exists for 'EndUtilityDrawing'
2025-12-22 13:30:30 -05:00
JMC47
0e06f5d632
Merge pull request #14114 from jordan-woyak/freelook-config-cleanup
Core: Eliminate FreeLookConfig by putting the "active config" within FreeLookCamera.
2025-12-22 13:30:12 -05:00
JMC47
90c2f24bf8
Merge pull request #14095 from jordan-woyak/sigsegv_handler-cleanup
MemTools: Clean up SIGSEGV handler.
2025-12-22 13:29:53 -05:00
JMC47
cd99d48859
Merge pull request #14056 from jordan-woyak/cached-blob-reader
Core/DiscIO: Add a setting to load games into memory.
2025-12-22 13:29:05 -05:00
JMC47
05a204edc6
Merge pull request #14016 from jordan-woyak/usbutils-CfgMgr32
USBUtils: Replace GetDeviceNameUsingSetupAPI with GetDeviceNameUsingCfgMgr32
2025-12-22 13:28:12 -05:00
JMC47
e17f6cff30
Merge pull request #13959 from Sintendo/jitarm64-subfx-merge
JitArm64_Integer: Merge subfx and subfcx
2025-12-22 13:27:38 -05:00
JMC47
0c1c58dfbc
Merge pull request #13409 from jordan-woyak/analytics-vconfig
DolphinAnalytics: Use Config::Get instead of accessing g_Config.
2025-12-22 13:26:45 -05:00
JMC47
29a947efc0
Merge pull request #13287 from JoshuaVandaele/legacyconfig
Remove legacy configuration support
2025-12-22 13:26:12 -05:00
Admiral H. Curtiss
b758b390d4
Merge pull request #14210 from cscd98/ulong-compile
MainWindow: Fix sscanf type/width specifiers for DWORD
2025-12-19 18:01:33 +01:00
JMC47
e60f39c323
Merge pull request #14202 from jordan-woyak/sdl-gcadapter-hint
ControllerInterface: Turn off SDL's GameCube controller adapter handling when Dolphin is configured to use the adapter.
2025-12-17 05:18:37 -05:00
Sintendo
558cee8dcf StringUtils: Drop TabsToSpaces
This function is unused.
2025-12-15 13:41:54 +01:00
Craig Carnell
eded73fe8b mingw: fix use of std::invocable with EnumerateRadios 2025-12-12 09:33:10 +00:00
Tillmann Karras
c52dd23c58 GekkoDisassembler: drop unsupported opcodes 2025-12-12 01:37:19 +00:00
Tillmann Karras
df7caeab3f GekkoDisassembler: fix ps_sel operands 2025-12-12 01:14:16 +00:00
Tillmann Karras
1c157d1fc8 GekkoDisassembler: fix conditional twi opcode 2025-12-12 01:14:09 +00:00
Craig Carnell
7e9f291222 MainWindow: Fix sscanf type/width specifiers for DWORD 2025-12-11 19:36:09 +00:00
Craig Carnell
ec6f511c95 mingw: replace usages of Interface as clashes with existing struct 2025-12-11 12:18:02 +00:00
Joshua Vandaële
43564d4130
CMake: Only copy build_info.txt if autoupdate is enabled 2025-12-11 04:23:04 +01:00
Joshua Vandaële
3bb3a05f82
CMake: Use rc and manifests on other targets to match VS Project 2025-12-11 04:23:04 +01:00
Joshua Vandaële
da22171c80
Build: Remove license.txt
Follow up to #10039 and #9862
2025-12-11 04:23:00 +01:00
Craig Carnell
ccc1c4a601 mingw: use reinterpret_cast for function→void* conversion to satisfy C++ standard 2025-12-10 21:45:41 +00:00
cristian64
bd6ea9a9a1 Core/HW: Enable BBA (IPC) in FreeBSD.
Since v1.4.0, cpp-ipc now supports FreeBSD. This was a limitation that
prevented us from enabling compilation on FreeBSD in #13870.

Full changelog: https://github.com/mutouyun/cpp-ipc/releases/tag/v1.4.0
2025-12-10 21:26:43 +00:00
Craig Carnell
26b6980d1a mingw: replace SendMessage usage as clashes with existing function 2025-12-10 21:07:33 +00:00
Nuh Uh
f31f11c0a4 Update Comments Based On Hardware Test
Checked on hardware that this bias was not added because I had assumed the other way around would be true, forgot to ask about making a PR for this when I initially had done so
2025-12-10 13:40:24 -06:00
Jordan Woyak
21eb43c16e ControllerInterface: Turn off SDL's GameCube controller adapter handling when Dolphin is configured to use the adapter. 2025-12-09 16:51:41 -06:00
JosJuice
fca27c375a Jit64: Explicitly get imm for clobbered stores
If we're on an x64 CPU that doesn't have the MOVBE extension, trying to
SwapAndStore a host register results in that register's value getting
clobbered with the swapped value. Jit64::stX and Jit64::stXx detect this
case, and if necessary, emit a MOV to a register that's fine to clobber.

This logic was broken by the merge of PR 12134. Jit64::stX and
Jit64::stXx were assuming that if RegCache::IsImm returns true for a
guest register, calling RegCache::Use or RegCache::BindOrImm for that
guest register would result in an immediate. However, PR 12134 made it
possible for a guest register to have both a host register and an
immediate in the register cache at the same time. When this happens,
RegCache::IsImm returns true, yet RegCache::Use and RegCache::BindForImm
return an RCOpArg whose Location returns a host register. (To make it
extra confusing, RCOpArg::IsImm calls RegCache::IsImm if the RCOpArg
came from RegCache, so RCOpArg::IsImm returns true!)

To fix this, in cases where Jit64::stX and Jit64::stXx explicitly need
an immediate to avoid having to emit an extra MOV, let's call
RegCache::Imm32 so that we're certain that we're getting an immediate.

This fixes an issue on older x64 CPUs that manifested as e.g. completely
broken graphics in Spyro: Enter the Dragonfly.
2025-12-08 23:19:10 +01:00
JosJuice
48009fd898 Jit64: Return current value from RCOpArg::IsImm
The constant propagation PR made it so that a guest register can be
present in the register cache as both a host register and an immediate
at the same time. If such a guest register is requested from the
register cache, the register cache prefers returning it as a host
register. However, RCOpArg::IsImm still returns true in this case. This
is confusing, especially since OpArg::IsImm does not return true if the
RCOpArg is converted into an OpArg.

This commit makes RCOpArg::IsImm check whether RCOpArg::Location returns
an immediate, so that RCOpArg::IsImm returns false when a host register
is being used. Code that wants to know whether an immediate exists in
the register cache rather than whether an immediate is currently being
used should call RegCache::IsImm instead.
2025-12-07 23:09:07 +01:00
JMC47
80465b2554 GameSettings: Convert "Deinterlacing Fix" codes to patches for Dragon Ball Z: Budokai 1 and 2, enabled them by default, and also added the patch for the Japanese version of the game. 2025-12-04 05:01:28 -06:00
JosJuice
213dc1c9af
Merge pull request #14178 from Dentomologist/jit64_avoid_passing_immediate_to_non_immediate_parameter
Jit64: Avoid passing immediate to non-immediate parameter
2025-12-01 20:01:52 +01:00
JosJuice
efa8439b79
Merge pull request #14186 from JoshuaVandaele/dit-crash-fix
DITConfiguration: Prevent a crash if images fail to load
2025-12-01 20:00:19 +01:00
JosJuice
582d5cfe96
Merge pull request #14188 from JosJuice/jit64-flush-carry
Jit64: Flush carry flag in FallBackToInterpreter
2025-12-01 19:58:38 +01:00
JosJuice
f842af8b03
Merge pull request #14182 from jordan-woyak/ra-hardcore-warning-size
DolphinQt: Use QtUtils::CreateIconWarning to make the RetroAchievements warning size consistent with other warnings.
2025-11-30 23:25:12 +01:00
JosJuice
e27ec97b15
Merge pull request #14180 from jordan-woyak/mgba-link-fix
GBACore: Fix Pokemon GBA link.
2025-11-30 18:26:18 +01:00
Joshua Vandaële
5a6dc310c0
DITConfiguration: Prevent a crash if images fail to load
Recently came across a strange issue where Dolphin would hard crash in most games with this error:

```sh
/usr/include/c++/15.2.1/optional:1165: constexpr const _Tp* std::optional<_Tp>::operator->() const [with _Tp = InputCommon::ImagePixelData]: Assertion 'this->_M_is_engaged()' failed.
```

The culprit turned out to be accessing `host_key_image` which is an `std::optional` thay may return `std::nullopt`. I'm not sure why this issue started occuring for me since I've had no issue with my Dynamic Input Textures in the past? But this fixes a crash if the image fails to load.
2025-11-29 23:54:48 +01:00
Dentomologist
448d61f262 Windows/DirectIOFile: Don't request DELETE access for read-only Open
Aside from being unnecessary, on Windows the flag prevents two instances
of Dolphin (one instance from before 2509-371 when the flag was
introduced and the other after) from running the same ROM
simultaneously.

Attempting to do so generated the false error `"[Rom]" is an invalid
GCM/ISO file, or is not a GC/Wii ISO.` followed by `Failed to init core`
and emulation shutdown on the second instance to start the game. Fixing
the incorrect error message is a task I'm deferring to another PR.

The problem didn't happen when both instances were 2509-371 or later,
but I ran into it while bisecting an issue and it'd be nice to avoid
that problem in the future.
2025-11-29 14:02:24 -08:00
JosJuice
0c024de591 Jit64: Flush carry flag in FallBackToInterpreter
We have an optimization where the guest carry flag is kept in the host
carry flag between certain back-to-back pairs of integer instructions.
If the second instruction falls back to the interpreter, then
FallBackToInterpreter should flush the carry flag to m_ppc_state,
otherwise the interpreter reads a stale carry flag and at some later
point Jit64 trips the "Attempt to modify flags while flags locked!"
assertion.

An alternative solution would be to not store the guest carry flag in
the host carry flag to begin with if we know the next instruction is
going to fall back to the interpreter, but knowing that in advance is
non-trivial. Since interpreter fallbacks aren't exactly intended to be
super optimized, I went for the flushing solution instead, which is how
JitArm64 already works. In most cases, the emitted code shouldn't even
differ between these two solutions.

Note that the problematic situation only happens if the first integer
instruction doesn't fall back to the interpreter but the second one
does. This used to be impossible because there's no "JIT disable"
setting that's granular enough to disable some integer instructions but
not all, but with the constant propagation PR, it's possible if constant
propagation is able to entirely evaluate the first instruction but not
the second.
2025-11-29 11:45:43 +01:00
Jordan Woyak
afaedb3c13 IOS/ES: Set the ESDevice::SetUID IPCReply delay based on ESCore::FindInstalledTMD.
This makes SetUID take more emulated time giving the host more time to actually do the work.
The Wii menu "Data Management" -> "Save Data" -> "Wii" screen is no longer nearly as hard to emulate at full speed.
2025-11-28 18:04:57 -06:00
Mateus B. Cassiano
3072779705
DolphinQt: minor fixes for the OnScreenDisplayPane 2025-11-28 09:13:47 -04:00
Jordan Woyak
54c74429df IOS/ES: Make UpdateUIDAndGID and CheckIsAllowedToSetUID take an existing UIDSys so it only needs to be built once in ESDevice::SetUID.
Constructing the UIDSys from the filesystem is a major bottleneck in the Wii menu "Data Management" -> "Save Data" -> "Wii" screen and this change makes it about twice as fast.
2025-11-28 03:02:07 -06:00
Jordan Woyak
e8c512dfb5
Merge pull request #14183 from LillyJadeKatrin/retroachievements-eternal-darkness-testing-my-sanity
RetroAchievements - Remove Hardcore Check from ApplyMemoryPatch
2025-11-27 14:30:39 -06:00
LillyJadeKatrin
fd0b875ab5 RetroAchievements - Remove Hardcore Check from ApplyMemoryPatch
This was blocking all memory patches from executing properly in hardcore mode even when contained in the Allowlist.
2025-11-27 11:52:56 -05:00
Jordan Woyak
70d4bb970c DolphinQt: Use QtUtils::CreateIconWarning to make the RetroAchievements "hardcore mode" warning size consistent with the other warnings. 2025-11-27 01:43:50 -06:00
Jordan Woyak
19a1ee3064 GBACore: Fix Pokemon GBA link. 2025-11-26 23:12:20 -06:00
Dentomologist
c2d277c5d1 Jit64: Avoid passing immediate to non-immediate parameter
Call `UseNoImm` instead of `Use` on parameter `a` of `MultiplyImmediate`
since `Ra` gets passed to `IMUL` which asserts that parameter is not an
immediate.
2025-11-26 16:27:26 -08:00
Tillmann Karras
07ef12eecc AX: fix signedness of second low-pass filter coefficient
This fixes NFL Blitz Pro.
2025-11-27 00:08:11 +00:00
Joshua Vandaële
025ff87a27
Use minizip-ng's CMakeLists instead of relying on our own implementation
This is a carry over from back when we used `minizip` and had our own CMakeLists for it.
2025-11-27 00:18:31 +01:00
Jordan Woyak
63372b8dea
Merge pull request #14169 from JosJuice/i18n-2025-11-25
DolphinQt: Adjust capitalization of "Select A Bluetooth Device"
2025-11-25 16:47:48 -06:00
JosJuice
807488caf9
Merge pull request #14066 from Biendeo/master
IOS: Logitech USB Microphone Basic Support
2025-11-25 23:12:39 +01:00
JosJuice
ab0601b06a DolphinQt: Adjust capitalization of "Select A Bluetooth Device" 2025-11-25 21:17:35 +01:00
Jordan Woyak
44a766772f VideoCommon: Add a hidden setting to cap immediate XFB swaps to one per VI. 2025-11-25 00:15:32 -06:00
Biendeo
07324ca067
USB: Add emulated Logitech USB Microphone
Co-authored by: supermilkdude67 <w.f.s.jazzfyre@gmail.com>
2025-11-25 10:40:30 +11:00
Jason E. Hale
6b3d24b481
Fix build for non-Linux with Qt 6.10+
There was a LINUX check added in b3bdad4, but this should be removed as this change applies to all Qt supported platforms. Simply put, GuiPrivate CMake files were introduced in Qt 6.9 and are now enforced in Qt 6.10 and are not platform-dependent.
2025-11-24 06:53:51 -05:00
Jordan Woyak
e195d3bb6e
Merge pull request #14125 from JosJuice/local-cpu-thread-job-finished
Core: Make s_cpu_thread_job_finished a local variable
2025-11-23 15:55:28 -06:00
iwubcode
c97a947f67 VideoCommon: move resource state processing to the resource base class 2025-11-23 11:08:50 -06:00
iwubcode
5c00f07074 VideoCommon: update resource manager with a material/shader/and texture(+sampler) resource to show the complexities that warrant the resource manager system 2025-11-23 11:08:50 -06:00
iwubcode
23c637c029 VideoCommon: add custom includer to custom shaders, this will allow us to ship built-in custom shaders in the future 2025-11-23 11:04:51 -06:00
iwubcode
93a6cc80b4 VideoCommon: add some helper functions for resource logic that generates invalid textures for when a texture isn't provided for a custom asset 2025-11-23 11:04:24 -06:00
iwubcode
8016e2cfbd VideoCommon: move ApplyDriverBugs for the normal pipeline out into a utility function, add a way to hash the pipeline (using the vertex declaration instead of the native vertex format) 2025-11-23 11:04:24 -06:00
iwubcode
989ecca235 VideoCommon: add a texture pool for resource management 2025-11-23 11:04:24 -06:00
iwubcode
2d21a99205 VideoCommon: separate the concept of a 'resource' from an 'asset'. A resource is potentially multiple assets that are chained together but represent one type of data to the rest of the system. An example is a 'material'. A 'material' is a collection of textures, a custom shader, and some metadata that all comes together to form what the concept of the material is. There will be a 'material' resource. For now, start small by introducing the interface and change our texture loading which used assets from the old resource manager, to an actual resource. 2025-11-23 11:04:24 -06:00
iwubcode
59d9c1772a VideoCommon: rename 'IsAnisostropicEnhancementSafe' to 'IsAnisotropicEnhancementSafe' in TextureCacheBase 2025-11-23 11:04:24 -06:00
JosJuice
2d9f317f04 Core: Make s_cpu_thread_job_finished a local variable
Having it be static leads to a race condition if two different threads
call RunOnCPUThread with wait_for_completion set to true. (There's
currently nobody calling RunOnCPUThread from anything other than the
host thread, so this hasn't led to any consequences yet.)
2025-11-23 15:17:20 +01:00
JosJuice
aeac5f1a58
Merge pull request #14107 from jordan-woyak/mGBA-version-bump
Externals: Update mGBA to latest master.
2025-11-23 14:38:39 +01:00
JosJuice
5769fc7372
Merge pull request #14134 from jordan-woyak/mercusys-rtl-firmware
Bluetooth/RealtekFirmwareLoader: Add Mercusys MA530 to list.
2025-11-23 14:29:08 +01:00
JMC47
65f39c076e
Merge pull request #14149 from iwubcode/shader_asset_vector_properties
VideoCommon: update ShaderAsset to use a vector of properties
2025-11-23 06:34:45 -05:00
Jordan Woyak
e5ad814142 Core/DiscIO: Add a setting to load the running game into memory via CachedBlobReader. 2025-11-23 05:17:22 -06:00
Jordan Woyak
d7c3513eae DiscIO: Add CachedBlobReader which takes another BlobReader and reads it into memory in the background. 2025-11-23 05:17:22 -06:00
Jordan Woyak
fbb864a0b5 MemArena/LazyMemoryRegion: Add EnsureMemoryPagesWritable function to ensure a region of bytes is writable without the caller needing to be aware of the windows-only BLOCK_SIZE value. 2025-11-23 05:17:22 -06:00
Sintendo
a18cf5693e JitArm64: Remove some unused includes 2025-11-23 09:54:53 +01:00
Sintendo
419f90107d JitArm64_Integer: Merge subfx and subfcx
The optimizations for subfcx introduced in #13852 also apply to subfx.
Rather than duplicating the logic, we merge the handlers, like we did
in #10120 for x86.
2025-11-23 09:54:45 +01:00
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
Jordan Woyak
80da48f631 DolphinQt: Add "Poll Rate" display to GCAdapter config window. The window now refreshes every 500ms. SetAdapterCallback is no longer used. 2025-11-23 02:15:47 -06:00
Jordan Woyak
f9a5051bae GCAdapter: Calculate poll rate for display in UI. It's currently updated every 50 reads. 2025-11-23 02:06:39 -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
127e068e51 Common/Result: Swap order of template parameters to match C++26's std::expected, make all member functions constexpr, and add moving "unexpected" conversion constructor for consistency. 2025-11-21 19:24:48 -06:00
oltolm
58b3c14c23 AudioCommon / VideoBackends / WinUpdater - cleanup WRL code 2025-11-22 01:23:39 +01: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
iwubcode
2c646cec40 VideoCommon: update ShaderAsset to use a vector of properties, this way we ensure the order of these properties match the order of the material 2025-11-21 14:31:10 -06:00
iwubcode
1f083a60c9 VideoCommon: update ShaderAsset to remove requirement of the code name being in the shader source, this just makes it more difficult to iteratively test changes, assume shader devs know what they are doing 2025-11-21 14:29:24 -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
iwubcode
506e378289 VideoCommon: remove template parameter from lock guards in AsyncShaderCompiler, let type deduction do its thing and improve readability 2025-11-21 01:18:35 -06:00
iwubcode
75c66e35c6 VideoCommon: add method to async shader compiler to clear pending/completed work (used on shutdown), this will in turn clear up any resources that the worker items may have held onto 2025-11-21 01:17:45 -06:00
iwubcode
6e13a7d7e9 VideoCommon: fix MaterialAsset so that boolean parameters are written to memory as integers, matching the format internally expected by shaders 2025-11-20 23:51:34 -06:00
Jordan Woyak
4a89300929 CachedInterpreter: Replace reinterpret_cast with std::bit_cast to resolve -Wcast-function-type-mismatch warnings. 2025-11-20 15:31:23 -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
iwubcode
a4599a1add VideoCommon: avoid assuming global state exists for 'EndUtilityDrawing', use last stored viewport/scissor rect instead 2025-11-20 00:35:01 -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
Jordan Woyak
9f0a5c2a37 Core: Allow CPUManager::SetStepping to be called from the CPU thread so a call doesn't need to be routed through the host thread on boot. 2025-11-19 02:59:01 -06:00
Jordan Woyak
19f1d329c9 Core: Remove unused HostMessageID enum members. 2025-11-19 02:43:44 -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
Jordan Woyak
1514c0f256 Bluetooth/RealtekFirmwareLoader: Add Mercusys MA530 to list. 2025-11-17 19:31:59 -06: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
e00f39bb6d Memmap: Fix populating m_logical_page_mappings
This fixes a regression in ac84ea17a6. That commit was intended to
reduce the number of MapInMemoryRegion calls while otherwise keeping
behavior the same, but it accidentally messed up our logic for writing
to m_logical_page_mappings. This commit restores the old
m_logical_page_mappings behavior, fixing a crash that would occur when
running JitArm64 without fastmem.
2025-11-16 11:57:11 +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
JosJuice
1eea610375 Jit: Move addicx to ConstantPropagation
Note: Jit64 didn't support immediate handling for addic before.
2025-11-16 09:50:31 +01:00
JosJuice
a3797778ff Jit: Move srawix to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
1a22bda0a7 Jit: Move rlwinmx and rlwnmx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
4c8995fae5 Jit: Move negx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
92a5a46b2c Jit: Move cntlzwx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
b506cb2ad8 Jit: Move extsXx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
f04417eb5a Jit: Move addx to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
77b46c30ad Jit: Move boolX to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
3a6eea74dd Jit: Move addix to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
20332f441b Jit: Move reg_imm to ConstantPropagation 2025-11-16 09:50:31 +01:00
JosJuice
f9601dc38c Jit: Extract immediate handling to separate ConstantPropagation class
Restructuring things in this way brings two immediate benefits:

* Code is deduplicated between Jit64 and JitArm64.
* Materializing an immediate value in a register no longer results in us
  forgetting what the immediate value was.

As a more long-term benefit, this lets us also run constant propagation
as part of PPCAnalyst, which could let us do cool stuff in the future
like statically determining whether a conditional branch will be taken.
But I have nothing concrete planned for that right now.
2025-11-16 09:50:31 +01:00
JosJuice
e8060bd169 JitArm64: Add function for setting constant overflow 2025-11-16 09:50:30 +01:00
JosJuice
2dead5009b Jit64: Extract handling of immediate Rc 2025-11-16 09:50:30 +01:00
Jordan Woyak
9dea0859eb Common/BitField: Silence two warnings:
warning: definition of implicit copy constructor for 'BitField<2, 2, ColorChannel>' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy]
Redundant access specifier has the same accessibility as the previous access specifier.
2025-11-15 20:32:14 -06:00
Jordan Woyak
e630b0692e VideoCommon/FramebufferManager: Silence warning:
warning: virtual method '~FramebufferManager' is inside a 'final' class and can never be overridden [-Wunnecessary-virtual-specifier]
2025-11-15 20:32:10 -06:00
Jordan Woyak
a3b1445e04 HW/SI: Adjust logging verbosity in RunSIBuffer and minor cleanups. 2025-11-15 16:09:29 -06:00
Jordan Woyak
cd45dcea94 HW/SI: Fix CMD_STATUS response lengths. They are supposed to be 3, not 4. 2025-11-15 16:09:29 -06:00
JosJuice
999e13b3b3
Merge pull request #14109 from OatmealDome/analytics-deadlock
DolphinAnalytics: Only call ReloadConfig in config changed callback when analytics enabled value changes
2025-11-15 14:44:54 +01:00