Skip to content

Comments

Upstream update for Triforce support#408

Open
cscd98 wants to merge 400 commits intolibretro:masterfrom
cscd98:upstream-update-triforce
Open

Upstream update for Triforce support#408
cscd98 wants to merge 400 commits intolibretro:masterfrom
cscd98:upstream-update-triforce

Conversation

@cscd98
Copy link

@cscd98 cscd98 commented Feb 19, 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)

JoshuaVandaele and others added 30 commits January 9, 2026 23:49
Requires at least GCC 11, Clang 13, MSVC 19.30 (VS2022 17.0), or AppleClang 13.1.6 (XCode 13.3).
…gone

DolphinQt: Disable Liquid Glass on macOS when built with Xcode 26
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.
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.
Without this, every time we finalize a JIT block, we have to allocate
memory for a string and format the string.
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.
HotkeyManager: Don't allocate heap memory in GetInput
cpp-ipc: Fix builds on non-FreeBSD BSDs
…config

.editorconfig: Update CMake style
Jit64: Make OpArg and TrampolineInfo smaller
Revert "Externals: Update zlib-ng to v2.3.2"
Jit64: Return current value from RCOpArg::IsImm
Android: Use compilerOptions block to specify JVM version
Android: Switch to Theme.Material3.DynamicColors
Android: Add build output folders to gitignore
MenuBar: Add entries to open the config and cache folders
GameINI: Enable EFB Access for PES 2009-2013
LogitechMicWindow: Fix compilation when cubeb is disabled
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.)
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.
mingw: move ReadValue definitions into cpp to fix visibility
VideoCommon: Don't create mipmap vector in TextureInfo
jordan-woyak and others added 9 commits February 15, 2026 23:13
This lets users select Triforce Baseboard for SI and SP1. Limitations:

* The test, service and coin buttons can be bound to gamepads and other
  physical inputs, but aren't available in the touch input overlay.
* The IP redirections are exposed to the user as a raw string rather than
  a table like in DolphinQt.
…ard-cleaning

MagneticCardReader: Automatically insert a blank card when Command_A0_Clean is received.
@cscd98 cscd98 marked this pull request as draft February 19, 2026 22:46
@cscd98 cscd98 force-pushed the upstream-update-triforce branch 9 times, most recently from 4d32629 to 8314a17 Compare February 20, 2026 12:40
@cscd98 cscd98 marked this pull request as ready for review February 20, 2026 13:03
@cscd98 cscd98 force-pushed the upstream-update-triforce branch 7 times, most recently from 74ce4d3 to 7257da1 Compare February 20, 2026 17:37
@cscd98 cscd98 force-pushed the upstream-update-triforce branch from 7257da1 to 5954b91 Compare February 20, 2026 20:10
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.