300 Commits
Author SHA1 Message Date
Jordan Woyak 5abf0e3556 Merge pull request #14566 from jordan-woyak/mixer-wav-dump-fix
Mixer: Fix WAV file dumping.
2026-04-06 15:57:17 -05:00
Jordan Woyak f8fead401c Mixer: Fix WAV file dumping. 2026-04-06 15:05:48 -05:00
Jordan Woyak edcc46c123 Merge pull request #14559 from JosJuice/remove-presets
DolphinQt: Remove Presets from GameConfigEdit
2026-04-06 12:13:26 -05:00
JosJuice 5fcdb6f8f9 DolphinQt: Hide buttons for read-only game config
The Open in External Editor button makes editing a game INI file easy,
and the Refresh button is only useful if you edit the game INI. You're
not supposed to edit read-only game INIs, so let's not show these two
buttons for read-only game INIs.

I implemented this by hiding the buttons instead of not creating them in
the first place so we don't have to branch on whether the buttons exist
in GameConfigEdit::ConnectWidgets.
2026-04-06 18:02:24 +02:00
JosJuice 7e98245ca4 DolphinQt: Remove Presets from GameConfigEdit
Back in 2018, a Presets system was added to DolphinQt's GameConfigEdit.
Presets was a dropdown menu where you could select a particular setting
to add to your custom game INI. Only a small number of settings were
made available, with the intent that more would be added over time.

8 years later, the set of available settings hasn't been expanded at
all, and I don't know of anyone who uses these presets. On top of this,
we have now made good progress in exposing per-game settings
graphically. I think the Presets system is best off removed.

In place of the Presets menu, we now have "Refresh" and "Open in
External Editor" buttons. These more useful actions were previously
hidden away in the Presets menu.
2026-04-06 17:23:40 +02:00
JosJuice 85e2149907 Merge pull request #14551 from Dentomologist/breakpointwidget_fix_globally_disabled_icon
BreakpointWidget: Fix drawing of icon when breakpoints are disabled
2026-04-06 12:27:00 +02:00
Jordan Woyak d3275b9ffe Merge pull request #14490 from Simonx22/android/convert-gamepropertiesdialog-to-kotlin
Android: Convert GamePropertiesDialog to Kotlin
2026-04-05 18:41:12 -05:00
Jordan Woyak 3bc6815c8b Merge pull request #14503 from Simonx22/android/convert-syncprogramsjobservice-to-kotlin
Android: Convert SyncProgramsJobService to Kotlin
2026-04-05 18:37:57 -05:00
Jordan Woyak 50fd4cca56 Merge pull request #14562 from JosJuice/gbplayer-pwm-u32
HW/GBPlayer: Use u32 in SampleToPWM
2026-04-05 18:36:44 -05:00
JMC47 28edd2fbb1 Merge pull request #14563 from jordan-woyak/gbplayer-trigger-bits
HW/GBPlayer: Fix swapped L/R triggers.
2026-04-05 19:28:16 -04:00
Jordan Woyak 798fff86fe HW/GBPlayer: Fix swapped L/R triggers. 2026-04-05 16:45:31 -05:00
JosJuice b083ce5912 HW/GBPlayer: Use u32 in SampleToPWM
`value` contains 16 bits of data and `remainder` contains 11 bits of
data. When they're added together, we may end up with 17 bits of data,
so the result should be stored as u32 rather than u16.

This fixes `y` being set to 0 (minimum amplitude) when it should be set
to 32 (maximum amplitude).
2026-04-05 22:07:47 +02:00
Jordan Woyak 45358509a5 Merge pull request #14542 from jordan-woyak/gbacore-things
HW/GBACore: Improvements.
2026-04-05 12:28:47 -05:00
Jordan Woyak cfc1609624 Merge pull request #14557 from jordan-woyak/sdl-version-bump
Externals: Update SDL to release-3.4.4.
2026-04-05 10:24:22 -05:00
Jordan Woyak 0cc5c787cc Merge pull request #14555 from jordan-woyak/gbplayer-gba-detection
HW/GBPlayer: Fix GBA cart detection in GBI.
2026-04-05 10:19:24 -05:00
Jordan Woyak 63df2584d6 Merge pull request #14552 from JosJuice/gbplayer-pwm
Improve Game Boy Player audio conversion to PWM
2026-04-05 10:19:14 -05:00
JosJuice ef997d0d82 Improve Game Boy Player audio conversion to PWM
In the PWM audio we output, instead of each group of 512 bits consisting
of a run of ones followed by a run of zeroes, now each group of 32 bits
consists of a run of ones followed by a run of zeroes. This gets rid of
noise that was previously present.

Doing this for every group of 8 bits instead makes the Game Boy Player
Start-Up Disc not start correctly for some reason. Game Boy Interface
works fine, though.

I also made us not discard the bottom 7 bits of each PCM sample.
According to Extrems, a real GBA doesn't actually output that many bits,
but doing it in this way makes the code simpler anyway.
2026-04-05 09:17:28 +02:00
Jordan Woyak 1f0237942d Merge pull request #14556 from JosJuice/page-table-hole-misaligned-test
PageTableHostMappingTest: Fix copypaste error in misaligned+hole test
2026-04-04 22:25:29 -05:00
Dentomologist 69a5e516ed BreakpointWidget: Fix drawing of icon when breakpoints are disabled
Fix incorrect scaling of the gap drawn inside enabled breakpoints in
BreakpointWidget when breakpoints are globally disabled and the font
size is changed from the default.

As the font size increased the gap would become larger and its center
would "migrate" downward and rightward until the gap stopped being
visible at all.

Additionally, at small font sizes integer truncation issues could result
in the gap being offset towards the top left.
2026-04-04 19:07:58 -07:00
Jordan Woyak 92ba0f8f81 Externals: Update SDL to release-3.4.4. 2026-04-04 18:12:04 -05:00
JMC47 1ee93df287 Merge pull request #14550 from Tilka/import_nand
Improve NAND import progress dialog
2026-04-04 18:11:34 -04:00
Tillmann Karras f06aef4f83 Improve NAND import progress dialog
Now with cancel button and an actual progress bar. For simplicity, we do
two passes on the progress bar, one for loading the NAND into memory and
one for extracting it. The user directory is likely on an SSD, making
the extraction pass invisibly fast.
2026-04-04 22:02:45 +01:00
JosJuice 4f0219d08c PageTableHostMappingTest: Fix copypaste error in misaligned+hole test
Because of this mistake, HoleInMaskMisalignedPageTable was testing the
same thing as MisalignedPageTable, which wasn't the intent.
2026-04-04 22:56:00 +02:00
JosJuice 3fe5df474b PageTableHostMappingTest: Fix alignment for misaligned+hole test
Mistakenly, MISALIGNED_HOLE_MASK_PAGE_TABLE_BASE was aligned and
MISALIGNED_HOLE_MASK_PAGE_TABLE_BASE_ALIGNED was misaligned. It should
be the other way around.

These variables are unused due to a separate mistake which is corrected
in the next commit.
2026-04-04 22:55:23 +02:00
Jordan Woyak 2b6ca92146 Merge pull request #14554 from akechi-haruka/silence-ra-leaderboards
Retroachievements: Hide leaderboard OSD messages if the leaderboard tracker is disabled
2026-04-04 14:32:20 -05:00
Jordan Woyak 415f8c1f8a HW/GBPlayer: Fix GBA cart detection in GBI. 2026-04-04 12:30:11 -05:00
JMC47 c4e99cef61 Merge pull request #14553 from JosJuice/gbi-pi
Core: Raise PI interrupt when accessing unmapped memory
2026-04-04 12:49:10 -04:00
JosJuice f3adef75ed Core: Raise PI interrupt when accessing unmapped memory
Unmapped on the physical level, not the MMU level.

Fixes booting Game Boy Interface. Previously, Game Boy Interface thought
it was running on a Wii because accessing MEM2 didn't raise a PI
interrupt, and as a result tried to exit to the Homebrew Channel in a
way Dolphin's HLE doesn't recognize. (Dolphin's HLE catches jumps to
0x80001800, but GBI is running without address translation at this point
and therefore jumps to 0x00001800 instead.)
2026-04-04 17:45:17 +02:00
JosJuice 15dee871f3 Merge pull request #14548 from Dentomologist/tasinput_let_stickwidget_and_irwidget_shrink
TASInput: Let StickWidget and IRWidget shrink
2026-04-04 15:28:28 +02:00
Dentomologist 082c606761 Merge pull request #14520 from cristian64/breakpoints_widget_font_fixes
DolphinQt: Size adjustments in **Breakpoints** widget based on selected debug font.
2026-04-03 21:05:35 -07:00
Dentomologist df37617975 TASInput: Let StickWidget and IRWidget shrink
Use `sizeHint` instead of `setMinimumSize` to increase the default size
of `StickWidget` and `IRWidget`.

0531286906 doubled the initial sizes of
`StickWidget` and `IRWidget`, but using `setMinimumSize` to do so
prevented users from shrinking the widgets manually.

Resolves bugs.dolphin-emu.org/issues/14019.
2026-04-03 11:36:30 -07:00
JMC47 02031e663a Merge pull request #14544 from jordan-woyak/gba-always-on-thread
HW/GBACore: Make GBAs always run on dedicated threads in preparation for future improvements.
2026-04-03 13:54:58 -04:00
JMC47 798f581c38 Merge pull request #14140 from iwubcode/blurry_bloom
VideoCommon: add a graphics mod feature to modify EFBs with a custom material, enhance bloom
2026-04-03 13:38:04 -04:00
kyoubate-haruka 6c33270e57 Retroachievements: Hide leaderboard OSD messages if the leaderboard tracker is disabled 2026-04-03 14:09:06 +02:00
cristian64 a37404a304 DolphinQt: Size adjustments in **Breakpoints** widget based on selected debug font.
- Debug font is now used in the widget.
- Row height is now determined by the character height of the current
  font.
- A `OnDebugFontChanged()` slot has been connected to properly update
  the widget on debug font changes.

| Before | After |
| --- | --- |
| <img alt="Breakpoints widget (before)" title="Breakpoints widget (before)" src="https://github.com/user-attachments/assets/fdde293a-b1fd-4a1d-85e2-e16bc859eb9e" /> | <img alt="Breakpoints widget (after)" title="Breakpoints widget (after)" src="https://github.com/user-attachments/assets/cf4f1d59-c235-429b-bcb1-cae36065e805" /> |
2026-04-03 11:00:30 +01:00
Dentomologist d3b89b4c39 Merge pull request #14298 from SuperSamus/achivements-hash-qol
AchievementManager: APPROVED_LIST_HASH quality of life improvements
2026-04-02 23:36:11 -07:00
OatmealDome 5e95d5e7f5 Merge pull request #14492 from OatmealDome/apple-discard-bug-fixed-3
VideoBackends/Vulkan: Drop BUG_BROKEN_DISCARD_WITH_EARLY_Z workaround
2026-04-02 23:55:16 -04:00
Jordan Woyak 26583fd026 HW/GBACore: Remove the GBA "Threads" setting. Make GBAs always run on dedicated threads in preparation for future improvements. 2026-04-02 18:11:29 -05:00
Dentomologist 0531286906 Merge pull request #14428 from StavrosKosmas0/master
DolphinQt: Updated TAS Qt UI elementes
2026-04-02 12:25:27 -07:00
JMC47 4d74a93375 Merge pull request #14541 from JosJuice/jit64-dcbz-dcache
Jit64: Use dcbz slow path with accurate dcache
2026-04-02 14:28:14 -04:00
JMC47 f11d535d3e Merge pull request #14540 from jordan-woyak/hsp-cleanups
HW:HSP: Change read/write interface to use std::span and other cleanups.
2026-04-02 13:40:16 -04:00
Jordan Woyak 3263a0ebf1 HW/GBACore: Clean up includes and whitespace. 2026-04-02 11:02:17 -05:00
Jordan Woyak c05cb75d6c HW/GBACore: Use mCoreSync to make runLoop exit sooner than what setting earlyExit does, particularly when not in GBA mode. 2026-04-02 11:02:06 -05:00
Jordan Woyak 38674f5152 HW/GBACore: Flush audio buffer on sample rate change and don't dynamically allocate intermediary buffer. 2026-04-02 10:51:49 -05:00
Jordan Woyak c19faa8a32 Merge pull request #14534 from Dentomologist/generalpane_rename_updater_variables
GeneralPane: Change BETA to RELEASE in updater variable names
2026-04-02 09:32:34 -05:00
JosJuice f7b9c1f034 Jit: Move dcbx ENABLE_IF
INSTRUCTION_START is supposed to be before anything else in the
function. The difference only matters if INSTRUCTION_START gets
redefined, though.
2026-04-02 11:14:39 +02:00
JosJuice 904ed4b785 Jit64: Use dcbz slow path with accurate dcache
Jit64::dcbz's fast path bypasses the dcache, so we shouldn't use it if
accurate dcache is turned on. This fixes the graphical corruption that
would occur in Mario Kart Wii's menu FMVs with accurate dcache.

JitArm64 never had this problem, because it implements dcbz in a
different way. It calls EmitBackpatchRoutine, which already has a check
for accurate dcache.
2026-04-02 11:06:28 +02:00
Dentomologist 864ba85a50 GeneralPane: Change BETA to RELEASE in updater variable names
Rename `AUTO_UPDATE_BETA_INDEX` to `AUTO_UPDATE_RELEASE_INDEX` and
`AUTO_UPDATE_BETA_STRING` to `AUTO_UPDATE_RELEASE_STRING`.

Add a comment explaining that `AUTO_UPDATE_RELEASE_STRING = "beta"` for
backward compatibility reasons.
2026-04-01 10:58:12 -07:00
Jordan Woyak 858d50732a Merge pull request #14539 from jordan-woyak/gb-fixes2
GameSettings: Set SafeTextureCacheColorSamples to 2048 for Game Boy Player.
2026-04-01 12:27:02 -05:00
Jordan Woyak 9410094d9f HW/HSP: Change Read/Write interface to use span<u8, 32> instead of four calls with swapped u64 values. 2026-04-01 12:26:26 -05:00
Jordan Woyak 187fcfa7dc HW/HSP: Ensure an IHSPDevice object always exists to remove null checks as a micro optimization. 2026-04-01 10:53:37 -05:00
Jordan Woyak 207fe1f5de HW/HSP: Make IHSPDevice::GetDeviceType a virtual function to eliminate m_device_type. 2026-04-01 10:53:37 -05:00
Jordan Woyak 237efc6148 GameSettings: Set SafeTextureCacheColorSamples to 2048 for Game Boy Player to more reliably fix partial frame updates. 2026-04-01 10:48:05 -05:00
JMC47 e20f52ce7c Merge pull request #14536 from JosJuice/gbacore-android-content
Don't call OpenModeToAndroid in GBACore
2026-04-01 11:39:47 -04:00
JMC47 900aa0cb78 Merge pull request #14537 from jordan-woyak/gb-fixes
HW/GBACore: Fix integrated game boy clock speeds and enable colors.
2026-04-01 11:39:08 -04:00
JMC47 9d78302f47 Merge pull request #14538 from JosJuice/gbp-safe-texture-cache
GameSettings: Set medium texture cache accuracy for Game Boy Player
2026-04-01 03:32:31 -04:00
JosJuice c00808e52b GameSettings: Set medium texture cache accuracy for Game Boy Player
Some games are showing frame flickering, e.g. Pokémon games when only
the text at the bottom of the screen is updating. GB/GBC games are
apparently especially affected, presumably due to the extra border.
2026-04-01 09:03:18 +02:00
Jordan Woyak 6d38ccb9a6 HW/GBACore: Fix integrated game boy clock speeds and enable colors. 2026-04-01 01:48:16 -05:00
JosJuice 99531cf509 Don't call OpenModeToAndroid in GBACore
`OpenModeToAndroid("r")` is conceptually wrong, since we're opening a
binary file. It should be either `OpenModeToAndroid("rb")` or just
`"r"`. But either way it evaluates to `"r"`, so this doesn't affect
behavior.
2026-04-01 08:19:53 +02:00
JosJuice 51e83dd7a1 Merge pull request #14535 from jordan-woyak/gbplayer
HW: Implement Game Boy Player.
2026-04-01 07:25:47 +02:00
JosJuice 5167adc8df Android: Add GBA settings
The following settings were excluded:

* Port 1-4 ROM: We're only supporting Game Boy Player for now
* Save in Same Directory as the ROM: Implementation nightmare due to SAF
2026-03-31 23:40:54 -05:00
JosJuice c542279595 Android: Add SAF support for GBA ROM and BIOS files
SAF for save files is a huge can of worms because they're managed in a
more complicated way than asking the user to select an existing file,
so I won't be touching save files for now.
2026-03-31 23:40:54 -05:00
JosJuice 606bcbe3ed CMakeLists: Enable mGBA on Android 2026-03-31 23:40:54 -05:00
Jordan Woyak ac0f4390f7 GameSettings: Set a CPU overclock for Game Boy Player to avoid sporadic audio/video stream failures. 2026-03-31 23:40:54 -05:00
Jordan Woyak a021806700 GameSettings: Add ini file for Game Boy Player to automatically attach the GBPlayer hardware. 2026-03-31 23:40:54 -05:00
Jordan Woyak 5cacbcf6ea DolphinQt: Expose Game Boy Player ROM path on the GameCube config tab. 2026-03-31 23:40:54 -05:00
Jordan Woyak 657a6f0cff State: Increase STATE_VERSION for Game Boy Player. 2026-03-31 23:40:54 -05:00
Vicki PfauandJordan Woyak 3ece5f7d7b HW/HSP: Add Game Boy Player device.
Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
2026-03-30 22:29:11 -05:00
Jordan Woyak 461741e0ea ChunkFile: Add void* version of DoPointer. 2026-03-30 19:02:11 -05:00
Jordan Woyak 2f4badc357 HW/GBACore: Add some special handling for GBPlayer.
Set a fixed GBA-sized video buffer.
Don't connect audio output to Mixer.
Don't configure an SIODriver.
2026-03-30 19:02:11 -05:00
Jordan Woyak 19157cacd5 MainSettings: Add a fifth GBA ROM config path for GBPlayer. 2026-03-30 19:02:11 -05:00
JMC47 a95b18211b Merge pull request #14519 from cristian64/registers_widget_font_fixes
DolphinQt: Size adjustments in **Registers** widget based on selected debug font.
2026-03-30 17:18:21 -04:00
Dentomologist 6008526b14 Merge pull request #14530 from JosJuice/create-logs-folder
UICommon: Create User/Logs/ at startup
2026-03-30 11:58:20 -07:00
JosJuice 134f709f59 UICommon: Create User/Logs/ at startup
We used to create User/Logs/ as a side effect of creating
User/Logs/Mail/, but the creation of User/Logs/Mail/ was removed in
8cbfee2, so now nothing is creating User/Logs/ anymore. Let's explicitly
create it.
2026-03-30 20:04:58 +02:00
JMC47 e0fda9bb54 Merge pull request #14528 from jordan-woyak/gba-mixer-fix
AudioCommon/Mixer: Fix integrated GBA sample rate calculation and inverted stereo channels.
2026-03-30 12:34:16 -04:00
JMC47 c93c9dd407 Merge pull request #14526 from jordan-woyak/gbacore-stuff
HW/GBACore: Improvements.
2026-03-30 12:30:37 -04:00
Jordan Woyak e7e6c0990d AudioCommon/Mixer: Fix integrated GBA sample rate calculation and inverted stereo channels.
Give MixerFifo a variable sample rate dividend.
Handle byte-swapping and stereo channel construction outside of MixerFifo to better handle the custom layouts of each stream.
2026-03-30 08:37:37 -05:00
Jordan Woyak 6ba804416a Merge pull request #14529 from sepalani/am-w
AMMediaboard: Fix sequence-point warning
2026-03-30 07:22:30 -05:00
Sepalani be0fdd85b9 AMMediaboard: Fix sequence-point warning 2026-03-30 11:10:13 +04:00
Jordan Woyak 84dd2304d6 HW/GBACore: Allow save states to work when the GBA core is stopped. 2026-03-29 11:23:09 -05:00
Jordan Woyak de0999a19c HW/GBACore: Make the Flush function public and add additional getters. 2026-03-29 11:20:43 -05:00
Jordan Woyak f103155658 HW/GBACore: Expose the ability to run for a single frame. 2026-03-29 11:15:03 -05:00
Jordan Woyak 1ab57199e6 HW/GBACore: Allow running without the GBA bios. 2026-03-29 11:15:03 -05:00
Jordan Woyak c197f18a46 HW/GBACore: Enable GB/GBC ROM loading. 2026-03-29 11:15:03 -05:00
JMC47 67f1afeb74 Merge pull request #14517 from jordan-woyak/event-functor
CoreTiming: Change TimedCallback to a Common::MoveOnlyFunction.
2026-03-28 16:19:28 -04:00
Jordan Woyak 14965a5ec0 Merge pull request #14512 from Tilka/zero_stride
VideoCommon: ignore zero-stride EFB/XFB copies
2026-03-27 23:01:04 -05:00
Tillmann Karras 51e488e84a VideoCommon: ignore zero-stride EFB/XFB copies
just clear if requested
2026-03-28 03:05:08 +00:00
JMC47 932769c4e2 Merge pull request #14110 from jordan-woyak/mgba-joybus-threading
HW/GBACore: Adjust joybus interthread communication to use WorkQueueThreadSP.
2026-03-27 20:42:06 -04:00
JMC47 04fd45a960 Merge pull request #14522 from jordan-woyak/hsp-log-desc
LogManager: Remove redundant "(HSP)" in High-Speed Port's log type descritpion.
2026-03-27 13:06:17 -04:00
Jordan Woyak 1b9a01f168 LogManager: Remove redundant "(HSP)" in High-Speed Port's log type descritpion. 2026-03-27 11:24:14 -05:00
cristian64 a051acec91 DolphinQt: Size adjustments in **Registers** widget based on selected debug font.
- Row height is no longer hardcoded to `24`; instead, the height is
  determined by the font height of the currently selected debug font.
- Header height has been reduced (a factor of the font height) as it
  only serves as a column resizer.
- A `OnDebugFontChanged()` slot has been connected to properly update
  the widget on debug font changes.

| Before | After |
| --- | --- |
| <img alt="Registers widget (before)" title="Registers widget (before)" src="https://github.com/user-attachments/assets/8a6644f9-1081-4ac8-9fff-c79ddb73e103" /> | <img alt="Registers widget (after)" title="Registers widget (after)" src="https://github.com/user-attachments/assets/67f799d0-8afd-4081-bb40-3d7a76ddc705" /> |
2026-03-27 09:30:31 +00:00
iwubcode 306daff517 Data: update De Blob 1 and 2 to use explicit bloom target
These two games have some strange rendering behaviors and therefore can't use the generic bloom actions.

These games have several bloom EFB copies and they draw that on top of an already rendered game.  After doing that, they render some other draw calls to "fixup" the bloom that it drew to effectively remove it.  This isn't uncommon but there is one special thing these games do...they use a RAM EFB copy for the 'fixup'.  This means when playing with high IR, the game will look blurry in specific parts of the screen where the game was attempting to fix the copy!

Bloom removal has addressed this by removing all the draw calls related to the bloom, including the fixup draws.  The user then needs to turn on 'EFB Copy To Texture Only' for the best visuals (De Blob 2 in particular is broken without this) as the default settings.

Bloom blurred will need special attention too but Dolphin doesn't currently have enough functionality to handle it.
2026-03-26 20:14:40 -05:00
iwubcode 41adc6fba8 Data: update Sonic Colors bloom definitions to remove repeats, thanks FrankyBuster 2026-03-26 20:14:40 -05:00
iwubcode 7d683b02ed Data: update Pandora's Tower Bloom and DOF definitions 2026-03-26 20:14:40 -05:00
iwubcode d8c8a04ab8 Data: add a blurred DOF feature 2026-03-26 20:14:40 -05:00
iwubcode db72877520 Data: add more bloom graphics mods 2026-03-26 20:14:40 -05:00
iwubcodeandTryTwo ace082af23 Data: provide a blur mod for games with bloom
Add a mod for all games with bloom targets that blurs the bloom based on resolution using a custom material.  The shader exposes bloom brightness and the amount of spread through uniforms (not exposed in the UI yet).

The original shader logic was done by TryTwo.  This shader was reworked for graphics mods and cleaned up slightly.

Co-authored-by: TryTwo <taolas@gmail.com>
2026-03-26 20:13:16 -05:00
iwubcode 6b7a9e6ac3 VideoCommon: allow graphics mods to be added to sub folders 2026-03-26 20:13:16 -05:00
iwubcode 9cde551e29 VideoCommon: watch the user and system graphics mods directories for modified assets 2026-03-26 20:13:16 -05:00
iwubcode 1f72403ec7 VideoCommon: optionally apply materials to EFBs
After an EFB operation is turned into a texture, if there is a graphics mod action that provides a custom material, update the EFB texture with the material
2026-03-26 20:13:16 -05:00
iwubcode 7bfd43eb1a VideoCommon: update CustomPipelineAction to get a Material when an EFB is received 2026-03-26 20:13:16 -05:00
iwubcode 2d8f955851 VideoCommon: enhance 'CustomResourceManager' for post processing
This expands the interface of 'CustomResourceManager' to get a Material for post processing a frame buffer (currently EFB).  The flow is similar to the normal draw material but distinguishes itself by not needing a UID.  The full shader is much simpler than the draw shader and is currently put inline with the shader resource.
2026-03-26 20:13:16 -05:00
Jordan Woyak c658e7678b HW/SI: Replace DeviceEventCallback with a lambda. 2026-03-26 19:37:33 -05:00
Jordan Woyak 670a5df7ce CoreTiming: Change TimedCallback to a Common::MoveOnlyFunction. 2026-03-26 19:29:25 -05:00
iwubcode 6ba2d2e081 VideoCommon: update graphics mod action interface
* Add a 'AfterEFB' function to graphics mod action that can return a Material
* Rename previous EFB graphics mod function to 'BeforeEFB' to differentiate from 'AfterEFB'
* Rename previous XFB graphics mod function to 'BeforeXFB' to mirror EFB
2026-03-26 18:52:01 -05:00
Jordan Woyak efa0140791 State: Increase STATE_VERSION. 2026-03-26 16:04:21 -05:00
Jordan Woyak d76757bba6 HW/GBACore: Adjust joybus interthread communication to use WorkQueueThreadSP. 2026-03-26 16:03:59 -05:00
Jordan Woyak 1ee8c5a8f1 Common/WorkQueueThread: Make IsRunning function public. 2026-03-26 16:03:59 -05:00
Dentomologist d16004c371 Merge pull request #14446 from Dentomologist/gamelist_add_game_count
GameList: Add status bar with game count
2026-03-26 14:00:52 -07:00
JMC47 d95445727b Merge pull request #14501 from jordan-woyak/triforce-jvs-io
Triforce: Rewrite JVS IO board emulation.
2026-03-26 14:53:24 -04:00
Jordan Woyak a3f4674bb7 Merge pull request #14511 from Ma-Rang/pr/nogui-escape-win32
NoGUI: Add Escape key to request emulation shutdown on Windows
2026-03-26 07:06:36 -05:00
Jordan Woyak 02911dbc42 State: Increase STATE_VERSION. 2026-03-26 07:02:19 -05:00
Jordan Woyak 5ec42165b7 Triforce: Rewrite JVS IO board emulation.
Moved JVS IO emulation from SI_DeviceAMBaseboard into new JVSIOBoard class.
Sega/Namco board-specific functionality is handled by derived JVSIOBoard classes.
Game input is now sourced from IOPorts rather than being hard coded into JVS IO handlers.
SI_DeviceAMBaseboard: Use IOPorts for status switch input.
2026-03-26 07:02:19 -05:00
Jordan Woyak 5c912e881e IOPorts: Add additional functionality to handle analog input, coin input, et al.
Created IOAdapter classes for FZeroAX games.
Created SerialDevice classes for MarioKartGP and FZeroAX FFB steering wheels.
Added game-specific input handling to the various IOAdapter classes.
2026-03-26 06:38:31 -05:00
Jordan Woyak 49518164bb Triforce/Touchscreen: Fix LOG type. 2026-03-26 06:38:31 -05:00
JMC47 3c8a72eb18 Merge pull request #14470 from cristian64/triforce_volume_region_fix
Triforce: Check only first byte in region flag.
2026-03-25 17:47:20 -04:00
JMC47 88b7ad74d9 Merge pull request #14462 from jordan-woyak/mediaboard-span
AMMediaboard: Add GetSpanForMediaboardAddress function to eliminate hardcoded network buffer base addresses.
2026-03-25 13:45:47 -04:00
JMC47 dcbcfed12a Merge pull request #14499 from JosJuice/gpu-desync-no-report
Remove "please report it to the developers" from unknown opcode message
2026-03-25 13:31:55 -04:00
Ma-Rang 7ef7b6e3e9 NoGUI: Add Escape key to close emulation on Windows
PlatformX11 already handles XK_Escape to trigger RequestShutdown().
Add the equivalent WM_KEYDOWN / VK_ESCAPE handler to PlatformWin32
for parity.
2026-03-25 08:56:29 -05:00
Dentomologist 81192d96cf Merge pull request #14498 from JosJuice/invalid-access-wording
Reword the invalid read/write panic alert
2026-03-24 20:07:47 -07:00
Simonx22 dbeca0d134 Android: Refactor SyncProgramsJobService
Changes:
- Convert SyncProgramsJobService from Java to Kotlin.
- Replace AsyncTask/executor lifecycle handling with coroutine-based job execution and cancellation.
- Stop using restricted androidx.tvprovider builder APIs.
2026-03-24 23:05:00 -04:00
Dentomologist 0af544b84c Merge pull request #14502 from DankRank/scummvm-texcache
GameINI: Fix animation stutter in Mistic Software ScummVM titles
2026-03-24 17:44:10 -07:00
OatmealDome 59fae214af Merge pull request #14507 from Simonx22/android/permissionshandler-jni-keep
Android: Add Keep to JNI-exposed PermissionsHandler methods
2026-03-24 19:40:56 -04:00
Simonx22 9085d649dc Android: Add Keep annotation to JNI-exposed PermissionsHandler methods
This fixes an oversight from https://github.com/dolphin-emu/dolphin/pull/14488 where I forgot to add `@Keep` to JNI-exposed methods. R8 tried to optimize it and thought those methods were unused.
2026-03-24 18:42:19 -04:00
JosJuice ff4a7c8a95 Reword the invalid read/write panic alert
Some users seem to be under the impression that the panic alert is
saying that enabling MMU will fix the issue, but that's not what it
actually says. Let's try to make this a bit clearer.
2026-03-24 22:25:01 +01:00
JosJuice cfa6ec806e Merge pull request #14504 from Simonx22/android/agp-r8-bug
Android: Pin R8 9.1.34 to fix release minify crash
2026-03-24 21:39:05 +01:00
Simonx22andOatmealDome 336f604b3a Android: Pin R8 9.1.34 to fix release minify crash
Override AGP-bundled R8 in settings.gradle.kts:
- classpath("com.android.tools:r8:9.1.34") from r8-releases/raw

This resolves :app:minifyReleaseWithR8 failing with:
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0

Bug report: https://issuetracker.google.com/issues/495458806

Co-Authored-By: OatmealDome <julian@oatmealdome.me>
2026-03-24 07:50:45 -04:00
Jordan Woyak 2b6667a98d Merge pull request #14505 from Dentomologist/audiocommon_use_left_const_for_nonpointer_variables
AudioCommon: Use left const for non-pointer variables
2026-03-24 00:25:53 -05:00
Dentomologist f5dfb7e3d3 AudioCommon: Use left const for non-pointer variables 2026-03-23 16:30:30 -07:00
Jordan Woyak c05b231015 Merge pull request #14496 from Dentomologist/audiopane_fix_wasapi_default_device_combo_selection
AudioPane: Fix WASAPI default device combo selection
2026-03-23 15:27:29 -05:00
Egor 2fb10fb1c0 GameINI: Fix animation stutter in Mistic Software ScummVM titles
This is fixed by setting Texture Cache Accuracy to Safe.

Affected titles:
- R2F Freddi Fish: Kelp Seed Mystery
- RDL Spy Fox in Dry Cereal
- RJQ Pajama Sam: Don't Fear the Dark
2026-03-23 18:57:13 +02:00
Jordan Woyak cddffd2e2a Merge pull request #14497 from JosJuice/linux-gba-select
Fix default GBA Select binding on Linux
2026-03-22 16:11:25 -05:00
OatmealDome 6608bca694 Merge pull request #14476 from Simonx22/android/version-catalog-latest-deps
Android: Use version catalog and update dependencies
2026-03-22 12:13:10 -04:00
OatmealDome 9ba08f70bc Merge pull request #14489 from Simonx22/android/convert-applinkhelper-to-kotlin
Android: Convert AppLinkHelper to Kotlin
2026-03-22 12:12:50 -04:00
OatmealDome 125bc173bb Merge pull request #14491 from Simonx22/android/convert-syncchanneljobservice-to-kotlin
Android: Convert SyncChannelJobService to Kotlin
2026-03-22 12:12:41 -04:00
OatmealDome 4a813a019b Merge pull request #14495 from Simonx22/android/convert-startuphandler-to-kotlin
Android: Convert StartupHandler to Kotlin
2026-03-22 12:12:30 -04:00
JosJuice f2055fe0b8 Remove "please report it to the developers" from unknown opcode message
I think we've gotten all the useful reports we can get from this now.
Nowadays we're just getting repeated reports of issues we already know
about, like https://bugs.dolphin-emu.org/issues/12321.
2026-03-22 14:23:46 +01:00
JosJuice 5af4fedd92 Fix default GBA Select binding on Linux 2026-03-22 13:51:01 +01:00
JMC47 85e63dc32f Merge pull request #14482 from jordan-woyak/triforce-ic-card
Triforce: ICCardReader and DeckReader improvements.
2026-03-21 23:57:05 -04:00
Dentomologist 6b2a8eff15 AudioPane: Fix WASAPI default device combo selection
Set the default value of `Config::MAIN_WASAPI_DEVICE` to `default`
instead of `Default`. This fixes an issue where `AudioPane`'s `Output
Device` combo would be blank if `WASAPI` was selected and the user had
never changed the value of `Output Device`.

We don't have to worry about backward compatibility with users who have
`Default` in their config because config values aren't written unless
they've been changed at some point from the default, and the combo has
always saved `default` instead of `Default`.

Audio still worked during emulation in this situation because the
fallback for an unrecognized device name is the default device.

To help prevent similar situations in the future references to
`MAIN_WASAPI_DEVICE`'s default value now call `GetDefaultValue` instead
of hardcoding the expected default, or use the new helper function
`Config::IsDefaultValue`.
2026-03-21 15:07:42 -07:00
OatmealDome 0e92a14703 Merge pull request #14488 from Simonx22/android/convert-permissionshandler-to-kotlin
Android: Convert PermissionsHandler to Kotlin
2026-03-21 12:14:53 -04:00
OatmealDome d572931213 Merge pull request #14487 from Simonx22/android/convert-insetshelper-to-kotlin
Android: Convert InsetsHelper to Kotlin
2026-03-21 12:14:40 -04:00
Simonx22 71f40469be Android: Convert SyncChannelJobService to Kotlin 2026-03-21 11:29:09 -04:00
Simonx22 936a828cb7 Android: Convert AppLinkHelper to Kotlin 2026-03-21 11:25:42 -04:00
OatmealDome 26e58ea349 VulkanContext: Drop support for BUG_BROKEN_DISCARD_WITH_EARLY_Z workaround 2026-03-21 11:16:15 -04:00
OatmealDome 5a94e63e42 UberShaderPixel: Fix missing check for framebuffer fetch for BUG_BROKEN_DISCARD_WITH_EARLY_Z workaround 2026-03-21 11:16:15 -04:00
OatmealDome 98ca653774 DriverDetails: Mark BUG_BROKEN_DISCARD_WITH_EARLY_Z as fixed in macOS 14.0+ 2026-03-21 11:16:15 -04:00
OatmealDome 750c6ed705 DriverDetails: Use macOS version as the driver version 2026-03-21 11:16:14 -04:00
OatmealDome 36d8dbc590 CommonFuncsObjC: Make function to fetch the current macOS version common 2026-03-21 11:16:14 -04:00
Simonx22 e878174235 Android: Use version catalog and update dependencies
Migrate plugin and dependency versions to a Gradle version catalog and update dependencies to their latest available versions.
2026-03-21 10:50:34 -04:00
JosJuice 726f5f8897 Merge pull request #14494 from TellowKrinkle/NoMipsFix
VideoCommon: Fix no mips hack
2026-03-21 09:27:22 +01:00
TellowKrinkle 56845b2b93 VideoCommon: Fix no mips hack 2026-03-21 00:35:06 -05:00
JosJuice 12935d5b25 Merge pull request #14445 from JosJuice/llm-policy
Contributing.md: Add policy on LLM contributions
2026-03-20 22:41:39 +01:00
Simonx22 8ced69e95d Android: Convert GamePropertiesDialog to Kotlin 2026-03-20 15:15:17 -04:00
Simonx22 b5b5b6fb7d Android: Convert StartupHandler to Kotlin 2026-03-20 13:14:06 -04:00
Simonx22 385ac49109 Android: Convert PermissionsHandler to Kotlin 2026-03-20 13:01:54 -04:00
Simonx22 b4933d3799 Android: Convert InsetsHelper to Kotlin 2026-03-20 12:59:27 -04:00
Jordan Woyak 680ee9b65f State: Increase STATE_VERSION. 2026-03-19 21:35:31 -05:00
Jordan Woyak 85400539ba Triforce: ICCardReader and DeckReader improvements.
Significantly rewrote ICCardReader and DeckReader functionality.
Dual IC card slots of VirtuaStriker4 + Gekitou now work.
IC cards are automatically inserted/ejected in VirtuaStriker4 + Gekitou + Avalon.
IC card data is saved to a file.
Avalon deck contents are loaded from a JSON file.
Added IOPorts class to handle bespoke GPIO functionality.
2026-03-19 21:35:31 -05:00
Jordan Woyak b5bc70a6cc Triforce/SerialDevice: Add PassThroughTxBytes function and some minor cleanups. 2026-03-18 22:39:12 -05:00
Jordan Woyak 816e3a654a MagneticCardReader: Simplify checksum logic. 2026-03-18 22:39:12 -05:00
Jordan Woyak 7fbe96d42e SI_DeviceAMBaseboard: Remove "card system" from JVS-IO board features. It doesn't seem to be accurate (or related to the Magnetic/IC cards) and it causes warnings in the JVSIOCommand::CoinInput handler. 2026-03-18 22:39:12 -05:00
Jordan Woyak f074cdb08b Merge pull request #14237 from JulienBernard3383279/gcc-adapter-hotswap
GC adapter fixes (hotplugging, claim retries, Dolphin shutdown)
2026-03-18 16:56:30 -05:00
Jordan Woyak 31029812f6 Merge pull request #14451 from JMC47/sa2palpatch
GameINI: Patch startup error in Sonic Adventure 2: Battle PAL
2026-03-18 16:36:46 -05:00
Jordan Woyak c9c4b79a7e AMMediaboard: Prevent MediaBoardRange end from exceeding the underlying buffer size. 2026-03-18 04:54:05 -05:00
Jordan Woyak 2640f194f7 AMMediaboard: Add a GetSpanForMediaboardAddress function to eliminate the hardcoded network buffer base addresses. 2026-03-18 04:54:05 -05:00
Jordan Woyak de44626d23 Merge pull request #14400 from sepalani/tri-fd-gen
AMMediaboard: Change the way socket descriptors are assigned
2026-03-18 00:34:51 -05:00
OatmealDome a8c5f6ddfc Merge pull request #14481 from JosJuice/retroachievements-change-disc
RetroAchievements: Block loading discs that don't match current title
2026-03-17 17:57:09 -04:00
JMC47 f6bcb31435 Merge pull request #14480 from JosJuice/page-table-fastmem-setting
Disable page table fastmem for TimeSplitters: Future Perfect
2026-03-17 15:56:40 -04:00
JosJuice 6fdd45ddf6 RetroAchievements: Block loading discs that don't match current title 2026-03-17 19:58:28 +01:00
JosJuice 3564a256bf Merge pull request #14478 from JosJuice/wii-menu-headache
Move achievements code out of DVDInterface::SetDisc
2026-03-17 19:07:41 +01:00
JosJuice f509481cbf Disable page table fastmem for TimeSplitters: Future Perfect
TimeSplitters: Future Perfect is crashing if page table fastmem is
enabled. The reason hasn't been analyzed yet. For the time being, let's
use GameSettings to bring back the old behavior of not having page table
fastmem.

Fixes https://bugs.dolphin-emu.org/issues/14000.
2026-03-17 19:05:29 +01:00
Dentomologist 1ab9a867f6 Merge pull request #14396 from cscd98/fmt-fix
fmt: replace <fmt/base.h> with <fmt/format.h> as not available until fmt>=11
2026-03-17 10:34:00 -07:00
JosJuice 989a95a177 Core: Add INI-only setting for page table fastmem 2026-03-17 18:27:05 +01:00
JosJuice e123962bca Move achievements code out of DVDInterface::SetDisc
This should stop AchievementManager::LoadGame from being called for the
default ISO when CBoot::BootUp is booting something other than a disc or
IPL (most notably, the Wii Menu), while still detecting all disc changes
that happen while a disc game is running.
2026-03-17 09:07:34 +01:00
JosJuice 8ac767e032 Merge pull request #14474 from Dentomologist/fifoplayer_fix_screenshot_hang_during_playback
FifoPlayer: Fix hang when taking screenshot during FIFO log playback
2026-03-16 18:47:25 +01:00
JosJuice 94b6251d99 Merge pull request #14473 from Simonx22/android/proguard-keep-rules
Android: Add ProGuard keep rules for classes and methods referenced in IDCache
2026-03-16 18:22:05 +01:00
Simonx22andOatmealDome 08f598f439 Android: Add ProGuard keep rules for classes and methods referenced in IDCache
Co-authored-by: OatmealDome <julian@oatmealdome.me>
2026-03-16 11:58:08 -04:00
Dentomologist 3e7ba69205 FifoPlayer: Fix hang when taking screenshot during FIFO log playback
Don't copy null terminators from the log's `header.gameid` into
`FifoDataFile`'s `m_game_id`.

Doing so would cause an infinite loop in `Core::GenerateScreenshotName`
as the various concatenations and `fmt::format` calls would then
effectively drop all the timestamps and disambiguating arbitrary numbers
since they followed the null terminator in the gameid, and so the
`File::Exists` calls would always return true.

Fixes https://bugs.dolphin-emu.org/issues/14002.
2026-03-16 00:49:38 -07:00
OatmealDome 4dc5ead172 Merge pull request #14469 from OatmealDome/backend-warning
GeneralWidget: Add protections against invalid values in BackendWarning()
2026-03-15 20:13:41 -04:00
OatmealDome d60942d3cb Merge pull request #14461 from Dentomologist/wasapistream_handle_getbuffer_errors
WASAPIStream: Fix crash when GetBuffer call fails
2026-03-15 20:09:28 -04:00
OatmealDome 3bc8ba683b Merge pull request #14454 from Simonx22/android/remove-pre-api24-version-guards
Android: Remove version guards for API levels below 23 (Marshmallow)
2026-03-15 20:07:11 -04:00
OatmealDome 4dea6ee68e Merge pull request #14468 from OatmealDome/curl-brotli-no-link
cURL: Disable Brotli
2026-03-15 19:58:45 -04:00
cristian64 3eea3a90b5 Triforce: Check only first byte in region flag.
In some Triforce games (e.g. _F-Zero AX_), the bytes that follow the
region flag in the `boot.id` file (at `0x38`) happen to be `0x00`.
However, in other games (e.g _Mario Kart Arcade GP 2_), it seems the
region flag is padded with `0xFF`.

_Mario Kart Arcade GP 2_ (`boot.id` in the USA version):
```
00000 0000:  42 54 49 44 00 00 01 E0  00 00 00 01 00 00 00 01  BTID.... ........
00000 0010:  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
00000 0020:  47 43 41 4D 00 00 01 C0  07 D3 05 0F 00 00 00 07  GCAM.... ........
00000 0030:  53 42 4E 4C 00 00 00 00  0E FF FF FF FF FF FF FF  SBNL.... ........
                                      -----------
                                           ^
                                           |
                                      region flag
```

When the region flag was tested in `switch` statements (where a single
byte was expected in the `case`s), the test would fail, depending
on the game.

This issue would lead to the wrong calculation of the country in
`VolumeDisc::GetCountry()`, which was then used to build the game ID in
`VolumeDisc::GetGameID()`.

The solution is to test using only the least meaningful byte in the
region flag.

Unexpected game IDs were first noticed with USA version of _Mario Kart
Arcade GP 2_, which was wrongly assigned the same game ID that is given
to the Japan version (i.e. `GNLJ82`). The correct game ID for the USA
version is `GNLE82`.
2026-03-15 18:43:00 +00:00
Simonx22 fd20322f5f Android: Remove version guards for API levels below 23 (Marshmallow) 2026-03-15 14:25:04 -04:00
OatmealDome 66db206e34 Merge pull request #14453 from Simonx22/android/bump-minsdk-to-24
Android: Raise minSdk to 24 (Android 7.0)
2026-03-15 14:22:44 -04:00
OatmealDome aba842c09a GeneralWidget: Add protections against invalid values in BackendWarning() 2026-03-15 14:08:41 -04:00
OatmealDome 44e3f3708e cURL: Disable Brotli 2026-03-15 13:59:54 -04:00
OatmealDome a28fff3f00 Merge pull request #14224 from JoshuaVandaele/windows-mz-ng-fix
Externals: Fix clashing dependencies
2026-03-15 12:27:02 -04:00
Craig Carnell 4caddbc12b fmt: change use of fmt/base.h to fmt/format.h as not provided until fmt>=11.0 2026-03-15 08:37:00 +00:00
Jordan Woyak b6027da5db Merge pull request #14464 from Dentomologist/system_use_forward_declarations_in_system.h
System: Use forward declarations in System.h
2026-03-14 20:24:52 -05:00
Dentomologist 2aba231915 System: Use forward declarations in System.h 2026-03-14 10:53:45 -07:00
Dentomologist 210f70a501 Merge pull request #14463 from m-brodschi/move-perf-metrics-to-coretiming
Move PerformanceMetrics from global variable to System
2026-03-14 10:40:10 -07:00
Mihai BrodschiandJordan Woyak f9c3f06f0a Move PerformanceMetrics from global variable to System
This avoids the static initialization order fiasco between Core and VideoCommon

Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
2026-03-14 16:42:21 +02:00
Sepalani 5bddb6e244 AMMediaboard: Increase NetworkCommandAddress2 range 2026-03-14 12:45:28 +04:00
Sepalani 9cb2229601 AMMediaboard: Change the way socket descriptors are assigned 2026-03-14 12:45:28 +04:00
Dentomologist e8a78ed95f WASAPIStream: Fix crash when GetBuffer call fails
Check the return value of calls to `GetBuffer` and stop the `WASAPI
handler` sound thread if they fail.

This prevents a crash due to a null pointer dereference if `GetBuffer`
is unable to retrieve a buffer, which could be triggered during
emulation by disabling the selected WASAPI output device in the Windows
Sound settings.
2026-03-13 20:29:58 -07:00
Dentomologist 7a45ede688 Merge pull request #14123 from JosJuice/fix-logical-page-mappings
Memmap: Fix populating m_logical_page_mappings
2026-03-13 12:11:01 -07:00
Dentomologist 7209cf87cb GameList: Add status bar with game count
The status bar shows the number of games in your collection. If any
games are hidden by the platform, region, or search filters it will also
show how many games are visible and how many are filtered.

The visibility of the status bar can be toggled from the menu by
selecting `View`->`Show Game Count`.

Implements https://bugs.dolphin-emu.org/issues/9517.
2026-03-13 11:26:32 -07:00
Dentomologist dd9f1e3573 Merge pull request #14458 from jordan-woyak/buildfix
HW/Triforce/SerialDevice: Add missing include to fix FreeBSD build.
2026-03-12 20:46:27 -07:00
Jordan Woyak 51a15f42a9 HW/Triforce/SerialDevice: Add missing include to fix FreeBSD build. 2026-03-12 21:35:30 -05:00
JMC47 d4e97f6bd7 Merge pull request #14409 from sepalani/tri-rw-log
AMMediaboard: Improve recv/send log messages
2026-03-12 21:51:29 -04:00
JMC47 2336753a24 Merge pull request #14408 from sepalani/tri-eagain
AMMediaboard: Check for EAGAIN in WSAGetLastError
2026-03-12 21:51:10 -04:00
JMC47 f0096310bf Merge pull request #14452 from jordan-woyak/triforce-avalon-touchscreen
Triforce: Implement The Key of Avalon's touchscreen.
2026-03-12 21:49:08 -04:00
Jordan Woyak 12d790a54a Merge pull request #14442 from Dentomologist/performancemetrics_use_state_changed_hookableevent
PerformanceMetrics: Use HookableEvent for state changed callback
2026-03-12 19:54:13 -05:00
JMC47 9143c4cc95 Merge pull request #14172 from sepalani/usb-iso-ret
IOS/USB: Add helper to set return values of IsoMessage's packets
2026-03-12 16:33:07 -04:00
Simonx22 57a8a78d06 Android: Raise minSdk to 24 (Android 7.0)
Reasons:
- Only 0.000341% of all Android users were on API 21-23 in the last 365 days.
- These devices are old and likely do not run Dolphin well.
- Android 5.x and 6.0 have been without security updates for about 8 years.
- Staying on API 21–23 blocks AndroidX updates, including Lifecycle.
2026-03-12 16:22:26 -04:00
Dentomologist e550e1ff7c Merge pull request #14345 from TryTwo/cheat_search_work
CheatSearch: Add ability to breakpoint the selected lines.
2026-03-12 12:35:51 -07:00
Dentomologist e26b61dcee Merge pull request #14440 from JosJuice/optimize-remove-page
Core: Optimize RemoveHostPageTableMappings
2026-03-12 12:31:53 -07:00
JMC47 161f9e82c1 Merge pull request #14427 from Simonx22/qt/cheats-gecko-download-error-message
DolphinQt: Improve Gecko code download failure message
2026-03-12 15:25:41 -04:00
JMC47 ff84a4b07a Merge pull request #14426 from Simonx22/android/convert-afterdirectoryinitializationrunner-to-kotlin
Android: Convert AfterDirectoryInitializationRunner to Kotlin
2026-03-12 15:25:15 -04:00
JMC47 6257823caf Merge pull request #14424 from Simonx22/android/wii-update-callback-kotlin
Android: Convert WiiUpdateCallback to Kotlin
2026-03-12 15:25:05 -04:00
JMC47 94c1891187 Merge pull request #14423 from Simonx22/android/convert-alertdialogitemsbuilder-to-kotlin
Android: Convert AlertDialogItemsBuilder to Kotlin
2026-03-12 15:24:49 -04:00
JMC47 e0ab156afd Merge pull request #14422 from Simonx22/android/convert-tvsettingsviewholder-to-kotlin
Android: Convert TvSettingsViewHolder to Kotlin
2026-03-12 15:24:38 -04:00
JMC47 c5c1204eda Merge pull request #14421 from Simonx22/android/convert-usbpermservice-to-kotlin
Android: Convert USBPermService to Kotlin
2026-03-12 15:24:24 -04:00
Jordan Woyak cca880de16 State: Increase STATE_VERSION. 2026-03-12 03:58:01 -05:00
Jordan Woyak 3e8430440a Triforce: Implement The Key of Avalon's touchscreen.
Added SerialDevice base class interface.
Adapted MagneticCardReader to use the SerialDevice interface.
Implemented The Key of Avalon touchscreen SerialDevice.
Altered CSIDevice_AMBaseboard to use SerialDevice.
Made serial reads happen every GCAMCommand rather than only upon write.
2026-03-12 03:57:47 -05:00
JMC47 56b9b37ac8 Merge pull request #14406 from jordan-woyak/baseboard-minor-cleanups
SI_DeviceAMBaseboard: Minor cleanups.
2026-03-12 04:33:56 -04:00
Jordan Woyak b77cf5e0f2 State: Increase STATE_VERSION. 2026-03-12 02:48:31 -05:00
Jordan Woyak b1000496a2 SI_DeviceAMBaseboard: Clean up RunBuffer.
Eliminated outer loop.
Reduced memcpy'ing.
2026-03-12 02:48:07 -05:00
Jordan Woyak 4fa93e402d SI/SI_DeviceAMBaseboard: Expose the buffer size of 128 to eliminate some magic numbers. 2026-03-12 02:48:07 -05:00
Jordan Woyak 1234a4e479 SI_DeviceAMBaseboard: Use CreateStatusResponse to fix "RunSIBuffer: expected_response_length" WARN_LOGs. 2026-03-12 02:48:07 -05:00
Jordan Woyak 8da0a94ab9 SI_DeviceAMBaseboard: Add baseboard 0x70 command to SerialInterface::EBufferCommands enum to eliminate BaseBoardCommand enum. 2026-03-12 02:48:07 -05:00
Jordan Woyak cda384d40f SI_DeviceAMBaseboard: Remove unnecessary code. 2026-03-12 02:48:07 -05:00
Jordan Woyak fe2d604060 Merge pull request #14401 from naari3/master
AMMediaboard: stub Triforce NETWORK TEST command handling
2026-03-12 02:47:37 -05:00
JMC47 5b51af7673 GameINI: Patch startup error in Sonic Adventure 2: Battle PAL 2026-03-12 02:50:11 -04:00
OatmealDome 899124466c Merge branch 'release-prep-2603' 2026-03-12 00:35:33 -04:00
Stavros Kosmas d09436cd1a DolphinQt: Improve TAS UI Widgets
Made Stick and IR Widgets bigger
Improved Stick and IR layouts to better utilize space
Made Stick and IR Widgets Scale at a fixed ratio when window is resized
Added Scrollbars to Stick and IR Widgets
Reduced Spinbox padding in dark style
2026-03-12 04:59:49 +02:00
OatmealDome d8558142ea ScmRevGen: Bump version to 2603 2026-03-11 19:36:49 -04:00
JosJuice 30a735aa6f Translation resources sync with Transifex 2026-03-09 22:57:38 +01:00
JosJuice 4602199f60 Contributing.md: Add policy on LLM contributions 2026-03-09 18:25:36 +01:00
Dentomologist 252ec7452c PerformanceMetrics: Use HookableEvent for state changed callback
Use the normal state changed `HookableEvent` instead of having
`Core::NotifyStateChanged` call `g_perf_metrics.OnEmulationStateChanged`
directly.

The direct call was added in bad78cfed4 to
avoid a crash. At the time state changed callbacks were stored in a
vector, and the crash was caused by `g_perf_metric`'s destructor trying
to remove the callback from the already-destroyed vector.

Later a97627e736 switched state changed
callbacks to use `HookableEvent`, which is specifically designed to
handle the case where a hook outlives its associated event.

Since the workaround is no longer necessary replace it with a standard
`EventHook`.
2026-03-07 12:50:59 -08:00
JosJuice a3b37c041a Core: Optimize RemoveHostPageTableMappings
This switches from an O(log(N) * M) algorithm to an O(N * log(M))
algorithm. This is advantageous because N, the size of `mappings`, is
usually much smaller than M, the size of `m_page_table_mapped_entries`.

RemoveLargePageTableMapping already did something similar, so we can
even deduplicate some code between it and RemoveHostPageTableMappings.

Speeds up Rogue Squadron 3 by roughly 3% on my PC.
2026-03-07 12:56:36 +01:00
Dentomologist 49d5299f1e Merge pull request #14438 from JosJuice/save-on-settings-close
DolphinQt: Save when closing settings window
2026-03-04 18:31:55 -08:00
JosJuice d25ef67d6f DolphinQt: Save when closing settings window
If Dolphin crashes, changes that have been made to settings are often
lost. This has been a minor annoyance for me when developing, but it has
become a much bigger issue recently due to the problem where Dolphin
freezes on shutdown for ROG Ally users.

Instead of saving the config when certain arbitrary settings are
changed, let's save the config when the user closes the settings window.
2026-03-04 22:26:25 +01:00
JMC47 239c4e444c Merge pull request #14279 from jordan-woyak/nfs-hp2-speedhack
GameSettings: Add patches for Need for Speed: Hot Pursuit 2 to limit the internal frame rate.
2026-03-04 00:35:45 -05:00
JMC47 aa1c198325 Merge pull request #14297 from jordan-woyak/speedhack-stunt-racer
GameSettings: Add patch to limit framerate in Monster 4x4: Stunt Racer.
2026-03-03 16:12:55 -05:00
JMC47 2aad5daf0f Merge pull request #14280 from jordan-woyak/rabbids-speed-hacks
GameSettings: Add patches to limit the internal frame rate in Rabbids Go Home and Rabbids Lab.
2026-03-03 16:02:54 -05:00
JMC47 43def54de2 Merge pull request #14435 from Simonx22/fix/metal-early-stop-shutdown
Metal: Always run endEncoding on command encoders
2026-03-03 12:25:16 -05:00
Simonx22 d2e381090c DolphinQt: Improve Gecko code download failure message 2026-03-03 11:09:39 -05:00
Simonx22andOatmealDome 03bcd564c5 Metal: Always run endEncoding on command encoders
Fixes a macOS Metal crash when stopping immediately after boot starts.

m_upload_encoder and m_texture_upload_encoder could be dealloc'd during shutdown before endEncoding could be called, which causes a Metal assertion failure.

Co-authored-by: OatmealDome <julian@oatmealdome.me>
2026-03-03 09:49:42 -05:00
JMC47 5c62c90d35 Merge pull request #14432 from Dentomologist/vertexloadermanager_fix_crash_from_invalid_array_base
VertexLoaderManager: Fix crash caused by invalid array base
2026-03-02 19:39:55 -05:00
Dentomologist edb576f4c0 VertexLoaderManager: Fix crash caused by invalid array base
Don't set cached array bases to invalid pointers. If a game tries to set
an invalid base just keep the old one, which might cause game problems
but won't crash the emulator.
2026-03-02 13:02:51 -08:00
Dentomologist 15f24c56e4 Merge pull request #14327 from Dentomologist/performancemetrics_fix_graph_size_and_spacing
PerformanceMetrics: Fix graph size and spacing
2026-03-02 11:01:37 -08:00
JosJuice 792601120c Merge pull request #14429 from TellowKrinkle/DSUCheckUnwrapIP
DSU: Don't crash on bad hostname
2026-03-01 11:00:04 +01:00
TellowKrinkle 80762e0575 DSU: Don't crash on bad hostname 2026-03-01 00:08:08 -06:00
JMC47 63fc9d7ca3 Merge pull request #14425 from JosJuice/android-wiimote-crash
Android: Fix Wii Remote connection crashes
2026-02-28 16:16:20 -05:00
Simonx22 79f0c814e4 Android: Convert AfterDirectoryInitializationRunner to Kotlin 2026-02-28 10:44:05 -05:00
JosJuice 5a914e5247 Android: Use DeleteLocalRef more in WiimoteAndroid
Doesn't matter a lot, but we're supposed to do this to be nice citizens.
2026-02-28 16:13:36 +01:00
JosJuice faa861f1ab Android: Fix Wii Remote connection crashes
Users are reporting a crash at the point where WiimoteAndroid::IORead
tries to use m_java_wiimote_payload. This commit solves the problem by
making m_java_wiimote_payload a global reference.

The code for setting up m_java_wiimote_payload has also been moved to
the constructor just because that way it's impossible for it to run
twice. (If the code as written were to run a second time, the old global
reference would be leaked. ConnectInternal should only run once, so this
is just to be on the safe side.)

Fixes https://bugs.dolphin-emu.org/issues/13960.
2026-02-28 16:10:58 +01:00
JosJuice 1a08708a75 Merge pull request #14418 from LillyJadeKatrin/retroachievements-wii-menu
RetroAchievements - Close game on switch to null hash
2026-02-28 15:15:50 +01:00
Simonx22 2660412b29 Android: Convert WiiUpdateCallback to Kotlin 2026-02-27 21:30:46 -05:00
Simonx22 a7bb03b6f0 Android: Convert AlertDialogItemsBuilder to Kotlin 2026-02-27 15:06:12 -05:00
Simonx22 46c410e30b Android: Convert TvSettingsViewHolder to Kotlin 2026-02-27 14:41:25 -05:00
Simonx22 58f85aa65c Android: Convert USBPermService to Kotlin 2026-02-27 14:11:48 -05:00
Dentomologist f898d75bf3 Merge pull request #14317 from JosJuice/jit-cache-macro-loop
Jit: Use RangeSet for physical_addresses
2026-02-26 19:25:29 -08:00
Dentomologist 65f0dc9b2e Merge pull request #14416 from JosJuice/game-id-ascii
DiscIO: Only allow alphanumeric ASCII in game IDs
2026-02-26 14:07:27 -08:00
Jordan Woyak b063fda9a8 GameSettings: Add patches to limit the internal frame rate in Rabbids Go Home and Rabbids Lab.
Thanks to mickle pickle and ruru for helping to port the the Rabbids Go Home patch for the European versions of the game.
2026-02-26 04:48:57 -06:00
Julien Bernard 0e8db4fa22 Send neutral stick positions when disconnected rather than down-left 2026-02-25 23:06:50 +01:00
Julien Bernard afc2920a5f Gcc adapter fixes (hotplugging, claim retries, shutdown, bad yields) 2026-02-25 22:55:48 +01:00
naari3 65f8c8f6cc AMMediaboard: derive TestHardware phase2 delay from tick rate
Use the existing system reference instead of Core::System::GetInstance(),
and calculate the phase 2 scheduling delay from GetTicksPerSecond()
instead of hardcoding 50000 ticks.
2026-02-26 00:49:24 +09:00
Joshua Vandaële c6411a2952 SDL: Use bundled LibUSB when desirable
Previously, SDL would `find_package(libusb)` which would actually overwrite the user preference in the case where both USE_SYSTEM_LIBUSB and USE_SYSTEM_SDL were OFF. This coincidentally also allows SDL to use libusb on Windows.
2026-02-25 07:26:10 +01:00
Joshua Vandaële 3cea68c2e5 LibUSB: Improve library detection
Our FindLibUSB.cmake was previously entirely unused unless SDL was being built from Externals, we now rely on it again. It will use PkgConfig if applicable or fall back to looking around on the system, and more importantly it will always create an imported target.
2026-02-25 07:25:29 +01:00
Joshua Vandaële 184c6ee068 cURL: Actually disable ZLIB/ZSTD
cURL tries to find ZSTD anyways due to the lack of setting it in CACHE, and for both ZLIB and ZSTD if we had done find_package previously, cURL would still use ZLIB/ZSTD regardless of the set variable.
2026-02-25 07:25:29 +01:00
Joshua Vandaële 4af06fd487 minizip-ng: Properly use libraries from Externals
This also fixes the CMake build on Windows, since it would fail to find our target defined in Externals and would fall back to trying to redefine it, which produces an error.
2026-02-25 07:25:29 +01:00
Joshua Vandaële 11065e9911 CMake: Error out when switching sources for dependencies
Currently, configuring from System>Bundled doesn't work, it instead produces cryptic errors. And configuring from Bundled>System wont produce errors, but wont use the system libraries either. This change produces a clear error in both cases.
2026-02-25 07:25:29 +01:00
Lilly Jade Katrin 713d557d5e RetroAchievements - Close game on switch to null hash
Mistakenly thought the change media call would close the current
game if the new media failed to hash. This wasn't the case so
instead I'll close the current game myself. This fixes an issue
where a default ISO would immediately load achievements when
starting up the Wii menu.
2026-02-24 22:55:30 -05:00
Dentomologist 2a3078b833 Merge pull request #14415 from JosJuice/android-achievement-defaults
Android: Fix defaults for RetroAchievements settings
2026-02-24 18:45:54 -08:00
JosJuice 7b372db559 DiscIO: Only allow alphanumeric ASCII in game IDs
We often use game IDs in paths, so we should try to make sure path
traversal is impossible in game IDs. Admittedly, doing any kind of real
attack using the six bytes available in game IDs is unrealistic, but no
game ID should contain non-alphanumeric or non-ASCII characters anyway.

Might also fix https://bugs.dolphin-emu.org/issues/13982 by skipping
converting between encodings for game IDs.
2026-02-24 21:36:02 +01:00
JosJuice 1d74321212 DiscIO: Move DecodeString to Volume.cpp
This had to be in the header back when it was templated, but 083faa8b
made it not templated.
2026-02-24 21:09:12 +01:00
JosJuice d58e7ca932 Merge pull request #14411 from JoshuaVandaele/SDL-3.4.2
Externals: Update SDL to release-3.4.2
2026-02-24 21:08:27 +01:00
JosJuice b6513dcb05 Translation resources sync with Transifex 2026-02-24 20:53:01 +01:00
Dentomologist e9d7ee8b57 Merge pull request #14352 from Windsurf7/sonicmega-gameini
GameINI: Formatting updates to Sonic Mega Collection
2026-02-23 18:28:38 -08:00
JMC47 ff27147a71 Merge pull request #14407 from jordan-woyak/mag-card-fixup
MagneticCardReader: Minor fixup to writing card data.
2026-02-23 19:09:23 -05:00
JosJuice c1a26808ce Jit: Use RangeSet for physical_addresses
This makes JitBaseBlockCache::ErasePhysicalRange around 50% faster and
PPCAnalyzer::Analyze around 40% faster. Rogue Squadron 2's notoriously
laggy action of switching to and from cockpit view is made something
like 20-30% faster by this, though this is a very rough measurement.
2026-02-23 23:01:49 +01:00
JosJuice 36f45dce44 Move RangeSet from Externals to Common
This is a very small libary, and as I understand it, it was more or less
developed for Dolphin.

This moves the two relevant files from Externals to Common, changes the
namespace to Common, reformats the code, and adds Dolphin copyright
notices. The change in copyright notice and license was approved by
AdmiralCurtiss.
2026-02-23 22:55:38 +01:00
JosJuice 99d82829c8 Android: Fix defaults for RetroAchievements settings
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.
2026-02-23 19:24:58 +01:00
JosJuice 000eaf0c0c Merge pull request #14389 from FrankyBuster/master
Metal Arms and PoP Two Thrones aspect ratio setting fix
2026-02-23 19:11:58 +01:00
JosJuice ffa03fec78 Merge pull request #14331 from JosJuice/game-inis-rs
GameSettings: Update Rogue Squadron II and III
2026-02-23 16:56:06 +01:00
Joshua Vandaële 7cc3874a7c Externals: Update SDL to release-3.4.2
Notable changes:
- CMake
  - Fixed a bug where SDL couldn't use a vendored libusb or libhidapi (see 29b3fcfb1bc834d0187a8114debdcbbf8381cd61)
- 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
2026-02-22 08:48:07 +01:00
Martino Fontana a108fb849f AchievementManager: APPROVED_LIST_HASH quality of life improvements
APPROVED_LIST_HASH is moved to a separate file, making tests compilation faster after changing it.
The error message prints the hash in a way that it can be directly copy-pasted (though it still needs clang-format).
2026-02-22 00:22:46 +01:00
Sepalani 0950999d08 AMMediaboard: Check for EAGAIN in WSAGetLastError 2026-02-21 13:41:39 +04:00
Sepalani 543d5f89e6 AMMediaboard: Improve recv/send log messages 2026-02-21 12:27:04 +04:00
Jordan Woyak 97a88dd7db MagneticCardReader: Minor fixup to writing card data.
Ensure the 3rd track is written even if the 2nd track isn't.
Moved GetHexDump helper function to StringUtil.
2026-02-21 01:01:57 -06:00
naari3 ab0d300041 AMMediaboard: extract TestHardware "TEST OK" magic numbers to named constants
Replace raw hex literals with TEST_OK_WORD0/TEST_OK_WORD1 constexpr
constants and consolidate the endianness explanation at the definition
site.
2026-02-21 14:40:22 +09:00
naari3 adbecd00ec AMMediaboard: fix TestHardware string endianness in legacy Execute path
The legacy Execute1 path (offset=0, length=0) was using Write_U32
(big-endian) to write the "TEST OK" status string. However, the PPC
display code in segaboot reads this buffer with lwz followed by manual
bswap32, so the data must be stored in little-endian. Use Write_U32_Swap
to match the other two TestHardware paths.
2026-02-21 14:38:38 +09:00
naari3 a297bb8068 State: bump version to 178 for Triforce NETWORK TEST command handling 2026-02-21 13:29:09 +09:00
naari3 402042b9bc AMMediaboard: add Triforce NETWORK TEST support
Implement the MediaBoard commands and response protocol needed for
the segaboot NETWORK TEST to pass:

- TestHardware (0x0301) two-phase response via CoreTiming: phase 1
  echoes test_type with 0x80 acknowledgment flag, phase 2 sends
  result with testStatus=2 and checkProgress=100
- GetNetworkConfig (0x0104) with trinetcfg.bin read intercept
- Separate Execute1/Execute2 last-response buffers to prevent
  cross-clobber on the shared s_media_buffer
- Generic 0x80xx cleanup command acknowledgment
- Network config persistence for SET IP ADDRESS
2026-02-21 13:29:09 +09:00
TryTwo 3ea93641b2 CheatSearch: Add ability to breakpoint the selected lines.
Adds three options, on read, on write, and both. Always Breaks and Logs.
2026-02-20 20:57:19 -07:00
FrankyBuster e3c2ed6250 GameINI: PoP Two Thrones Aspect ratio correction
Set suggested aspect ratio to 4:3 due to dolphin incorrectly setting it to 16:9 automatically.
2026-02-20 20:02:51 -06:00
FrankyBusterandJordan Woyak aff3e3190c GameINI: Metal Arms Aspect ratio correction
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>
2026-02-20 20:02:51 -06:00
Windsurf7 fe617172f3 GameINI: Formatting updates to Sonic Mega Collection
This PR provides formatting updates to Sonic Mega Collection.

All regions:
* Formatting fixes.
* Updated to follow my code naming convention for Sega games.
2026-02-16 01:34:26 +03:00
JosJuice 2891bc9495 GameSettings: Update Rogue Squadron II and III
I've gone through all relevant settings for Rogue Squadron II and III
and overhauled their game INI files. Each setting is explained with a
comment.

Some settings I chose not to include:

* EFB to RAM only seems to affect certain fadeouts in Rogue Squadron II.
  Without it, the affected fadeouts are replaced by a pure black screen.
  I don't think this is important enough to warrant the performance hit.
* As I was unable to find anything Rogue Squadron III needs EFB to RAM
  for, I also didn't find anything it needs DeferEFBCopies disabled for.
* I didn't find anything EFBEmulateFormatChanges was needed for in
  either game.
* Enabling EFB access makes the ship engine glow visible in Rogue
  Squadron III, but this effect is minor enough that you probably won't
  notice it's missing unless you know it's supposed to be there. Since
  this is Dolphin's heaviest game, let's give users the choice.
* I was considering forcing XFB to RAM for Rogue Squadron III to make
  fadeouts render properly instead of going from magenta to black, since
  enabling XFB to RAM doesn't really hurt performance when you're
  already enabling EFB to RAM. But then I was unable to find a reason
  why we should enable EFB to RAM for this game.

Tested in RS2 and RS3. The RS3 demo disc settings are copied from the
RS3 settings and haven't been tested by me.
2026-02-08 12:14:53 +01:00
Dentomologist 0bf34a73b3 PerformanceMetrics: Clamp graph minimum auto size
Add a minimum value for the automatic size of the performance metrics
graph. The graph can still be manually resized smaller than this limit.

This prevents the graph from automatically resizing itself to be too
small to contain the full graph and legend, which happened when using
native resolution with `Auto-Adjust Window Size` enabled.
2026-02-06 13:30:48 -08:00
Dentomologist f7b7267993 PerformanceMetrics: Fix automatic graph resizing
Fix a bug causing the performance graph to not resize when the render
window changed size:
* When changing the render window size during emulation the performance
  graph wouldn't update its size until the next emulation session.
* When changing the render window size with no emulation active (by
  changing the Internal Resolution with Auto-Adjust Window Size enabled)
  the performance graph wouldn't update its size until the second
  emulation session after the change.

Before explaining why the bug happened, here are some details about Dear
ImGui (henceforth ImGui) for context:
* In order to allow programs to specify initial ImGui window sizes while
  also allowing the user to resize them, `SetNextWindowSize` takes a
  flag from the `ImGuiCond_` enum specifying under what circumstances
  that function should actually have any effect.
* ImGuiCond_FirstUseEver causes ImGui to only apply the command when the
  window doesn't have any saved size information for that session or in
  the ini file specified by `ImGui::GetIO().IniFilename`. Since we set
  that filename to `nullptr`, in practice the resize command is applied
  on the first frame of each ImGui/emulation session.
* Qt saves the most recent size of the render window across emulation
  (and even Dolphin) sessions, which is then used to set the initial
  value of `ImGui::GetIO().DisplaySize` in the next emulation session.
* It takes multiple frames for the size of the render window to update
  when changed by setting the internal resolution. This means that
  `ImGui::GetIO().DisplaySize` will have a stale value in the
  intervening frames, and specifically for the first few frames of
  emulation if the resolution was changed beforehand.

When changing the resolution during emulation the call to
`SetNextWindowSize` had no effect because of the
`ImGuiCond_FirstUseEver` flag. `DisplaySize` would be updated several
frames later, and then the next emulation session would update the graph
size on its first frame.

When changing the resolution outside emulation and then starting a game,
the call to SetNextWindowSize on the first frame took effect but used
the stale value of `DisplaySize`. `DisplaySize` would be updated a few
frames later, but the graph wouldn't be resized until the first frame of
the second emulation session.

This commit fixes the issue by using the `ImGuiCond_Always` flag in the
performance graph's call to `SetNextWindowSize` when the render window
size changes.
2026-02-06 13:30:48 -08:00
Dentomologist 4b5b2ebd2f PerformanceMetrics: Add padding below graph
Add vertical padding between the performance graph (when it's enabled)
and the FPS/VPS/Speed overlays.
2026-02-06 13:30:48 -08:00
Jordan Woyak 811c090912 GameSettings: Add patch to limit framerate in Monster 4x4: Stunt Racer. 2026-01-23 02:56:58 -06:00
Jordan Woyak 43ae718088 GameSettings: Add patches for Need for Speed: Hot Pursuit 2 to limit the internal frame rate.
The patches rearrange some branching to insert a call to VIWaitForRetrace in the main game loop.
This allows ImmediateXFB to work properly so it is no longer forced off by the game ini.
2026-01-17 17:19:53 -06:00
Sepalani b05a7e2059 IOS/USB: Add helper to set return values of IsoMessage's packets 2026-01-01 15:44:18 +04:00
JosJuice e00f39bb6d Memmap: Fix populating m_logical_page_mappings
This fixes a regression in ac84ea17a6. That commit was intended to
reduce the number of MapInMemoryRegion calls while otherwise keeping
behavior the same, but it accidentally messed up our logic for writing
to m_logical_page_mappings. This commit restores the old
m_logical_page_mappings behavior, fixing a crash that would occur when
running JitArm64 without fastmem.
2025-11-16 11:57:11 +01:00
366 changed files with 91738 additions and 80867 deletions

No files matched your search

+15 -4
View File
@@ -50,6 +50,17 @@ function(dolphin_add_bundled_library library use_system bundled_path)
add_subdirectory(${bundled_path} EXCLUDE_FROM_ALL)
endfunction()
function(dolphin_set_library_type library type)
if(DEFINED ${library}_TYPE AND NOT ${${library}_TYPE} STREQUAL "${type}")
message(FATAL_ERROR
"The selection for ${library} changed from '${${library}_TYPE}' to '${type}' after configuration.\n"
"Please delete the build directory (or at least CMakeCache.txt) and reconfigure."
)
endif()
set(${library}_TYPE "${type}" CACHE INTERNAL "")
endfunction()
function(dolphin_find_optional_system_library library bundled_path)
dolphin_optional_system_library(use_system ${library})
string(TOUPPER ${library} upperlib)
@@ -101,11 +112,11 @@ function(dolphin_find_optional_system_library library bundled_path)
endif()
endif()
if(${prefix}_FOUND)
dolphin_set_library_type(${library} "System")
message(STATUS "Using system ${library}")
set(${prefix}_TYPE "System" PARENT_SCOPE)
else()
dolphin_set_library_type(${library} "Bundled")
dolphin_add_bundled_library(${library} ${use_system} ${bundled_path})
set(${prefix}_TYPE "Bundled" PARENT_SCOPE)
endif()
endfunction()
@@ -119,11 +130,11 @@ function(dolphin_find_optional_system_library_pkgconfig library search alias bun
endif()
endif()
if(${library}_FOUND)
dolphin_set_library_type(${library} "System")
message(STATUS "Using system ${library}")
dolphin_alias_library(${alias} PkgConfig::${library})
set(${library}_TYPE "System" PARENT_SCOPE)
else()
dolphin_set_library_type(${library} "Bundled")
dolphin_add_bundled_library(${library} ${use_system} ${bundled_path})
set(${library}_TYPE "Bundled" PARENT_SCOPE)
endif()
endfunction()
+18 -13
View File
@@ -11,8 +11,15 @@
if(ANDROID)
set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "libusb-1.0 not found.")
elseif (NOT LIBUSB_FOUND)
pkg_check_modules (LIBUSB_PKG libusb-1.0)
return()
endif()
if(TARGET LibUSB::LibUSB)
return()
endif()
if(NOT LIBUSB_FOUND)
pkg_check_modules(LIBUSB_PKG libusb-1.0)
find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h
PATHS
@@ -30,21 +37,19 @@ elseif (NOT LIBUSB_FOUND)
/usr/local/lib
)
if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}")
else(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "libusb-1.0 not found.")
endif(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
mark_as_advanced(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES)
endif ()
if(LIBUSB_FOUND AND NOT TARGET LibUSB::LibUSB)
endif()
if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
add_library(LibUSB::LibUSB UNKNOWN IMPORTED)
set_target_properties(LibUSB::LibUSB PROPERTIES
IMPORTED_LOCATION "${LIBUSB_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${LIBUSB_INCLUDE_DIR}"
)
set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}")
else()
set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found")
message(STATUS "libusb-1.0 not found.")
endif()
+1 -1
View File
@@ -33,7 +33,7 @@ endif()
string(TIMESTAMP DOLPHIN_WC_BUILD_DATE "%Y-%m-%d" UTC)
# version number
set(DOLPHIN_VERSION_MAJOR "2512")
set(DOLPHIN_VERSION_MAJOR "2603")
set(DOLPHIN_VERSION_MINOR "0")
set(DOLPHIN_VERSION_PATCH ${DOLPHIN_WC_REVISION})
+12 -21
View File
@@ -582,10 +582,6 @@ if(UNIX)
add_definitions(-DUSE_MEMORYWATCHER=1)
endif()
if(ENABLE_SDL)
dolphin_find_optional_system_library(SDL3 Externals/SDL 3.2.0)
endif()
if(ENABLE_ANALYTICS)
message(STATUS "Enabling analytics collection (subject to end-user opt-in)")
add_definitions(-DUSE_ANALYTICS=1)
@@ -658,6 +654,13 @@ if(NOT (WIN32 AND _M_ARM_64))
add_definitions(-DHAS_OPENGL)
endif()
if(NOT WIN32)
if(ANDROID)
set(USE_SYSTEM_Iconv OFF)
endif()
dolphin_find_optional_system_library(Iconv Externals/libiconv 1.14)
endif()
dolphin_find_optional_system_library(pugixml Externals/pugixml)
dolphin_find_optional_system_library_pkgconfig(ENET libenet>=1.3.18 enet::enet Externals/enet)
@@ -701,12 +704,14 @@ if(ENABLE_CUBEB)
endif()
if(NOT ANDROID)
dolphin_find_optional_system_library_pkgconfig(
LibUSB libusb-1.0 LibUSB::LibUSB Externals/libusb
)
dolphin_find_optional_system_library(LibUSB Externals/libusb)
add_definitions(-D__LIBUSB__)
endif()
if(ENABLE_SDL)
dolphin_find_optional_system_library(SDL3 Externals/SDL 3.2.0)
endif()
dolphin_find_optional_system_library(SFML Externals/SFML 3.0 COMPONENTS Network System)
if(USE_UPNP)
@@ -718,15 +723,6 @@ dolphin_find_optional_system_library(MBEDTLS Externals/mbedtls 2.28)
dolphin_find_optional_system_library(CURL Externals/curl)
if(NOT WIN32)
if(NOT ANDROID)
dolphin_find_optional_system_library(Iconv Externals/libiconv 1.14)
else()
message(STATUS "Using static iconv from Externals")
add_subdirectory(Externals/libiconv EXCLUDE_FROM_ALL)
endif()
endif()
if(NOT ANDROID)
dolphin_find_optional_system_library(HIDAPI Externals/hidapi)
endif()
@@ -737,9 +733,6 @@ if(USE_DISCORD_PRESENCE)
include_directories(Externals/discord-rpc/include)
endif()
if(NOT ENABLE_QT)
set(USE_MGBA 0)
endif()
if(USE_MGBA)
dolphin_find_optional_system_library(LIBMGBA Externals/mGBA 0.11)
endif()
@@ -761,8 +754,6 @@ include_directories(Externals/picojson)
add_subdirectory(Externals/expr)
add_subdirectory(Externals/rangeset)
add_subdirectory(Externals/FatFs)
if (USE_RETRO_ACHIEVEMENTS)
+8 -1
View File
@@ -7,11 +7,12 @@
- [Android](#android)
- [Help](#help)
# <a name="legal"></a>Legal
# <a name="legal"></a>Legal and policies
Summary:
- [Trade secrets](#trade-secrets)
- [Generative AI](#genai)
- [Code licensing](#code-licensing)
## <a name="trade-secrets"></a>Trade secrets
@@ -22,6 +23,12 @@ If you know any confidential information related to the GameCube, Wii, or Trifor
Also, this probably goes without saying, but piracy is strictly forbidden both on GitHub and in all other Dolphin channels.
## <a name="genai"></a>Generative AI
We accept contributions from humans, not from AI agents. We expect you to understand and take responsibility for code submitted in your name. If a non-trivial part of your contribution is generated using AI, you need to disclose which parts are generated.
Because large language models are trained on massive amounts of data gathered from the internet, we have to assume that they contain leaked Nintendo information. Therefore, you're not allowed to use LLMs to make changes related to the behavior of the emulated console or to use LLMs to obtain information related to the console.
## <a name="code-licensing"></a>Code licensing
If you make any contributions to Dolphin after December 1st, 2014, you are agreeing that any code you have contributed will be licensed under the GNU GPL version 2 (or any later version).
+7 -10
View File
@@ -1,20 +1,17 @@
# DLSE64, DLSP64 - Star Wars: Rogue Squadron III: Rebel Strike: Limited Edition Bonus Disc (Demo)
[Core]
# Values set here will override the main Dolphin settings.
# Strictly required.
MMU = True
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video]
# Dual core is very unstable in this game and usually causes a freeze before the main menu.
CPUThread = False
[Video_Settings]
# Improves performance, especially in levels with terrain.
CPUCull = True
# Dolphin misdetects this game as 16:9.
SuggestedAspectRatio = 2
[Video_Hacks]
EFBToTextureEnable = False
# Avoids majorly corrupted graphics in menus.
ImmediateXFBEnable = False
+2
View File
@@ -3,6 +3,8 @@
[Core]
# Values set here will override the main Dolphin settings.
MMU = True
# Fixes freeze on second loading screen
PageTableFastmem = False
[OnFrame]
# Add memory patches to be applied every frame here.
-16
View File
@@ -1,16 +0,0 @@
# GH2E69, GH2P69 - Need for Speed: Hot Pursuit 2
[Core]
# Values set here will override the main Dolphin settings.
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video_Settings]
[Video_Hacks]
# Game runs uncapped and is slow to emulate.
ImmediateXFBEnable = False
+12
View File
@@ -0,0 +1,12 @@
# GH2E69 - Need for Speed: Hot Pursuit 2
[OnFrame]
$Limit internal frame rate (speed hack)
0x802243a4:dword:0x60000000
0x802243a8:dword:0x4bf9b58d
0x802243ac:dword:0x806de074
0x802243b0:dword:0x28030000
0x802243b4:dword:0x41820054
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+12
View File
@@ -0,0 +1,12 @@
# GH2P69 - Need for Speed: Hot Pursuit 2
[OnFrame]
$Limit internal frame rate (speed hack)
0x80224524:dword:0x60000000
0x80224528:dword:0x4bf9b58d
0x8022452c:dword:0x806de094
0x80224530:dword:0x28030000
0x80224534:dword:0x41820054
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+2 -9
View File
@@ -1,14 +1,7 @@
# GKME41, GKMP41 - Prince of Persia The Two Thrones
[Core]
# Values set here will override the main Dolphin settings.
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video_Settings]
SafeTextureCacheColorSamples = 512
FastDepthCalc = True
# Avoids misbehaving widescreen heuristic.
SuggestedAspectRatio = 2
+7 -11
View File
@@ -1,21 +1,17 @@
# GLRD64, GLRE64, GLRF64, GLRJ13, GLRP64 - Star Wars - Rogue Squadron III - Rebel Strike
[Core]
# Values set here will override the main Dolphin settings.
# Strictly required.
MMU = True
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video]
# Dual core is very unstable in this game and usually causes a freeze before the main menu.
CPUThread = False
[Video_Settings]
# Improves performance, especially in levels with terrain.
CPUCull = True
# Dolphin misdetects this game as 16:9.
SuggestedAspectRatio = 2
[Video_Hacks]
EFBToTextureEnable = False
# Avoids majorly corrupted graphics in menus.
ImmediateXFBEnable = False
DeferEFBCopies = False
+2 -10
View File
@@ -1,14 +1,6 @@
# GM5E7D, GM5F7D, GM5P7D - Metal Arms: Glitch in the System
[Core]
# Values set here will override the main Dolphin settings.
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video_Settings]
SafeTextureCacheColorSamples = 512
# Avoids misbehaving widescreen heuristic.
SuggestedAspectRatio = 2
+5 -1
View File
@@ -1,7 +1,8 @@
# GSNP8P - SONIC ADVENTURE 2 BATTLE
[OnFrame]
# Add memory patches to be applied every frame here.
$Fix startup errors
0x80114D4E:word:0x00000210
[ActionReplay]
# Add action replay cheats here.
@@ -117,5 +118,8 @@ $60Hz Aspect Ratio Fix
0C2BB868 02EA5140
042BB868 02EA3140
[OnFrame_Enabled]
$Fix startup errors
[AR_RetroAchievements_Verified]
$60Hz Aspect Ratio Fix
+1 -1
View File
@@ -1,4 +1,4 @@
# GSOE8P, GSOJ8P, GSOP8P - Sonic Mega Collection (US)
# GSOE8P, GSOJ8P, GSOP8P - Sonic Mega Collection
[Core]
# Values set here will override the main Dolphin settings.
+6 -12
View File
@@ -1,21 +1,15 @@
# GSWD64, GSWE64, GSWF64, GSWI64, GSWJ64, GSWP64, GSWS64 - Star Wars: Rogue Leader
[Core]
# Values set here will override the main Dolphin settings.
# Strictly required.
MMU = True
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video]
# Reduces stuttering when switching to and from cockpit view.
JITFollowBranch = False
[Video_Settings]
# Improves performance, especially in levels with terrain.
CPUCull = True
[Video_Hacks]
EFBToTextureEnable = False
EFBEmulateFormatChanges = True
# Avoids majorly corrupted graphics.
# Avoids majorly corrupted graphics in menus.
ImmediateXFBEnable = False
+2
View File
@@ -2,3 +2,5 @@
[Video_Settings]
SuggestedAspectRatio = 2
# Fix animation stutter
SafeTextureCacheColorSamples = 0
+2
View File
@@ -2,3 +2,5 @@
[Video_Settings]
SuggestedAspectRatio = 2
# Fix animation stutter
SafeTextureCacheColorSamples = 0
+8
View File
@@ -0,0 +1,8 @@
# RGWE41 - Rabbids Go Home
[OnFrame]
$Limit internal frame rate (speed hack)
0x802310a0:dword:0x48148db0
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+8
View File
@@ -0,0 +1,8 @@
# RGWX41 - Rabbids Go Home
[OnFrame]
$Limit internal frame rate (speed hack)
0x80231138:dword:0x48148D38
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+8
View File
@@ -0,0 +1,8 @@
# RGWX41 - Rabbids Go Home
[OnFrame]
$Limit internal frame rate (speed hack)
0x802318a8:dword:0x48149258
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+2
View File
@@ -2,3 +2,5 @@
[Video_Settings]
SuggestedAspectRatio = 2
# Fix animation stutter
SafeTextureCacheColorSamples = 0
+8
View File
@@ -0,0 +1,8 @@
# RQZE41, RQZP41 - Monster 4x4: Stunt Racer
[OnFrame]
$Limit internal frame rate (speed hack)
0x800931f4:dword:0x38600001
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+12
View File
@@ -0,0 +1,12 @@
# UGPP01, UGPE01, UGPJ01 - Game Boy Player
[Core]
# Attach Game Boy Player hardware.
HSPDevice = 2
# Overclock to work around sporadic audio/video stream failures.
Overclock = 1.25
OverclockEnable = True
[Video_Settings]
# Fixes old frames being shown when a game updates the center/bottom of the screen without updating the top.
SafeTextureCacheColorSamples = 2048
-11
View File
@@ -1,14 +1,5 @@
# WR2E41, WR2P41 - Rabbids Lab
[Core]
# Values set here will override the main Dolphin settings.
[OnFrame]
# Add memory patches to be applied every frame here.
[ActionReplay]
# Add action replay cheats here.
[Video_Enhancements]
ForceTextureFiltering = 0
@@ -18,7 +9,5 @@ SafeTextureCacheColorSamples = 0
[Video_Hacks]
# Fixes visible lines in air vents/fans.
VertexRounding = True
# This game runs with an uncapped framerate.
ImmediateXFBEnable = False
# Fixes rabbid tattoo textures saving as black.
EFBToTextureEnable = False
+8
View File
@@ -0,0 +1,8 @@
# WR2E41 - Rabbids Lab
[OnFrame]
$Limit internal frame rate (speed hack)
0x802a1380:dword:0x4815da50
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
+8
View File
@@ -0,0 +1,8 @@
# WR2P41 - Rabbids Lab
[OnFrame]
$Limit internal frame rate (speed hack)
0x802a1360:dword:0x4815da50
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
Whitespace-only changes.
@@ -0,0 +1,45 @@
void process_fragment(in DolphinFragmentInput frag_input, out DolphinFragmentOutput frag_output)
{
int layer = int(frag_input.tex0.z);
int r = int(efb_scale) * int(SPREAD_MULTIPLIER);
int coord;
int length;
int2 initial_coords = int2(frag_input.tex0.xy * source_resolution.xy);
vec4 brightness = float4(1.0, 1.0, 1.0, 1.0);
if (HORIZONTAL)
{
length = int(source_resolution.x);
coord = initial_coords.x;
brightness = BRIGHTNESS_MULTIPLIER * brightness;
}
else
{
length = int(source_resolution.y);
coord = initial_coords.y;
}
int offset;
vec4 count = vec4(0.0,0.0,0.0,0.0);
vec4 col = vec4(0.0,0.0,0.0,0.0);
for (offset = -r; offset <= r; offset++)
{
int pos = coord + offset;
if (pos <= length && pos >= 0)
{
int3 sample_coords;
if (HORIZONTAL)
{
sample_coords = int3(int2(pos, initial_coords.y), layer);
}
else
{
sample_coords = int3(int2(initial_coords.x, pos), layer);
}
col += texelFetch(samp0, sample_coords, 0);
count += vec4(1.0,1.0,1.0,1.0);
}
}
frag_output.main = col / count * brightness;
}
@@ -0,0 +1,23 @@
{
"properties":[
{
"code_name": "HORIZONTAL",
"default": true,
"description": "Whether to apply the blur horizontally or vertically",
"type": "bool"
},
{
"code_name": "SPREAD_MULTIPLIER",
"default": 1.0,
"description": "How much to spread the blur",
"type": "float"
},
{
"code_name": "BRIGHTNESS_MULTIPLIER",
"default": 1.0,
"description": "How bright the blur is",
"type": "float"
}
],
"samplers":[]
}
@@ -0,0 +1,4 @@
void process_vertex(in DolphinVertexInput vertex_input, out DolphinVertexOutput vertex_output)
{
dolphin_process_emulated_vertex(vertex_input, vertex_output);
}
@@ -0,0 +1,19 @@
{
"next_material_asset":"dolphin_bloom_blur_vertical",
"properties":[
{
"type": "bool",
"value": true
},
{
"type": "float",
"value": 1.0
},
{
"type": "float",
"value": 1.0
}
],
"textures":[],
"shader_asset": "dolphin_bloom_blur"
}
@@ -0,0 +1,19 @@
{
"next_material_asset":"",
"properties":[
{
"type": "bool",
"value": false
},
{
"type": "float",
"value": 1.0
},
{
"type": "float",
"value": 1.0
}
],
"textures":[],
"shader_asset": "dolphin_bloom_blur"
}
@@ -0,0 +1,41 @@
{
"meta":
{
"title": "Bloom Blurred",
"author": "Dolphin Team",
"description": "Modifies bloom effects to blur them to their native resolution. Results in bloom looking much more natural at higher resolutions but the blur may be too intense in some games."
},
"features":
[
{
"group": "Bloom",
"action": "custom_pipeline",
"action_data":
{
"material_asset": "dolphin_bloom_blur_horizontal"
}
}
],
"assets": [
{
"data": {
"metadata": "blur.rastershader",
"pixel_shader": "blur.ps.glsl",
"vertex_shader": "blur.vs.glsl"
},
"name": "dolphin_bloom_blur"
},
{
"data": {
"metadata": "blur_horizontal.rastermaterial"
},
"name": "dolphin_bloom_blur_horizontal"
},
{
"data": {
"metadata": "blur_vertical.rastermaterial"
},
"name": "dolphin_bloom_blur_vertical"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,45 @@
void process_fragment(in DolphinFragmentInput frag_input, out DolphinFragmentOutput frag_output)
{
int layer = int(frag_input.tex0.z);
int r = int(efb_scale) * int(SPREAD_MULTIPLIER);
int coord;
int length;
int2 initial_coords = int2(frag_input.tex0.xy * source_resolution.xy);
vec4 brightness = float4(1.0, 1.0, 1.0, 1.0);
if (HORIZONTAL)
{
length = int(source_resolution.x);
coord = initial_coords.x;
brightness = BRIGHTNESS_MULTIPLIER * brightness;
}
else
{
length = int(source_resolution.y);
coord = initial_coords.y;
}
int offset;
vec4 count = vec4(0.0,0.0,0.0,0.0);
vec4 col = vec4(0.0,0.0,0.0,0.0);
for (offset = -r; offset <= r; offset++)
{
int pos = coord + offset;
if (pos <= length && pos >= 0)
{
int3 sample_coords;
if (HORIZONTAL)
{
sample_coords = int3(int2(pos, initial_coords.y), layer);
}
else
{
sample_coords = int3(int2(initial_coords.x, pos), layer);
}
col += texelFetch(samp0, sample_coords, 0);
count += vec4(1.0,1.0,1.0,1.0);
}
}
frag_output.main = col / count * brightness;
}
@@ -0,0 +1,23 @@
{
"properties":[
{
"code_name": "HORIZONTAL",
"default": true,
"description": "Whether to apply the blur horizontally or vertically",
"type": "bool"
},
{
"code_name": "SPREAD_MULTIPLIER",
"default": 1.0,
"description": "How much to spread the blur",
"type": "float"
},
{
"code_name": "BRIGHTNESS_MULTIPLIER",
"default": 1.0,
"description": "How bright the blur is",
"type": "float"
}
],
"samplers":[]
}
@@ -0,0 +1,4 @@
void process_vertex(in DolphinVertexInput vertex_input, out DolphinVertexOutput vertex_output)
{
dolphin_process_emulated_vertex(vertex_input, vertex_output);
}
@@ -0,0 +1,19 @@
{
"next_material_asset":"dolphin_dof_blur_vertical",
"properties":[
{
"type": "bool",
"value": true
},
{
"type": "float",
"value": 1.0
},
{
"type": "float",
"value": 1.0
}
],
"textures":[],
"shader_asset": "dolphin_dof_blur"
}
@@ -0,0 +1,19 @@
{
"next_material_asset":"",
"properties":[
{
"type": "bool",
"value": false
},
{
"type": "float",
"value": 1.0
},
{
"type": "float",
"value": 1.0
}
],
"textures":[],
"shader_asset": "dolphin_dof_blur"
}
@@ -0,0 +1,41 @@
{
"meta":
{
"title": "DOF Blurred",
"author": "Dolphin Team",
"description": "Modifies depth of field effects to blur them to their native resolution. Results in depth of field looking much more natural at higher resolutions but the blur may be too intense in some games."
},
"features":
[
{
"group": "DOF",
"action": "custom_pipeline",
"action_data":
{
"material_asset": "dolphin_dof_blur_horizontal"
}
}
],
"assets": [
{
"data": {
"metadata": "blur.rastershader",
"pixel_shader": "blur.ps.glsl",
"vertex_shader": "blur.vs.glsl"
},
"name": "dolphin_dof_blur"
},
{
"data": {
"metadata": "blur_horizontal.rastermaterial"
},
"name": "dolphin_dof_blur_horizontal"
},
{
"data": {
"metadata": "blur_vertical.rastermaterial"
},
"name": "dolphin_dof_blur_vertical"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,31 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000022_40x28_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000021_80x56_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000020_160x112_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000025_320x224_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,65 @@
{
"meta":
{
"title": "Bloom Blurred",
"author": "Dolphin Team",
"description": "Modifies bloom effects to blur them to their native resolution. Results in bloom looking much more natural at higher resolutions but the blur may be too intense in some games."
},
"groups":
[
{
"name": "CustomBloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000134_20x14_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000022_40x28_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000131_80x56_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000130_160x112_6"
}
]
}
],
"features":
[
{
"group": "CustomBloom",
"action": "custom_pipeline",
"action_data":
{
"material_asset": "dolphin_bloom_blur_horizontal"
}
}
],
"assets": [
{
"data": {
"metadata": "../../All Games Blurred Bloom/blur.rastershader",
"pixel_shader": "../../All Games Blurred Bloom/blur.ps.glsl",
"vertex_shader": "../../All Games Blurred Bloom/blur.vs.glsl"
},
"name": "dolphin_bloom_blur"
},
{
"data": {
"metadata": "../../All Games Blurred Bloom/blur_horizontal.rastermaterial"
},
"name": "dolphin_bloom_blur_horizontal"
},
{
"data": {
"metadata": "../../All Games Blurred Bloom/blur_vertical.rastermaterial"
},
"name": "dolphin_bloom_blur_vertical"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,64 @@
{
"meta":
{
"title": "Bloom Removal",
"author": "Dolphin Team",
"description": "Skips drawing bloom effects. May be preferable when using a bloom solution from Dolphin's post processing shaders or a third party tool. Requires enabling 'EFB Copy To Texture Only'"
},
"groups":
[
{
"name": "CustomBloom",
"targets": [
{
"type": "draw_started",
"texture_filename": "efb1_n000134_20x14_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000022_40x28_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000131_80x56_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000130_160x112_6"
}
]
},
{
"name": "Fixup",
"targets": [
{
"type": "draw_started",
"texture_filename": "tex1_256x179_802b7563f35b613a_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000182_640x448_5"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000380_320x224_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000380_240x224_6"
}
]
}
],
"features":
[
{
"group": "CustomBloom",
"action": "skip"
},
{
"group": "Fixup",
"action": "skip"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,65 @@
{
"meta":
{
"title": "Bloom Blurred",
"author": "Dolphin Team",
"description": "Modifies bloom effects to blur them to their native resolution. Results in bloom looking much more natural at higher resolutions but the blur may be too intense in some games."
},
"groups":
[
{
"name": "CustomBloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000134_20x14_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000022_40x28_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000131_80x56_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000130_160x112_6"
}
]
}
],
"features":
[
{
"group": "CustomBloom",
"action": "custom_pipeline",
"action_data":
{
"material_asset": "dolphin_bloom_blur_horizontal"
}
}
],
"assets": [
{
"data": {
"metadata": "../../All Games Blurred Bloom/blur.rastershader",
"pixel_shader": "../../All Games Blurred Bloom/blur.ps.glsl",
"vertex_shader": "../../All Games Blurred Bloom/blur.vs.glsl"
},
"name": "dolphin_bloom_blur"
},
{
"data": {
"metadata": "../../All Games Blurred Bloom/blur_horizontal.rastermaterial"
},
"name": "dolphin_bloom_blur_horizontal"
},
{
"data": {
"metadata": "../../All Games Blurred Bloom/blur_vertical.rastermaterial"
},
"name": "dolphin_bloom_blur_vertical"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,64 @@
{
"meta":
{
"title": "Bloom Removal",
"author": "Dolphin Team",
"description": "Skips drawing bloom effects. May be preferable when using a bloom solution from Dolphin's post processing shaders or a third party tool."
},
"groups":
[
{
"name": "CustomBloom",
"targets": [
{
"type": "draw_started",
"texture_filename": "efb1_n000134_20x14_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000022_40x28_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000131_80x56_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000130_160x112_6"
}
]
},
{
"name": "Fixup",
"targets": [
{
"type": "draw_started",
"texture_filename": "tex1_240x224_05a5e9c230d056cc_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000182_640x448_5"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000380_320x224_6"
},
{
"type": "draw_started",
"texture_filename": "efb1_n000380_240x224_6"
}
]
}
],
"features":
[
{
"group": "CustomBloom",
"action": "skip"
},
{
"group": "Fixup",
"action": "skip"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000038_160x120_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000038_160x120_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000167_80x58_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000043_80x56_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000013_80x60_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000015_320x224_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000015_320x224_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,23 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000069_80x60_4"
},
{
"type": "efb",
"texture_filename": "efb1_n000068_160x120_4"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,23 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "autofire372"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000023_320x224_4"
},
{
"type": "efb",
"texture_filename": "efb1_n000024_320x224_4"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "Stalin15"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000010_80x60_6"
}
]
}
]
}
@@ -2,7 +2,7 @@
"meta":
{
"title": "Bloom and DOF Texture Definitions",
"author": "linckandrea"
"author": "linckandrea, iwubcode"
},
"groups":
[
@@ -15,7 +15,7 @@
},
{
"type": "efb",
"texture_filename": "efb1_n21_20x15_1"
"texture_filename": "efb1_n21_40x30_1"
}
]
},
@@ -25,10 +25,6 @@
{
"type": "efb",
"texture_filename": "efb1_n10_320x240_4"
},
{
"type": "efb",
"texture_filename": "efb1_n11_320x240_1"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,23 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000010_82x58_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000011_42x30_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,23 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000010_82x58_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000011_42x30_6"
}
]
}
]
}
@@ -2,7 +2,7 @@
"meta":
{
"title": "Bloom Texture Definitions",
"author": "Silent Hell"
"author": "Silent Hell, FrankyBuster"
},
"groups":
[
@@ -13,37 +13,17 @@
"type": "efb",
"texture_filename": "efb1_n000007_160x120_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000008_160x120_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000009_80x60_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000010_80x60_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000011_40x30_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000012_40x30_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000013_20x15_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000014_20x15_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000015_160x120_6"
}
]
}
Whitespace-only changes.
@@ -0,0 +1,23 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "Dr. Azathoth"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_320x240_6"
},
{
"type": "efb",
"texture_filename": "efb1_640x480_1"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000690_80x56_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,23 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000102_80x66_6"
},
{
"type": "efb",
"texture_filename": "efb1_n000025_320x232_6"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000038_80x60_4"
}
]
}
]
}
Whitespace-only changes.
@@ -0,0 +1,19 @@
{
"meta":
{
"title": "Bloom Texture Definitions",
"author": "iwubcode"
},
"groups":
[
{
"name": "Bloom",
"targets": [
{
"type": "efb",
"texture_filename": "efb1_n000102_80x66_6"
}
]
}
]
}
+5
View File
@@ -20,6 +20,11 @@ if(CCACHE_BIN)
set(CCACHE_BINARY ${CCACHE_BIN})
endif()
if(LibUSB_TYPE STREQUAL Bundled)
set(LibUSB_FOUND TRUE)
set(SDL_HIDAPI_LIBUSB_SHARED OFF)
endif()
add_subdirectory(SDL)
if (TARGET SDL3)
+5 -1
View File
@@ -13,7 +13,11 @@ set(HTTP_ONLY ON)
set(CURL_USE_LIBPSL OFF)
set(CURL_USE_LIBSSH2 OFF)
set(CURL_ZLIB OFF CACHE BOOL "" FORCE)
set(CURL_ZSTD OFF)
set(CURL_ZSTD OFF CACHE BOOL "" FORCE)
set(CURL_BROTLI OFF CACHE BOOL "" FORCE)
set(ZLIB_FOUND FALSE) # TODO: Remove once we update to cURL >=8.17.1 https://github.com/curl/curl/pull/20147
set(ZSTD_FOUND FALSE) # TODO: Same as above
set(BROTLI_FOUND FALSE) # TODO: Same as above
set(USE_LIBIDN2 OFF)
set(USE_NGHTTP2 OFF)
+12 -1
View File
@@ -125,4 +125,15 @@ check_include_files(sys/timerfd.h HAVE_TIMERFD)
check_include_files(unistd.h HAVE_UNISTD_H)
configure_file(config.h.in config.h)
add_library(LibUSB::LibUSB ALIAS usb)
# We don't create an ALIAS here so that dependencies (SDL) that try_compile libusb
# don't fail due to LibUSB::LibUSB being an alias target
add_library(LibUSB::LibUSB INTERFACE IMPORTED GLOBAL)
target_link_libraries(LibUSB::LibUSB
INTERFACE
usb
)
target_include_directories(LibUSB::LibUSB
INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/libusb/libusb
)
-2
View File
@@ -64,8 +64,6 @@ Dolphin includes or links code of the following third-party software projects:
[LGPLv2.1+](http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/LICENSE)
- [Qt5](http://qt-project.org/):
[LGPLv3 and other licenses](http://doc.qt.io/qt-5/licensing.html)
- [rangeset](https://github.com/AdmiralCurtiss/rangeset)
[zlib license](https://github.com/AdmiralCurtiss/rangeset/blob/master/LICENSE)
- [SDL](https://www.libsdl.org/):
[zlib license](http://hg.libsdl.org/SDL/file/tip/COPYING.txt)
- [SFML](http://www.sfml-dev.org/):
+1
View File
@@ -11,6 +11,7 @@ if(NOT MSVC)
endif()
if(ANDROID)
target_compile_definitions(mgba PUBLIC ENABLE_VFS_FD)
target_compile_definitions(mgba PRIVATE -Dfutimes=futimens)
endif()
+35
View File
@@ -3,7 +3,42 @@ set(MZ_BUILD_TESTS OFF)
set(MZ_BUILD_UNIT_TESTS OFF)
set(MZ_BUILD_FUZZ_TESTS OFF)
set(MZ_CODE_COVERAGE OFF)
set(MZ_FETCH_LIBS OFF)
set(MZ_BZIP2 OFF)
set(MZ_PKCRYPT OFF)
set(MZ_WZAES OFF)
set(MZ_OPENSSL OFF)
set(MZ_LIBBSD OFF)
set(SKIP_INSTALL_ALL ON)
if(Iconv_TYPE STREQUAL Bundled)
set(CMAKE_DISABLE_FIND_PACKAGE_Iconv TRUE)
set(Iconv_FOUND TRUE)
set(Iconv_LIBRARIES Iconv::Iconv)
get_target_property(Iconv_INCLUDE_DIRS ${Iconv_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES)
endif()
if(LibLZMA_TYPE STREQUAL Bundled)
set(CMAKE_DISABLE_FIND_PACKAGE_LibLZMA TRUE)
set(LIBLZMA_FOUND TRUE)
set(LIBLZMA_LIBRARIES LibLZMA::LibLZMA)
get_target_property(LIBLZMA_INCLUDE_DIRS ${LIBLZMA_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES)
endif()
if(ZLIB_TYPE STREQUAL Bundled)
set(CMAKE_DISABLE_FIND_PACKAGE_ZLIB TRUE)
set(ZLIB_FOUND TRUE)
set(ZLIB_LIBRARIES ZLIB::ZLIB)
get_target_property(ZLIB_INCLUDE_DIRS ${ZLIB_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES)
endif()
if(ZSTD_TYPE STREQUAL Bundled)
set(CMAKE_DISABLE_FIND_PACKAGE_ZSTD TRUE)
set(ZSTD_FOUND TRUE)
set(ZSTD_LIBRARIES zstd::zstd)
get_target_property(ZSTD_INCLUDE_DIRS ${ZSTD_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES)
endif()
# minizip-ng otherwise uses system libraries when we provide them above
set(CMAKE_DISABLE_FIND_PACKAGE_PkgConfig TRUE)
set(PKGCONFIG_FOUND FALSE)
add_subdirectory(minizip-ng)
dolphin_disable_warnings(minizip-ng)
-4
View File
@@ -1,4 +0,0 @@
add_library(RangeSet::RangeSet INTERFACE IMPORTED GLOBAL)
set_target_properties(RangeSet::RangeSet PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_LIST_DIR}/include
)
-17
View File
@@ -1,17 +0,0 @@
Copyright (c) 2020 Admiral H. Curtiss
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
+2701 -2497
View File
File diff suppressed because it is too large. Load diff
+2699 -2494
View File
File diff suppressed because it is too large. Load diff
+2700 -2495
View File
File diff suppressed because it is too large. Load diff
+2700 -2495
View File
File diff suppressed because it is too large. Load diff
Loaded 100 of 366 files, more files were not shown because too many files have changed in this diff. Show more