Upstream update with triforce support#411
Merged
warmenhoven merged 440 commits intolibretro:masterfrom Feb 26, 2026
Merged
Conversation
…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.
…nups ARDecrypt: Code modernization.
VideoCommon: Defer creating TextureInfo
…e-fma-double JitArm64: Always use double precision for inaccurate FMA
Jit64: Add fres unit test
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.
This implements the equivalent of 07443e2 in Jit64 and JitArm64. Aims to fix https://bugs.dolphin-emu.org/issues/13865.
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
Core: Add SDL Hints settings
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
Externals: Update SDL to release-3.4.2
…t-defaults Android: Fix defaults for RetroAchievements settings
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See: https://dolphin-emu.org/blog/2026/02/16/rise-of-the-triforce/
Quick instructions:
You need a controller:
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)