Commit Graph

31254 Commits

Author SHA1 Message Date
mitaclaw
6c3024c3b1 CachedInterpreter: Combine Interpret, CheckDSI, CheckProgram, and WritePC
I tried making the new templated Interpret callback test only the relevant exceptions (EXCEPTION_DSI, EXCEPTION_PROGRAM, or both), but didn't find a significant performance boost in it. As I am learning, the biggest bottleneck is the number of callbacks emitted, not usually the actual contents of them.
2024-07-23 14:09:57 -07:00
mitaclaw
ae43b10eff CachedInterpreter: Use CodeOp::canEndBlock
This was a bigger performance boost than I expected.
2024-07-23 14:07:02 -07:00
mitaclaw
818647d694 CachedInterpreter: WritePC optimizations
WritePC is now needed far less, only for instructions that end the block. Unfortunately, WritePC still needs to update `PowerPCState::npc` to support the false path of conditional branch instructions. Both drawbacks should be smoothed over by optimized cached instructions in the future.
2024-07-23 14:06:40 -07:00
mitaclaw
0282fa7adb CachedInterpreter: Exception Check Callback Micro-Optimization
This saves two register pushes / pops.
2024-07-23 14:06:22 -07:00
mitaclaw
f79520a906 Cached Interpreter 2.0
It now supports variable-sized data payloads and memory range freeing. It's a little faster, too.
2024-07-23 14:06:21 -07:00
Admiral H. Curtiss
c71ccb548e
AchievementManager: Fix incorrect check on network request return value in FetchBadge() 2024-07-23 20:49:12 +02:00
Admiral H. Curtiss
2d8f54fdd2
Merge pull request #12862 from SuperSamus/debugger-fixes
Debugger: Various fixes
2024-07-23 20:36:34 +02:00
Admiral H. Curtiss
7db5caf43e
Merge pull request #12943 from Tilka/list_recursively
DolphinTool: list filesystem recursively
2024-07-23 19:56:07 +02:00
mitaclaw
ffc7bcfbf8 Emitters: Define Trivial Getters Inline 2024-07-21 21:35:29 -07:00
Dentomologist
384e044437 QtUtils/ClearLayoutRecursively: Fix potential crash
Use QObject->deleteLater() instead of the delete operator to destroy
child widgets of the layout. This prevents crashes caused by pending
events trying to access the now-destroyed widget.
2024-07-21 17:36:05 -07:00
Tillmann Karras
191b36976c DolphinTool: list filesystem recursively 2024-07-21 19:16:00 +01:00
Tilka
7bd2a7bde3
Merge pull request #12945 from Tilka/erase_if
Use C++20 erase_if() instead of erase(remove_if()) (NFC)
2024-07-21 19:06:55 +01:00
SimoneN64
2dcb612497 Change OperandDesc variables to not be underscore-prefixed in order to comply with https://eel.is/c++draft/lex.name#3.1 (fixes compilation under newlib; e.g. devkitPro) 2024-07-21 18:35:38 +02:00
Tillmann Karras
982893b04c Use C++20 erase_if() instead of erase(remove_if()) (NFC) 2024-07-21 16:36:06 +01:00
Admiral H. Curtiss
1fcb2ee5c1
Merge pull request #12936 from vabold/ios-inaccuracy
IOS: Fix return code inaccuracy
2024-07-19 21:27:07 +02:00
Admiral H. Curtiss
139e6f6f1b
Merge pull request #12941 from LillyJadeKatrin/retroachievements-leaderboard-spam-fix
RetroAchievements - Leaderboard Spam Fix
2024-07-18 21:15:38 +02:00
LillyJadeKatrin
8bb2f98c6a Properly Populate Player Index
The player_index field in question is ultimately what gets used to determine which ranks get displayed in the leaderboards chart, and because this was missing the chart was simply displaying the top four results no matter what.
2024-07-17 22:53:15 -04:00
LillyJadeKatrin
5ccd157c94 Re-enable Leaderboards Tab 2024-07-17 22:51:43 -04:00
LillyJadeKatrin
e7504d0b12 Remove Leaderboard Fetch when Getting Info
The cause of the leaderboard spam was primarily this call where if there was an attempt to get leaderboard info and there wasn't already, there would be a fetch request. This is bad for many reasons: some games have hundreds of boards that will be fetched at startup, if there's simply no data to populate that board, this will just continue to fetch every time the dialog needs to update. To mitigate this, I simply don't load leaderboard information until there are events for that leaderboard - less information for the player, sadly, but heavily cuts down on the number of leaderboard fetches.
2024-07-17 22:51:24 -04:00
LillyJadeKatrin
d19aa934ae Fixed incorrect unlock information in Achievements dialog 2024-07-17 04:36:53 -04:00
OatmealDome
cc3ff347b4
Merge pull request #12928 from LillyJadeKatrin/retroachievements-disable-lboard-tab
Disable Leaderboards Tab
2024-07-15 21:33:08 -04:00
Admiral H. Curtiss
63e1419396
AchievementManager: Don't point to stack for login error message 2024-07-15 23:24:04 +02:00
Aiden
c50689355b IOS: Fix return code inaccuracy
Co-Authored-By: Mike <99037623+MikeIsAStar@users.noreply.github.com>
2024-07-15 16:11:15 -04:00
Admiral H. Curtiss
50b318cc31
Qt/AchievementHeaderWidget: Don't crash when we get an empty player or game badge 2024-07-15 21:55:47 +02:00
Admiral H. Curtiss
d665175a2b
AchievementManager: Return the default player and game badges if the current one isn't loaded yet
This saves some copying and fixes an issue where the default badges disappear after a game was closed
2024-07-15 21:55:23 +02:00
Admiral H. Curtiss
b18661f15d
Merge pull request #12931 from AdmiralCurtiss/cannot-pause-message
AchievementManager: Improve error message for repeated pausing
2024-07-15 12:05:45 +02:00
OatmealDome
12a1607385
Merge pull request #12749 from LillyJadeKatrin/retroachievements-menubar
Show Achievements in Menu Bar always
2024-07-14 19:13:08 -04:00
Admiral H. Curtiss
7a36d5373a
AchievementManager: Improve error message for repeated pausing 2024-07-14 23:09:53 +02:00
Admiral H. Curtiss
a0fc8e6b13
Merge pull request #12929 from LillyJadeKatrin/retroachievements-leaderboard-fixes
Fix Leaderboards Tab
2024-07-14 16:47:59 +02:00
LillyJadeKatrin
0108ecebcb Fix Leaderboards Tab
Now that we have some test data, it wasn't showing up in the leaderboards tab; this fixes it to ensure (1) that the right ID is being passed to UpdateRow and (2) the map of leaderboard entries is being populated correctly.
2024-07-14 10:13:27 -04:00
Admiral H. Curtiss
a273dc2de2
Merge pull request #12924 from JosJuice/ra-unverified-ini-osd
RetroAchievements: Show OSD messages also for unverified INI files
2024-07-14 04:15:05 +02:00
Admiral H. Curtiss
f928fe97af
Merge pull request #12925 from LillyJadeKatrin/retroachievements-unlocked-progress
Achievements Progress Bar Tweaks
2024-07-14 04:11:02 +02:00
Admiral H. Curtiss
95933d5158
Merge pull request #12907 from GaryOderNichts/fix/init_ipc_running
IOS::HLE::EmulationKernel::InitIPC: Fix WiiIPC ack generation
2024-07-12 16:48:37 +02:00
LillyJadeKatrin
193c863f20 Disable Leaderboards Tab
Emergency PR to disable the leaderboards tab for launch if we are not satisfied with its testing yet.
2024-07-12 07:45:04 -04:00
GaryOderNichts
82b97ca904 IOS::HLE::EmulationKernel::InitIPC: Fix WiiIPC ack generation 2024-07-11 19:41:28 +02:00
LillyJadeKatrin
e035db9127 Update game progress bar to match achievement progress bar 2024-07-10 18:51:37 -04:00
LillyJadeKatrin
073426ead7 Force progress bar to 100% on completed achievements 2024-07-10 08:51:13 -04:00
JosJuice
1bf12a50c2 RetroAchievements: Show OSD messages also for unverified INI files
Currently we're showing OSD messages for unknown patches in known INI
files, but not for unknown patches in unknown INI files. I don't think
this distinction makes much sense to the user. If there's a patch the
user can't use, they probably want to be aware of that fact.
2024-07-10 13:16:54 +02:00
Admiral H. Curtiss
321c4649a5
Merge pull request #12921 from VampireFlower/master
BreakpointWidget: Correct icon position
2024-07-10 03:25:49 +02:00
VampireFlower
afa6e26e5d BreakpointWidget: Correct icon position
Co-Authored-By: TryTwo <10532806+TryTwo@users.noreply.github.com>
2024-07-09 15:20:56 -07:00
JosJuice
e6b9091ffc RetroAchievements: Skip LoadApprovedList if there are no patches
There being no active patches is by far the most common case, so let's
optimize for this case.
2024-07-09 09:55:51 +02:00
JosJuice
f59678842b RetroAchievements: Delay calling LoadApprovedList
0c14b0c8a7 made Dolphin load a file from
the Sys folder the first time AchievementManager::GetInstance() is
called. Because Android calls AchievementManager::GetInstance() from
setBackgroundExecutionAllowedNative, this had two negative consequences
on Android:

1. The first time setBackgroundExecutionAllowedNative gets called is
   often before directory initialization is done. Getting the path of
   the Sys folder before directory initialization is done causes a crash.
2. setBackgroundExecutionAllowedNative is called from the GUI thread,
   and we don't want file I/O on the GUI thread for performance reasons.

This change makes us load the data from the Sys folder the first time
the data is needed instead. This also saves us from having to load the
data at all when hardcore mode is inactive.
2024-07-09 09:55:07 +02:00
Admiral H. Curtiss
01a2cf8db9
Merge pull request #12919 from JosJuice/set-background-execution-allowed-crash
Fix AchievementManager::SetBackgroundExecutionAllowed crash
2024-07-08 01:13:25 +02:00
JosJuice
95e2064099 Fix AchievementManager::SetBackgroundExecutionAllowed crash
We mustn't use m_system when it is nullptr. This was causing Dolphin to
crash on Android whenever an activity was recreated or resumed while
emulation is running, which is super common.
2024-07-07 23:56:10 +02:00
Admiral H. Curtiss
c4db83ce09
Merge pull request #12920 from TellowKrinkle/XXHashLink
Properly link against xxhash
2024-07-07 23:49:01 +02:00
Admiral H. Curtiss
b10d62cf66
Merge pull request #12913 from LillyJadeKatrin/retroachievements-allowlist-test
RetroAchievements - Patch Allowlist Unit Test
2024-07-07 23:48:09 +02:00
Admiral H. Curtiss
3ca50f7879
Implement File::GetExePath() for FreeBSD 2024-07-07 21:09:50 +02:00
LillyJadeKatrin
0c14b0c8a7 Add Approved Patch Allowlist for Achievements
Prototype of a system to whitelist known game patches that are allowed to be used while RetroAchievements Hardcore mode is active. ApprovedInis.txt contains known hashes for the ini files as they appear in the repo, and can be compared to the local versions of these files to ensure they have not been edited locally by the player. ApprovedInis.txt is hashed and verified similarly first, with its hash residing as a const string within AchievementManager.h, ensuring ApprovedInis and the hashes within cannot be modified without editing Dolphin's source code and recompiling completely.
2024-07-07 13:42:09 -04:00
TellowKrinkle
cab6e7c12e Properly link against xxhash
Things using dolphin_find_optional_system_library need to link against the name used there or they won't work with both the system and bundled cases
2024-07-06 16:56:44 -05:00
Admiral H. Curtiss
02e1b94149
Merge pull request #12905 from LillyJadeKatrin/retroachievements-hotkey
Add Open Achievements Hotkey
2024-07-06 14:23:47 +02:00
LillyJadeKatrin
8b427de28f Remove popups for challenges
The challenge popups have proven to be excessive and are no longer useful thanks to the achievements hotkey. Instead, those events will ask for an immediate RP-level update to the achievements dialog, which will among other things re-sort the dialog to show challenges on top faster.
2024-07-06 07:36:31 -04:00
LillyJadeKatrin
2372b6a386 Add Open Achievements Hotkey
Adds a hotkey to pause emulation and bring up the Achievements dialog.
2024-07-06 07:36:31 -04:00
Martino Fontana
5b13903e6a Intepreter: Step before checking for breakpoints
This way, by pressing Continue on top of a breakpoint, the emulation will actually continue (like on Cached Interpreter and JIT), instead of doing nothing.
2024-07-05 21:33:23 +02:00
Martino Fontana
719af828e5 BreakpointWidget: Can create new breakpoints when emulation isn't running
It works perfectly fine, so why not? Also, consistency with CodeViewWidget.
2024-07-05 21:33:23 +02:00
Martino Fontana
bd3cf67cbc Debugger: Rework temporary breakpoints
Before:
1. In theory there could be multiple, but in practice they were (manually) cleared before creating one
2. (Some of) the conditions to clear one were either to reach it, to create a new one (due to the point above), or to step. This created weird behavior: let's say you Step Over a `bl` (thus creating a temporary breakpoint on `pc+4`), and you reached a regular breakpoint inside the `bl`. The temporary one would still be there: if you resumed, the emulation would still stop there, as a sort of Step Out. But, if before resuming, you made a Step, then it wouldn't do that.
3. The breakpoint widget had no idea concept of them, and will treat them as regular breakpoints. Also, they'll be shown only when the widget is updated in some other way, leading to more confusion.
4. Because only one breakpoint could exist per address, the creation of a temporary breakpoint on a top of a regular one would delete it and inherit its properties (e.g. being log-only). This could happen, for instance, if you Stepped Over a `bl` specifically, and pc+4 had a regular breakpoint.

Now there can only be one temporary breakpoint, which is automatically cleared whenever emulation is paused. So, removing some manual clearing from 1., and removing the weird behavior of 2. As it is stored in a separate variable, it won't be seen at all depending on the function used (fixing 3., and removing some checks in other places), and it won't replace a regular breakpoint, instead simply having priority (fixing 4.).
2024-07-05 21:33:22 +02:00
Admiral H. Curtiss
6ddfdc1483
Merge pull request #12915 from AdmiralCurtiss/sha1-span
Common/Crypto/SHA1: Use span and string_view for Context::Update()
2024-07-05 21:15:00 +02:00
JMC47
2812e6116e
Merge pull request #12851 from iwubcode/texture_asset_from_to_json_sampler
VideoCommon: add way to serialize Texture Asset to json, update to deserialize values independently
2024-07-05 14:36:42 -04:00
Admiral H. Curtiss
5ea3d9fca0
Merge pull request #12856 from LillyJadeKatrin/retroachievements-pause-v2
Handle Pausing in AchievementManager
2024-07-04 22:53:04 +02:00
Admiral H. Curtiss
3a63633be3
Common/Crypto/SHA1: Use span and string_view for Context::Update() 2024-07-04 22:37:07 +02:00
LillyJadeKatrin
bf97305a60
AchievementManager: Cache Badges on Disk
Badges are saved in /User/Cache/RetroAchievements on first download and reused from there instead of redownloaded.
2024-07-04 22:12:28 +02:00
LillyJadeKatrin
360f899f68
Common/Crypto/SHA1: Add DigestToString() utility function 2024-07-04 22:12:20 +02:00
Admiral H. Curtiss
bb4e8d0d01
Merge pull request #12888 from TryTwo/Fix_Window_Titlebar
MainWindow: Bugfix. Windows Dark mode titlebar not being set.
2024-07-04 21:13:19 +02:00
Admiral H. Curtiss
1fb4dbcea4
Merge pull request #12784 from TryTwo/PR_Frame_Advance_Fix
Frame Advance:  Fix UI update spam when continuously advancing.
2024-07-04 20:07:03 +02:00
Martino Fontana
037de1ce92 Debugger: fix Run to Here
Now it actually does what it says on the name, instead of creating a breapoint and doing nothing else (not even updating the widget).
Also, it now can't be selected if emulation isn't running.
Closes https://bugs.dolphin-emu.org/issues/13532
2024-07-02 18:29:42 +02:00
Martino Fontana
8235c38df7 Debugger: Small other cleanup
Change misleading names.
Fix function usage: Intepreter and Step Out will not check breakpoints in their own wrong way anymore (e.g. breaking on log-only breakpoints).
2024-07-02 18:29:42 +02:00
Martino Fontana
9aeeea3762 Debugger: Small Breakpoint cleanup
Reuse more code, change misleading names, remove useless documentation, add useful documentation
2024-07-02 18:29:42 +02:00
GaryOderNichts
b5ccb59feb IOS::HLE::STMImmediateDevice: Add IOCTL_STM_WRITEDMCU 2024-07-02 15:40:59 +02:00
JMC47
f4c6311b91
Merge pull request #12904 from LillyJadeKatrin/retroachievements-challenge-popups
Add Messages for Challenges
2024-07-01 14:35:15 -04:00
LillyJadeKatrin
44af48a11f Add Messages for Challenges
Starting or ending a challenge now displays a popup naming and describing the challenge along with the active icon.
2024-07-01 06:56:59 -04:00
Admiral H. Curtiss
0ab2f56258
Merge pull request #12899 from OatmealDome/release-tag-commits-ahead
ScmRevGen: Set commits ahead to zero when on a tag
2024-06-30 20:45:22 +02:00
Tilka
7f0ee9dddd
Merge pull request #12894 from deReeperJosh/infinity-base-numbers
IOS/USB: Use Enum for Infinity Base Positions
2024-06-30 16:04:20 +01:00
Tilka
c19187f0c7
Merge pull request #12898 from AdmiralCurtiss/speedhacks
Core/PatchEngine: Remove remnants of Speedhack system
2024-06-30 15:58:51 +01:00
LillyJadeKatrin
33081184bb Handle Pausing in AchievementManager
There are two pieces of functionality to be added here. One, we want to disallow pausing too frequently, as it may be used as an artificial slowdown. This is handled within the client, which can tell us if a pause is allowed. Two, we want to call rc_client_idle on a periodic basis so the connection with the server can be maintained even while the emulator is paused.
2024-06-30 07:05:54 -04:00
Sintendo
9af7772d91 JitArm64_Paired: Remove unused temp_gpr from ps_arith 2024-06-30 09:54:09 +02:00
Sintendo
0e58b3cfb7 JitArm64_FloatingPoint: Remove unused temp_gpr from fp_arith 2024-06-30 09:53:48 +02:00
JMC47
cff37a9f4f
Merge pull request #12896 from LillyJadeKatrin/retroachievements-visual-improvements
RetroAchievements - Dialog Visual Improvements
2024-06-30 01:30:34 -04:00
OatmealDome
35f383d9b0 ScmRevGen: Set commits ahead to zero when on a tag 2024-06-29 22:59:40 -04:00
Sintendo
d877cfa4e2 JitArm64_Integer: Optimize subfic for zero
When the immediate value is zero, we can do a negation. On ARM64 the NEG
/NEGS instructions are just an alias for SUB/SUBS with a hardcoded WZR.

Before:
```
ldr    w22, [x29, #0x28]
mov    w21, #0x0                 ; =0
subs   w22, w21, w22
```

After:
```
ldr    w22, [x29, #0x28]
negs   w22, w22
```
2024-06-29 23:08:02 +02:00
iwubcode
36ccbbc06e VideoCommon: add ability to serialize a texture asset metadata to json 2024-06-29 14:50:40 -05:00
iwubcode
1c3402502b VideoCommon: set individual texture asset filter/wrap values when loading from json 2024-06-29 14:50:40 -05:00
iwubcode
75a0a1ed67 VideoCommon: update texture asset to properly set near sampler state value 2024-06-29 14:50:40 -05:00
LillyJadeKatrin
de7bf2b6a5 Move achievement dialog scrollbars to top when changing games 2024-06-29 07:02:17 -04:00
LillyJadeKatrin
0615db9e2e Made progress bars more legible in dark mode 2024-06-29 07:02:17 -04:00
LillyJadeKatrin
56e1c23413 Fixed floating overlapping leaderboard bucket headers 2024-06-29 07:02:17 -04:00
Admiral H. Curtiss
bef2275f31
Core/PatchEngine: Remove remnants of Speedhack system
All usages of this have been removed many years ago in cbe9c3e040
2024-06-28 17:57:53 +02:00
Dentomologist
c46c010ae3 AchievementManager: Fix -Wignored-qualifiers warning
Fix warning on Android builder by returning bool instead of const bool.
2024-06-27 14:36:14 -07:00
Joshua de Reeper
cfcdaab514 IOS/USB: Use Enum for Infinity Base Positions 2024-06-27 20:57:27 +01:00
Admiral H. Curtiss
233ea58446
Merge pull request #12877 from LillyJadeKatrin/retroachievements-auto-update
Update Achievement List when Rich Presence Updates
2024-06-27 20:30:01 +02:00
LillyJadeKatrin
7ffcde3ab3 Fixed misaligned borders on unlocked achievement badges 2024-06-26 22:41:39 -04:00
LillyJadeKatrin
16e868b46a Removed large empty space at the bottom of achievement/leaderboard lists 2024-06-26 22:41:11 -04:00
TryTwo
f29fe15d77 FrameAdvance: Fix continuous frame advancing while the debug UI is open. Blocks signals from being spammed to update the UI. 2024-06-26 16:19:03 -07:00
JosJuice
bc67fc97c3 Revert "Audit uses of IsRunning and GetState"
This reverts commit 72cf2bdb87.

SYSCONF settings are getting cleared when they shouldn't be. Let's
revert the change until I get proper time to figure out why it's broken.
2024-06-26 20:36:46 +02:00
LillyJadeKatrin
1a33e28452 Update Achievement Sort and Progress on RP
Whenever a request to update the Rich Presence comes in, typically every ten seconds, the Achievement Progress Widget will update the sort order of the achievements and all of their measured values.
2024-06-25 23:05:56 -04:00
OatmealDome
9c432e960b AboutDialog: Update copyright year to 2024 2024-06-24 15:06:54 -04:00
OatmealDome
f8f117e599 GeneralPane: Update "Beta" auto update track to "Releases" 2024-06-24 15:06:37 -04:00
JosJuice
01b44837f4 Android: Track whether app is in foreground 2024-06-23 18:16:33 -04:00
JMC47
c536754ffe
Merge pull request #12878 from LillyJadeKatrin/retroachievements-hardcore-state-changed
Decouple Hardcore from EmulationStateChanged
2024-06-23 18:13:56 -04:00
Admiral H. Curtiss
e9e29daca4
Merge pull request #12872 from LillyJadeKatrin/retroachievements-start-session-bug
Add MemoryVerifier to AchievementManager Startup
2024-06-23 21:18:34 +02:00
TryTwo
81fc60f888 MainWindow: Remove Show() and redistribute its logic to other places.
bugfix:  SetQWidgetWindowDecorations(this); not called before show() for Windows darkmode titlebars.

The actual call to (QWidget) show() needed to come sooner. Show() was originally left alone, but with other checks needing to move with (QWidget) show(), this function became less useful.  Show()  was originally created to fix the render widget appearing behind the main window, but that appears to work fine in this iteration.
2024-06-23 10:49:14 -07:00
Admiral H. Curtiss
2aec195ec8
Merge pull request #12876 from dreamsyntax/advanced-cpu-clock-override-step-adjustment
DolphinQt: Adjust CPU Clock Override slider
2024-06-23 15:28:29 +02:00