Skip to content

Conversation

cscd98
Copy link

@cscd98 cscd98 commented Sep 5, 2025

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

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 Sep 9, 2025.

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:

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

Windows 11:

  • D3D11
  • Audio
  • Input (Keyboard/Mouse)

Android

  • Compiled but just crashes on loading core. Still looking into it.

Mac/ipad/iphone

  • I do not own a device to compile this with unfortunately..

TODO:

  • Real wii controller? I don't own one
  • 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
make -j$(getconf _NPROCESSORS_ONLN)

Windows 11

mkdir build && cd build
cmake .. -DLIBRETRO=ON -G"Visual Studio 17 2022" -A x64
cmake --build . --target dolphin_libretro

JMC47 and others added 30 commits June 24, 2025 18:59
This is particularly useful for people who stream their desktop and don't want to accidentally leak their IP or room.
…bolDB, as it will be needing a mutex.

Cleanup loading code and reduce amount of signals.

On boot. allow previously loaded map to be kept, if its filename matches. Useful for restarting a game with a large symbol map.
…y two different threads on boot.

On boot should be the only time this happens.
When selecting cars, this game crashes with GFX FIFO: Unknown Opcode. This is solved by disabling Dual Core, as the error message suggests.

There is no information about this on the Wiki, just a link to a gameplay on YouTube.

This is my first PR here and one of the first ones on GitHub. Due to personal issues I don't have much free time to dedicate to this, but I'm doing my best to get everything right.
Remove the redundant s_populate_mutex and only use
ControllerInterface::m_devices_population_mutex instead to prevent a
deadlock caused by locking them in opposite orders.

The device population functions in the win32 InputBackend previously
locked s_populate_mutex first before calling various functions that
locked m_devices_population_mutex. This normally worked but
ControllerInterface::RefreshDevices locks m_devices_population_mutex
first and then calls HandleWindowChange which then locked
s_populate_mutex, potentially causing the deadlock.

Fix this by using PlatformPopulateDevices to lock
m_devices_population_mutex before running the code that was previously
protected by s_populate_mutex. The functions in question lock
m_devices_population_mutex anyway, so this shouldn't meaningfully
increase contention on the lock.

Reproduction steps:

* Let Dolphin finish startup.
* In Win32.cpp::OnDevicesChanged set a breakpoint on the call to
  PlatformPopulateDevices. When the breakpoint is triggered the function
  will have locked s_populate_mutex, but since PlatformPopulateDevices
  won't have run yet m_devices_population_mutex will still be unlocked.
* Unplug a device from your computer.
* Wait for the breakpoint to trigger. (At this point you can plug the
  device back in).
* Freeze the ntdll.dll!TppWorkerThread() that triggered the breakpoint.
* Resume Dolphin and start a game.
* Core::EmuThread will call ControllerInterface::ChangeWindow which
  calls RefreshDevices. It locks m_devices_population_mutex, then calls
  InputBackend::HandleWindowChange, which tries to lock
  s_populate_mutex.
* Unfreeze ntdll.dll!TppWorkerThread().

At this point EmuThread and TppWorkerThread are deadlocked. The UI is
still responsive since the Host thread is unaffected, but trying to stop
the game or close Dolphin normally will fail since EmuThread is unable
to stop.
…ction

BTReal: bugfix - BT passthrough uses selected device rather than first compatible device in list
Separate LibUSB logic into LibUSBBluetoothAdapter class.
Submit transfers on thread with proper timing.
Throttle before ACL input for reduced input latency.
Immediately send IPC replies for outgoing data.
Continuously submit libusb transfers to fill HCI/ACL input queues.
Simplify endpoint handling and state saving.
Other cleanups.
…ctions for improved performance with certain adapters.
…commands from LIBUSB_RECIPIENT_INTERFACE to LIBUSB_RECIPIENT_DEVICE.

This changes the value from 0x21 to 0x20 which now matches the value that Wii software generates.
…r size. WARN_LOG if the size is smaller than that of the original BT module.
PPCSymbols: Restructure loading on boot and add a mutex to prevent crashes.
…ments

Bluetooth Passthrough Improvements
Fix validation failing when the user has checked the Hex box and also
includes a "0x" or "-0x" prefix in their input.

Previously an extra "0x" would be inserted, causing the user's input of
"0x13" to become "0x0x13" which would then fail to validate.
Fix the input string failing to validate when the "Hex Byte
String" input type is selected and either the user adds a 0x prefix or
the "Hex" box is checked (or both).

The latter failure was particularly troublesome because when "Hex Byte
String" is selected the "Hex" checkbox is disabled. Users would have to
switch to a data type that enabled the box, toggle it, then switch back
to "Hex Byte String" to fix it.

Fix these errors by not adding a prefix when the "Hex" box is checked,
and removing the "0x" prefix from the user's input if present.
…ig-window-adjust-size

DolphinQt: Adjust PostProcessingConfigWindow size on creation.
TryTwo and others added 27 commits September 12, 2025 12:44
…, support multi-pass, and textures are now split out (as well as supporting a way to calculate sampler origin)
Sync with 20250826093514
Since Grid View doesn't have a header for users to change sorting
options with, use List View's sorting in Grid View too.
…mp_greater and fix a floating point edge case.

Thanks to Dentomologist for catching the edge case.
GetTicksPerHalfLine() gets called via Preset() before RefreshConfig()
has a chance to replace the dummy value 0.0.

Thank you, UB-san.
I'm not aware of any issue here but let's set meaningful defaults
anyway.
We don't want list initialization here.

Thank you, UB-san.
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.