Skip to content

Upstream update with triforce support#411

Merged
warmenhoven merged 440 commits intolibretro:masterfrom
cscd98:upstream-triforce
Feb 26, 2026
Merged

Upstream update with triforce support#411
warmenhoven merged 440 commits intolibretro:masterfrom
cscd98:upstream-triforce

Conversation

@cscd98
Copy link

@cscd98 cscd98 commented Feb 26, 2026

See: https://dolphin-emu.org/blog/2026/02/16/rise-of-the-triforce/

Quick instructions:

put segaboot.gcm in .config/retroarch/saves/dolphin-emu/User/Triforce
(or wherever your version of RetroArch expects its saves)

You need a controller:

L is mapped to TEST (needed to bypass camera failure)
Select is mapped to insert COIN
L thumbstick click + R thumbstick click mapped to SERVICE (untested)

Rest of PR - briefly tested on Linux, Android, Windows (MSVC) and Windows (MINGW)

Also removes the frame skipping I introduced due to crashing vulkan with fast forwarding as no longer crashes (it still has my workaround for out of bounds arrays in)

JMC47 and others added 30 commits January 17, 2026 18:23
…ditional-mousebuttons

DInputKeyboardMouse: Always report all possible buttons
…enabled

JitRegister: Check IsEnabled before constructing string
Fix various typos and spelling mistakes
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
be81fe8.
c++23: Replace Common::Unreachable with std::unreachable
Common: Replace Result with std::expected.
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.
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.
…e-fma-double

JitArm64: Always use double precision for inaccurate FMA
This doesn't affect any existing callers, because all existing callers
use quad registers.
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.
Should be a little faster by avoiding false dependencies. Note that
there is one remaining MOVSD that really needs to be a MOVSD.
This will be used in the next commit to skip running code that's
unnecessary when the result is NaN.
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.
…emove_redundant_open_file_check

JitRegister: Remove redundant check for open file
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.
Use IOFile's bool operator to check that it's not just open but good.
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`)
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.
…ix_isenabled_when_using_vtune_without_perf

JitRegister: Fix IsEnabled when using VTune without perf
…s-header

VideoCommon: Move TextureInfo getters to header
…l enhancements which use the game id to load
JMC47 and others added 29 commits February 20, 2026 02:44
The logic in the code was deliberately avoiding index `2` (**Selected
Font**; the debug font) by using `std::min(index, 1)`. Presumably, the
reason was that there was no debugger in Qt version of Dolphin at the
time.

Test plan:

- Select a debug font via the **Options > Font...** action.
- Show the **Log** tab via the **View > Log** action.
- In the **Log** tab, choose the **Selected Font** item in the combobox.
- Restart Dolphin.

**Without** the patch, the **Monospaced Font** item is wrongly selected
in the combobox.

**With** the patch, the **Selected Font** item is now properly restored
from the saved settings, and the selected debug font is correctly used
in the log messages.
…_current_index

DolphinQt: Restore log font current index accurately.
AMMediaboard: Add more log messages
AMMediaboard: Add more connect log messages
AMMediaboard: Replace bind PanicAlert with OSD message
…_update_tabs_on_creation

CheatsManager: Update code tabs on creation
Set suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.

Apply suggestion from @jordan-woyak

Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
Set suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.
Ensure the 3rd track is written even if the 2nd track isn't.
Moved GetHexDump helper function to StringUtil.
mingw: replace static_cast with reinterpret_cast as not permitted between void* and function params
mingw: use reinterpret_cast for function→void* conversion to satisfy C++ standard
GameINI: Formatting updates to Super Mario Galaxy & New Super Mario B…
GameINI: Formatting updates to The Legend of Zelda Skyward Sword
Notable changes:
- CMake
  - Fixed a bug where SDL couldn't use a vendored libusb or libhidapi (see 29b3fcf)
- Fixed long startup times on Windows when some non-compliant input devices are present
- Controller support
  - Added support for the Razer Raiju V5 Pro
  - Improved Switch 2 controller support
  - Improved NVIDIA SHIELD controller support
  - Fixed various controllers showing up twice on macOS
  - Fixed handling GameCube adapters in PC mode on Linux and macOS
GameSettings: Update Rogue Squadron II and III
Metal Arms and PoP Two Thrones aspect ratio setting fix
Default values for settings need to be the same in Kotlin and C++,
otherwise settings that haven't been changed by the user will be shown
as having one value in the Android GUI but treated as having a different
value in the core.
MagneticCardReader: Minor fixup to writing card data.
GameINI: Formatting updates to Sonic Mega Collection
…t-defaults

Android: Fix defaults for RetroAchievements settings
@warmenhoven warmenhoven merged commit 1802842 into libretro:master Feb 26, 2026
6 checks passed
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.