Commit Graph

33674 Commits

Author SHA1 Message Date
Scott Mansell
09fbe2a930
Merge pull request #14729 from JoshuaVandaele/fix-clang-libstdcpp
PerformanceMetrics: Fix compiling using clang&libstdc++
2026-07-14 20:24:24 +12:00
Dentomologist
cdaf67c6ce
Merge pull request #14643 from Dentomologist/windows_git_bash_fix_command_line_output
Windows: Fix command line output not displaying when using Git Bash
2026-07-12 23:47:20 -07:00
OatmealDome
990b421233
Merge pull request #14728 from Simonx22/android/api37-ndk30-dependency-updates
Android: Update dependencies and build tools
2026-07-13 01:00:52 -04:00
Joshua Vandaële
55761d9e6d
PerformanceMetrics: Fix compiling using clang&libstdc++
When using clang and libstdc++, compiling fails with these errors:

```
FAILED: [code=1] Source/Core/VideoCommon/CMakeFiles/videocommon.dir/PerformanceMetrics.cpp.o
/usr/sbin/ccache /usr/sbin/clang++ -DAUTOUPDATE=1 -DDATA_DIR=\"/usr/local/share/dolphin-emu/\" -DHAS_OPENGL -DHAS_VULKAN -DHAVE_CPPIPC -DHAVE_LIBSYSTEMD -DIMGUI_USER_CONFIG=\"imgui_user_config.h\" -DLZMA_API_STATIC -DOFF -DPUGIXML_NO_EXCEPTIONS -DRC_CLIENT_SUPPORTS_HASH -DSFML_STATIC -DSPNG_STATIC -DTINYGLTF_NOEXCEPTION -DTINYGLTF_NO_EXTERNAL_IMAGE -DTINYGLTF_USE_CPP14 -DUSE_ANALYTICS=1 -DUSE_MEMORYWATCHER=1 -DUSE_PIPES=1 -DUSE_RETRO_ACHIEVEMENTS -DZSTD_MULTITHREAD -D_ARCH_64=1 -D_DEFAULT_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_M_X86_64=1 -D__LIBUSB__ -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -I/dolphin-local/Source/Core -I/dolphin-local/Externals/picojson -I/dolphin-local/build/release/x64/Source/Core -I/dolphin-local/Externals/enet/enet/include -I/dolphin-local/Externals/fmt/fmt/include -I/dolphin-local/Externals/mbedtls/include -I/dolphin-local/Externals/minizip-ng/minizip-ng -I/dolphin-local/Externals/liblzma/api -I/dolphin-local/Externals/zstd/zstd/build/cmake/../../lib -I/dolphin-local/Externals/libiconv/include -I/dolphin-local/build/release/x64/Externals/libiconv/lib -I/dolphin-local/Externals/libiconv/libcharset/include -I/dolphin-local/build/release/x64/Externals/libiconv/libcharset -I/dolphin-local/Externals/SFML/SFML/include -I/dolphin-local/Externals/bzip2/bzip2 -I/dolphin-local/Externals/expr/include -I/dolphin-local/Externals/hidapi/hidapi-src/hidapi -I/dolphin-local/Externals/pugixml/pugixml/src -I/dolphin-local/Externals/glslang/glslang/glslang/.. -I/dolphin-local/build/release/x64/include -I/dolphin-local/Externals/rcheevos -I/dolphin-local/Externals/libspng/libspng/spng -I/dolphin-local/Externals/xxhash/xxHash -I/dolphin-local/Externals/imgui -I/dolphin-local/Externals/imgui/imgui -I/dolphin-local/Externals/implot/implot -I/dolphin-local/Externals/glslang/glslang/SPIRV/.. -I/dolphin-local/Externals/tinygltf -isystem /dolphin-local/Externals/libusb/libusb/libusb -isystem /dolphin-local/Externals/glslang/glslang -isystem /dolphin-local/Externals/glslang/glslang/Public -isystem /dolphin-local/Externals/glslang -Qunused-arguments -fcolor-diagnostics -O3 -DNDEBUG -std=c++23 -msse2 -fdiagnostics-color -fno-strict-aliasing -fno-exceptions -fvisibility-inlines-hidden -fvisibility=hidden -fomit-frame-pointer -Wall -Wtype-limits -Wsign-compare -Wignored-qualifiers -Wuninitialized -Wshadow -Wshadow-field-in-constructor -Winit-self -Wmissing-declarations-Wmissing-variable-declarations -Werror=format -Wno-trigraphs -MD -MT Source/Core/VideoCommon/CMakeFiles/videocommon.dir/PerformanceMetrics.cpp.o -MF Source/Core/VideoCommon/CMakeFiles/videocommon.dir/PerformanceMetrics.cpp.o.d -o Source/Core/VideoCommon/CMakeFiles/videocommon.dir/PerformanceMetrics.cpp.o -c /dolphin-local/Source/Core/VideoCommon/PerformanceMetrics.cpp
In file included from /dolphin-local/Source/Core/VideoCommon/PerformanceMetrics.cpp:4:
/dolphin-local/Source/Core/VideoCommon/PerformanceMetrics.h:69:51: error: no matching constructor for initialization of 'std::atomic<FrameBufferSize>'
   69 |   std::atomic<FrameBufferSize> m_frame_buffer_size{};
      |                                                   ^~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/16/../../../../include/c++/16/atomic:237:17: note: candidate constructor not viable: constraints not satisfied
  237 |       constexpr atomic() noexcept(is_nothrow_default_constructible_v<_Tp>)
      |                 ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/16/../../../../include/c++/16/atomic:238:11: note: because 'is_default_constructible_v<PerformanceMetrics::FrameBufferSize>' evaluated to false
  238 |         requires is_default_constructible_v<_Tp>
      |                  ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/16/../../../../include/c++/16/atomic:246:7: note: candidate constructor not viable: requires 1 argument, but 0 were provided
  246 |       atomic(const atomic&) = delete;
      |       ^      ~~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/16/../../../../include/c++/16/atomic:252:17: note: candidate constructor not viable: requires single argument '__i', but no arguments were provided
  252 |       constexpr atomic(_Tp __i) noexcept : _M_i(__i)
      |                 ^      ~~~~~~~
1 error generated.
```

This was tested and occurs on both Arch and Alpine Linux.
2026-07-13 02:26:49 +02:00
Simonx22
aeb3fec03a Android: Update dependencies and build tools
Update Android dependencies and build tools to their latest available versions.

Rename the GameCube save magic constant to avoid a collision with the NDK 30 ARM64 signal context header.
2026-07-12 10:17:39 -04:00
cristian64
594e5d2b56 DolphinQt: Update tool tip for Enable Emulated Memory Size Override. 2026-07-11 23:02:54 +01:00
cristian64
0cab1731d6 Core: Adjust emulated memory size automatically.
Dolphin now uses the simulated memory size defined in `bi2.bin` to
adjust the memory size in the emulated console automatically.

If **Enable Emulated Memory Size Override** has been enabled by the
user, the fixed memory size specified for **MEM1** and **MEM2** are
still used as they were before.

Most retail games do not define the simulated memory size (Wii or
Triforce games), or define it to a value that matches the default 24 MiB
(GameCube games), so, in the general case, there is no behavior change.
One game that sets the simulated memory to a non-default value is the
debug build of _Mario Kart: Double Dash!!_, where the value is set to
48 MiB.

This enhancement is focused mainly to the modding community. Prior to
these changes, modded games with extended memory requirements would
fail to launch in Dolphin [with no indication of what the problem is] if
the user failed to set the emulated memory override to the correct
value. Now, modding tools can specify the simulated memory size in the
`bi2.bin` file to produce extended games that _just work_ in Dolphin,
without cumbersome instructions that can be overlooked by the user.
2026-07-11 23:02:54 +01:00
cristian64
03b1f2148b DolphinAnalytics: Add game quirk for game simulated memory size.
This is the 32-bit unsigned integer that is seen at offset `0x04` in the
`bi2.bin` file.

The intent is to study what games define values that departure from the
norm. Common values are 0 MiB (Wii games) and 24 MiB (GameCube games),
with some debug and demo builds featuring 48 MiB (e.g. the debug build
of _Mario Kart: Double Dash!!_).
2026-07-11 23:02:54 +01:00
cristian64
ebcbb79f70 Core: Add SConfig::GetSimulatedMemorySize().
This makes the simulated memory size of the running game accessible via
the `SConfig` singleton.
2026-07-11 23:02:54 +01:00
cristian64
24ad562871 Core: Add Volume::GetSimulatedMemorySize().
The data structure of the `bi2.bin` file in which the simulated memory
size is set:

> **13.2  Disk header Information**
>
> this is loaded to the Address in `0x800000f4` when a disc is initialized by the IPL
>
> |  offset  | end | size | Description           |
> | :------: | --- | :--: | --------------------- |
> | `0x0000` |     |   4  | Debug-monitor Size    |
> | `0x0004` |     |   4  | Simulated Memory Size |
> | `0x0008` |     |   4  | Argument offset       |
> | `0x000c` |     |   4  | Debug flag            |
> | `0x0010` |     |   4  | Track Location        |
> | `0x0014` |     |   4  | Track size            |
> | `0x0018` |     |   4  | Countrycode           |
> | `0x001c` |     |   4  | ?                     |

See https://hitmen.c02.at/files/yagcd/yagcd/chap13.html#sec13.2.

Most GameCube games set the value to `24 MiB`, which matches the
physical memory size. Most Wii games set the value to `0 MiB` (unset).
The debug build of _Mario Kart: Double Dash!!_ is one game that sets the
value to `48 MiB`.
2026-07-11 23:02:54 +01:00
Martino Fontana
a5f6ba81fa GameSettings: Approve speed hacks for RetroAchievements
Some of the speed hacks were not approved for RetroAchievements, meaning that users had to choose between not getting hardcore achievements, or having poor performance.

Also, renamed the instances of `$Limit internal FPS to VPS (improves performance)` to `$Limit internal frame rate (speed hack)` for consistency. They are enabled by default, so unless the user disabled them, it won't break the configuration.
2026-07-08 18:10:42 +02:00
Craig Carnell
e222665eb0 mingw: lower case windows includes 2026-07-08 09:18:29 +01:00
Dentomologist
774200dcf4
Merge pull request #14689 from JosJuice/android-internal-resolution-display
VideoCommon: Use XFB for internal resolution stats
2026-07-05 13:28:31 -07:00
JosJuice
acf6060a54
Merge pull request #14417 from TryTwo/Cheat_Fix
Bugfix: Cheat codes:  Make newly added codes start disabled.
2026-07-05 17:45:27 +02:00
JosJuice
59d7547c2c
Merge pull request #13216 from CelestialAmber/cw-demangler
Core: Implement automatic symbol demangling
2026-07-05 17:38:09 +02:00
JosJuice
2dfb23267c
Merge pull request #14619 from JosJuice/no-si-change-device
Core: Remove SerialInterfaceManager::ChangeDevice
2026-07-05 17:33:02 +02:00
JosJuice
0ce4436cd8
Merge pull request #14678 from JoshuaVandaele/alt-tools
MenuBar: Add missing Alt shortcuts in Tools
2026-07-05 17:31:17 +02:00
JosJuice
146f2be436
Merge pull request #14516 from Sintendo/jitarm64-subfzex
JitArm64: Minor subfzex optimizations
2026-07-05 17:29:57 +02:00
JosJuice
60c7606812
Merge pull request #14707 from SuperSamus/jit64-computerc-better-early-flush
Jit64: Early flush in ComputeRC even when `needs_test`
2026-07-05 17:00:03 +02:00
JosJuice
be1df92153 Rename "Show Internal Resolution" to "Show XFB Resolution"
To make it extra clear that this is measuring the XFB, not the EFB.
2026-07-05 10:20:15 +02:00
JosJuice
aff4d18d59 Move the code for the show internal resolution setting
fb4ff3e put all the code for the show internal resolution setting right
next to the code for the show FPS setting, presumably because an earlier
version of that commit had them next to each other in the GUI. It makes
more conceptual sense to put the code next to the code for the show
statistics settings, matching what the GUI looks like now.
2026-07-05 09:50:13 +02:00
JosJuice
6f72de3579 VideoCommon: Show internal resolution stats below VPS
It looked a bit out of place wedged in between the FPS and VPS.
2026-07-05 09:50:13 +02:00
JosJuice
c958dbc46c VideoCommon: Use XFB for internal resolution stats
fb4ff3e added a statistics option to show the internal resolution, but
it just showed the total size of the EFB (which is always 640x528) times
the IR scale, so it didn't convey any useful information.

This commit instead makes the option use the size of the last XFB copy
(not multiplied by the IR scale), which changes based on the game's
rendering resolution.
2026-07-05 09:50:13 +02:00
JosJuice
5f372d6b1d VideoCommon: Reduce padding in PresentInfo
This makes the struct 8 bytes smaller.
2026-07-05 09:50:13 +02:00
Dentomologist
1a62cdca0e Windows: Fix command line output not displaying when using Git Bash
Check if Dolphin already has a handle for stdout or stderr before trying
to attach to the console of the parent process.

Previously, running Dolphin via Git Bash with options like `--help` or
`--version` wouldn't produce any output. This was the result of the fix
(1ce75ce217) for
https://bugs.dolphin-emu.org/issues/11042, before which output did work
for `Git Bash` but didn't for `Command Prompt` or `PowerShell`.
2026-07-03 21:55:23 -07:00
Dentomologist
d8d37fdbc4
Merge pull request #14699 from JosJuice/android-vibrator-id-index
Android: Fix mixup between Vibrator id and index
2026-07-01 13:07:25 -07:00
Admiral H. Curtiss
32cd349207
Merge pull request #14708 from JosJuice/state-path-encoding
State: Use proper path encoding conversion for OSD messages
2026-06-29 22:15:49 +02:00
JMC47
e2ab15aa23
Merge pull request #14647 from tom-pratt/netplay
Android netplay
2026-06-28 12:38:55 -04:00
Admiral H. Curtiss
be33a68335
Merge pull request #14658 from VampireFlower/patch-instruction-assemble
[Debugger]: Assemble instructions in the patch instruction dialog
2026-06-28 16:31:46 +02:00
JosJuice
2aba483a05 State: Use proper path encoding conversion for OSD messages
Otherwise Windows will use the system code page.
2026-06-28 15:18:31 +02:00
Martino Fontana
e68a464efd Jit64: Early flush in ComputeRC even when needs_test
Example:
```
nand. r1, r2, r3
```
Assuming that none of these registers will be used again:
- Before #14278, all of them would be flushed on both sides of the branch.
- After #14278, r2 and r3 would have been flushed earlier, but r1 won't.
- With this, r1 is flushed in ComputeRC.
2026-06-28 14:45:20 +02:00
JosJuice
8038496a07
Merge pull request #14589 from Dentomologist/merge_tooltips_for_disabled_settings_into_balloontips
HacksWidget: Merge tooltips for disabled settings into balloontips
2026-06-28 12:10:54 +02:00
JosJuice
37d6f29e06
Merge pull request #14615 from Dentomologist/code_widgets_allow_mass_enabled_toggling
ARCodeWidget/GeckoCodeWidget: Add button to enable/disable all codes
2026-06-28 11:45:05 +02:00
JosJuice
afdee595f6
Merge pull request #14198 from JosJuice/jit64-cmpxx-rb-comparand
Jit64: Improve cmpXX imm handling
2026-06-28 11:14:47 +02:00
JosJuice
9416eb9537
Merge pull request #14599 from naari3/fix/directoryblob-gc-triforce-alignment
DirectoryBlob: fix data alignment for GC/Triforce and skip Triforce DIMM memory range
2026-06-28 11:03:03 +02:00
JosJuice
02bacff51f
Merge pull request #14278 from JosJuice/ppcanalyst-split-read-write
PPCAnalyst: Split "in use" analysis into reads and writes
2026-06-28 10:58:11 +02:00
JosJuice
200e26c98a Core: Remove SerialInterfaceManager::ChangeDevice
Now SerialInterfaceManager::UpdateDevices reads the configured SI
devices directly from Config instead.

The main reason why I wanted to do this is so that Android can change SI
devices while emulation is running. (Android didn't have the code for
calling ChangeDevice.) But when implementing the change, I noticed that
NetPlay and Movie were using ChangeDevice as a way of overriding the SI
devices configured by the user. Replacing this ended up making the change
larger than I first anticipated.

For Wii Remotes, there was no equivalent to ChangeDevice, so NetPlay and
Movie were using Config::SetCurrent to override the Wii Remote source
configured by the user. If we can use the config system to override Wii
Remote sources, why not do the same for SI devices? This commit makes
NetPlay and Movie set SI devices and Wii Remote sources in the NetPlay
and Movie config layers, as that is the conceptually appropriate place
to do it.

As far as I can tell, the old Movie code for overriding SI devices and
Wii Remote sources didn't actually work. This new code does. I didn't
investigate exactly why it didn't work, but maybe it's because loading
a movie happens before emulation actually starts.
2026-06-28 10:43:31 +02:00
JosJuice
6d796f7863
Merge pull request #14646 from linkmauve/pi-regs
HW/ProcessorInterface: Add support for all known registers
2026-06-28 10:36:43 +02:00
JosJuice
321f878bb6
Merge pull request #14676 from SuperSamus/jit-dcbx-fixup
JitArm64: Fix uninitialized use of register in dcbx
2026-06-28 10:29:54 +02:00
JosJuice
63121d11fc
Merge pull request #14683 from SuperSamus/idle-loop-nop-fix
PPCAnalyst: In `IsBusyWaitLoop`, ignore `nop`
2026-06-28 10:28:52 +02:00
JosJuice
c23b4f4f3a
Merge pull request #14626 from ChaseParate/approve-xenoblade-chronicles-60-fps-gecko-code
Gecko/RetroAchievements: Approve Xenoblade Chronicles 60 FPS Gecko code
2026-06-28 10:28:15 +02:00
JosJuice
64a73e5636 Android: Fix mixup between Vibrator id and index
This fixes https://bugs.dolphin-emu.org/issues/14076. The issue report
more or less already says it all, but to provide a shorter summary:
We were fetching a list of vibrator IDs, but instead of passing the
vibrator ID to the vibrator manager, we passed the index of the ID in
the list. This happened to work fine on many devices, including all
devices that use DolphinVibratorManagerCompat, due to the only Vibrator
having both an index and ID of 0. But on some devices, it failed due to
the ID of the Vibrator being 1.

This fix makes us correctly pass the ID to the vibrator manager. We
still use indices in controller INI files, both for compatibility with
the controller mappings shipped with Dolphin (which use index 0) and for
backwards compatibility with older controller INI files.
2026-06-26 22:10:16 +02:00
Admiral H. Curtiss
d0f9446a8c
Merge pull request #14663 from AdmiralCurtiss/qt6.8.3
Update bundled Windows Qt to 6.8.3
2026-06-26 20:56:43 +02:00
Admiral H. Curtiss
e87225beb2
Update bundled Windows Qt to 6.8.3 2026-06-26 19:22:16 +02:00
Admiral H. Curtiss
14ee972235
Merge pull request #14684 from Sintendo/rm-unused-headers
Remove unused headers
2026-06-26 19:09:39 +02:00
Link Mauve
82a317124a HW/ProcessorInterface: Add support for all known registers
These changes originate from testing the behaviour of the PI registers
in Linux on my Wii.

I started by testing the masks, writing 0xFFFF_FFFF to the registers on
the Wii, and then got told about their value on a GameCube, and then
figured out most of the registers through a discussion with Extrems.
2026-06-26 01:32:15 +02:00
Dentomologist
baf91d4436
Merge pull request #14591 from TryTwo/Registers_Fix
Debugger: Register Widget bug fix. Block updates when changing types
2026-06-25 13:17:29 -07:00
OatmealDome
2f1c14cdc7
Merge pull request #14687 from JoshuaVandaele/realtek-linux-list
RealtekFirmwareLoader: Update list from Linux source
2026-06-24 18:32:43 -04:00
Joshua Vandaële
d52afbf83b
TAPServerConnection: Fix builds with LLVM toolchain
On an Alpine system using a full LLVM toolchain, building fails because `fd_set`/`timeval` are undefined.
2026-06-24 20:17:35 +02:00
Joshua Vandaële
d170a27cc6
ICCardReader: Fix macro collision
On Alpine Linux, Dolphin fails to build due to PAGE_SIZE being already defined somewhere in the system includes.
2026-06-23 22:48:35 +02:00