Skip to content

Conversation

cscd98
Copy link

@cscd98 cscd98 commented Sep 5, 2025

Discussions are hidden under commits!! This happens when github comment is older than the commits which are re pushed occasionally for patches.

This is an attempt to rebase this on upstream dolphin. There is more than 10,000 commits since the last upstream merge so there is quite a lot of changes required to get this to work.

This PR is up to date with upstream as of Oct 4, 2025 (dolphin-emu#13871)

It boots up a selection of games that I've tried, runs pretty darn fast (except in debug mode).

Ubuntu was my main testing and development platform. Here is what has been tested:

Ubuntu:

  • Vulkan (recommended option)
  • OpenGL
  • Audio
  • Input (Keyboard and Xbox controller tested)

Windows 11:

  • D3D11
  • Audio
  • Input (Keyboard/Mouse)

Android

  • Now works. Vulkan + OpenGL tested.

macOS

iOS -iPhone/iPad

Not tested:

  • Real wii controller as I do not own one

New Features

  • Has 2 new options: Use async audio and Defer EFB Copies to RAM

Future TODO

  • D3D12 is in development, new feature so not needed for this PR

Cloning instructions

git clone [email protected]:cscd98/dolphin.git
git checkout merge-clean-new
cd dolphin
git -c submodule."Externals/Qt".update=none \
-c submodule."Externals/FFmpeg-bin".update=none \
-c submodule."Externals/libadrenotools".update=none \
submodule update --init --recursive \
&& git pull --recurse-submodules

Ubuntu 25.10 using GCC 15.2

mkdir build && cd build
cmake .. -DLIBRETRO=ON -DCMAKE_BUILD_TYPE=Release
make -j$(getconf _NPROCESSORS_ONLN)

Note: if using archlinux - uninstall old mbedtls and mbedtls2, then install mbedtls

Windows 10/11

cmake -B build/win64-msvc -DLIBRETRO=ON -DCMAKE_BUILD_TYPE=Release -G"Visual Studio 17 2022" -A x64
cmake --build . --target dolphin_libretro --config Release

Windows 10/11 using ming

cmake -B build/win64-ming -DLIBRETRO=ON -DCMAKE_BUILD_TYPE=Release -G Ninja
ninja

Cross compile from Ubuntu to Windows

export PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig
export PKG_CONFIG_PATH=/usr/x86_64-w64-mingw32/share/pkgconfig
cmake -B build/win64-ming -DLIBRETRO=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../toolchain-mingw64.cmake -G Ninja
ninja

Android

cmake -B build/android-arm64-v8a \
  -DLIBRETRO=ON \
  -DCMAKE_BUILD_TYPE=Release \
  -DANDROID_ABI=arm64-v8a \
  -DANDROID_PLATFORM=android-26 \
  -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake
cd build/android-arm64-v8a
make -j$(getconf _NPROCESSORS_ONLN)

Shameless plug: If you want to thank or continue support for this please consider a small donation.. https://github.com/sponsors/cscd98

JosJuice and others added 30 commits August 1, 2025 19:18
When 9d9b6d8 changed our target SDK version to Android 16, it made
Android 16 stop calling onBackPressed and stop delivering KEYCODE_BACK
events. Dolphin's code isn't ready for that yet.

Android lets us opt out of this new behavior for now, so let's do so.
But the opt-out will presumably stop working once we start targeting
Android 17, so we're going to have to update Dolphin's code within the
next one or two years to support the replacement API.
…tomic-interrupt

HW/EXI_DeviceEthernet: Make interrupt state atomic.
…vements-pause-override

Android: Don't let RetroAchievements override onPause
DolphinQt: Always enable the "Skip Main Menu" checkbox when "SkipIPL" is disabled.
…styles

DolphinQt: Fix Windows dark theme when using external stylesheets.
Keep the BalloonTip open when the BalloonTip's arrow prevents the cursor
from being inside the spawning ToolTipWidget, which triggers the
ToolTipWidget's leaveEvent and would previously close the BalloonTip.

When that happens track the cursor until it either leaves the
ToolTipWidget's bounding box or leaves the BalloonTip and goes back to
the ToolTipWidget, and respectively close the BalloonTip or leave it
open.
…xpand_fix

VideoCommon: fix regression in vertexshadergen for line/point expansion
…r-nearest

VideoCommon: Fix "Force Nearest" texture filter setting.
…-hax

ControllerEmu: Remove nunchuk stick data hax.
Invalidate icache only if target address has a different value. Take separate arguements,
instead of a struct, to allow easier usage elsewhere. Overload with u8,
u16 and u32 values for the same reason.
Compared to the former, the latter invalidates the icache, which is
something that is likely desired for patches (especially if they are
applied while the game is running).
PRs dolphin-emu#13786 and
dolphin-emu#13797 had incompatible
changes that resulted in the build being broken when they were both
merged.
…fix_build_breakage_from_conflicting_prs

MemoryWidget: Fix build breakage from conflicting PRs
…games_not_being_displayed

Game List: Fix games not being displayed
Remove Host_UpdateMainFrame(). The only non-empty call happened in
DolphinNoGUI which called s_update_main_frame_event.Set(), but
DolphinNoGUI never waits on that event.
Remove Host_RefreshDSPDebuggerWindow (which hasn't done anything since
DolphinWX was removed in 44b22c9) and DSP::Host::UpdateDebugger (which
only called Host_RefreshDSPDebuggerWindow).
Host_RequestFullscreen and Host_UpdateMainFrame have been removed, and
Host_RequestRenderWindowSize has been used by DolphinQt since 8069909
and by Android since e873915.
In certain cases, the platform can be "wayland-egl", "wayland-xcomposite", and other values for which I haven't found a full list yet. Instead of matching only "wayland", we now look for "wayland" anywhere in the `QT_QPA_PLATFORM` string in a case-insensitive manner.

Acknowledgements:
`CaseInsensitiveContains`' implementation was heavily inspired by GNU's non-standard glibc `strcasestr` function, which can be found here licensed under GPLv2 or later: https://ftp.gnu.org/gnu/libc/
…nnecessary_functions

Host: Remove unnecessary functions
…re-loader

BTReal: Implement Realtek firmware loading.
…ric, and use it for a new "More Options..." selection in Bluetooth Passthrough adapters
Config: Change default value for Dual Core from enabled to disabled
…eam-drop-samples

AudioCommon/Mixer: Skip sample processing when NullSoundStream is being used.
…nt-looping

Fade audio after an entire loop
This case can be handled as a move. It also generates a constant carry
flag.

Before:
0x52800013   mov    w19, #0x0                 ; =0
0x6b1302b3   subs   w19, w21, w19

After:
0x2a1503f3   mov    w19, w21
@jeapostrophe
Copy link

Thank you @cscd98; great work! I've tested on Windows and it runs great for me.

@cscd98 cscd98 force-pushed the merge-clean-new branch 6 times, most recently from bff3250 to fa2e9a0 Compare October 5, 2025 14:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.