Compare commits

...

1157 Commits

Author SHA1 Message Date
Stenzek
09a3c99c3b AudioStream: Fix crash with timestretch disabled 2025-08-13 16:39:01 +10:00
Davide Pesavento
0a53bc47c3 Qt: Remove redundant layout from AchievementSettingsWidget 2025-08-12 21:48:24 +10:00
Davide Pesavento
0fc9de781f Qt: Fix crash toggling achievements in per-game settings 2025-08-12 21:48:24 +10:00
Stenzek
47e8d90e25 GPU: Fix screenshot size when showing VRAM 2025-08-12 00:33:59 +10:00
Stenzek
a2c015b907 GameDB: Disable WS/PGXP on 2D Final Fantasy games 2025-08-11 22:39:01 +10:00
Stenzek
fc129a9733 GameDB: Alien Resurrection
Needs PGXP-CPU for gaps in geometry.
2025-08-11 13:20:04 +10:00
Stenzek
cdd0086c54 Qt: Fix toggling read/write breakpoints 2025-08-11 12:10:14 +10:00
Davide Pesavento
9576a3adf1 Achievements: Fix "beaten" condition (#3506)
Apparently there are sets (e.g. Colin McRae Rally) with zero
progression achievements.
2025-08-11 12:10:01 +10:00
Davide Pesavento
de2d6d1aa0 Qt: More accurate game list column width estimation (#3505)
Three main changes:
1. Use the pixel metrics of the style instead of hardcoded values.
2. Account for the potential sort indicator in the column header.
3. In the two "Size" columns, the largest numerical value does not
   necessarily result in the widest text string, so just use the
   value 8888.88 to estimate the width (we assume that 8 is the
   widest digit, which is true for many proportional fonts).
2025-08-11 12:09:52 +10:00
Stenzek
c519d3ca76 GameDB: Add analog joystick to supported games
Data from manual testing and https://docs.google.com/spreadsheets/d/11xMh5utlKDukC3sWWQUUWPj4NSrJH5ouvOsHFRC_egs/edit?usp=sharing
2025-08-10 14:41:00 +10:00
Stenzek
2a2a011854 FullscreenUI: Improve title padding of achievements
Need to redo this whole dialog's layout, but this'll do for now.
2025-08-09 21:19:43 +10:00
Davide Pesavento
d65c8a3073 Achievements: Keep track of the earliest unlocked win condition (#3504)
For sets that have more than one win condition, e.g. RE2.
2025-08-09 18:01:01 +10:00
Stenzek
9b99d997f5 Achievements: Fix display of game completion date 2025-08-09 17:03:50 +10:00
Davide Pesavento
b75be05971 Achievements: Fix counting progression achievements (#3503) 2025-08-09 16:40:31 +10:00
Stenzek
a84d583c42 CI: Missed one workflow 2025-08-09 16:40:10 +10:00
Stenzek
7830a6d236 Deps: Bump to SDL3 3.2.20 2025-08-09 13:53:26 +10:00
Davide Pesavento
a5c61383a8 GameDB: Disable disc speedup on MDEC for Star Ocean - The Second Story 2025-08-09 12:47:36 +10:00
Davide Pesavento
4e662f1fff GameDB: Add compatibility rating to a couple of games 2025-08-09 12:47:36 +10:00
Davide Pesavento
474d5dc9db GameDB: Delete obsolete comment
Works fine for me with fast boot and even with maximum disc speedup.
2025-08-09 12:47:36 +10:00
Davide Pesavento
2f8460b90c GameDB: Disable disc speedup on MDEC for Chrono Cross 2025-08-09 12:47:36 +10:00
Davide Pesavento
1984d8c85b GameDB: Disable widescreen for Arc the Lad II 2025-08-09 12:47:36 +10:00
KamFretoZ
20e9b8d271 Qt: Fix buffer size help text (#3501) 2025-08-09 12:47:16 +10:00
Stenzek
42dc5e416d CI: Fix PR builds failing 2025-08-09 12:46:45 +10:00
Stenzek
09e785555d Qt: Fix updater download size display 2025-08-08 23:54:39 +10:00
Stenzek
45a2257436 CMake: Update version requirements 2025-08-08 23:54:39 +10:00
Stenzek
5fc4fbcf36 Qt: Improve display of version in updater 2025-08-08 23:37:25 +10:00
Stenzek
aa2a0cddb5 Data: Update SDL game controller database 2025-08-08 23:32:33 +10:00
Stenzek
e38039873e Achievements: Infer and display beaten/completed time 2025-08-08 23:32:33 +10:00
Davide Pesavento
5c48f853da GameDB: Fix cropping in Tomb Raider 4 & 5 (#3500) 2025-08-08 23:15:26 +10:00
KamFretoZ
ebbc1e98b6 Qt/Updater: Move Download Size indicator to the top (#3499) 2025-08-08 23:15:08 +10:00
Stenzek
edd63dfd9c Qt: Remove now-unused resize column helpers 2025-08-07 21:26:40 +10:00
Stenzek
670027107e Qt: Use header resize mode for disc windows 2025-08-07 21:26:40 +10:00
Stenzek
93d6fc64da Qt: Use header resize mode for memory card editor 2025-08-07 21:26:40 +10:00
Stenzek
c6c8039211 Qt: Use header resize mode for settings panels 2025-08-07 21:26:40 +10:00
Stenzek
bb7833168e Qt: Use header resize mode for memory scanner 2025-08-07 21:03:06 +10:00
Stenzek
73f326cd75 Qt: Use header resize mode for game list column widths
Simpler code, no need for workarounds in showEvent() either.
2025-08-07 21:00:22 +10:00
Stenzek
76fdbb0b38 Qt: Add tooltips for more fields in game list 2025-08-07 20:49:46 +10:00
Stenzek
a080228ee5 Qt: Don't reset model for every scanned game
Make the UI a little more responsive.
2025-08-07 20:49:46 +10:00
Davide Pesavento
2669b026d7 Qt: Remove obsolete comment
The logic was changed in 281119b812
2025-08-07 20:49:36 +10:00
Davide Pesavento
bc908aa4cc GameDB: Adjust crop area for Silent Hill 2025-08-07 20:49:36 +10:00
Stenzek
d2caabd04a Qt: Fix exit on separate window close with FSUI active 2025-08-03 15:15:47 +10:00
Stenzek
a2222d805b Qt: Fix inability to exit with HC mode active 2025-08-03 15:15:47 +10:00
Stenzek
501380ec7c Achievements: Split up overlay setting
Split into challenge indicator modes, leaderboard trackers, and progress
indicators.
2025-08-03 15:15:47 +10:00
Stenzek
e98871ad47 Settings: Remove middle padding
Why did I do this...
2025-08-03 12:27:14 +10:00
Stenzek
5c682d2325 ImGuiOverlays: Frame time history is aligned 2025-08-02 17:44:53 +10:00
Stenzek
628e41f849 ImGuiManager: Don't render when skipping present
Fixes very slow scrolling in save state selector when fast forwarding,
and generally just giving a "true" DeltaTime is probably a good thing.
2025-08-02 14:41:01 +10:00
Stenzek
fe11c658ee ImGuiOverlays: Fix save state selector out-of-order drawing
Specifically the animated background appearing in front of the
thumbnails.
2025-08-02 14:41:01 +10:00
Stenzek
be48e5c681 dep/imgui: Demo window should not enabled 2025-08-02 14:41:01 +10:00
Stenzek
143ae49f2c AudioStream: Use larger target size only when intentionally running slow
Fixes buffer underruns at fast or slow speed settings.
2025-08-02 14:41:01 +10:00
Stenzek
d3f04dcda9 AudioStream: SIMD averaging window calculation 2025-08-02 14:15:43 +10:00
Stenzek
9b4698d48c AudioStream: Back off resets that don't pass threshold over time
That way a very occasional lag/overflow doesn't cascade into
unnecessary tempo adjustment.
2025-08-02 14:15:41 +10:00
Stenzek
f464d42be5 AudioStream: Fix glitches when disabling fast-forwarding
Usually happened at high frame rates.
2025-08-02 13:33:52 +10:00
Stenzek
6c9d339855 PerformanceCounters: Align to 4 elements
And use minv()/maxv().
2025-08-02 13:33:52 +10:00
Stenzek
b81dfa205c GPU: Simplify screenshot size calculation
And don't miscalculate it for some games.
2025-08-01 19:50:27 +10:00
Stenzek
4644db00ea GPU: Fix screenshot size in uncorrected mode 2025-07-31 23:30:07 +10:00
Stenzek
a27fedae86 Qt: Various fixes to memory scanner UI
Reduce repetition in formatting.
Make formatting consistent between saving/loading watches.
Fix description display.
2025-07-30 22:39:53 +10:00
Stenzek
02a1ccbcdc Qt: Persist memory scanner watch list across instances
i.e. save it to a file.
2025-07-30 22:21:35 +10:00
Stenzek
52d9f73f98 Misc: Replace a bunch of static qualifiers with inline
Allows deduplication, shaves a couple percent off the debug binary size.
Release binary size difference is negligible.
2025-07-30 21:43:12 +10:00
Stenzek
c8dd9995ec GameDatabase: Remove redundant SetRymlCallbacks() 2025-07-30 21:12:38 +10:00
Stenzek
fef553ff12 Qt: Display 'First Value' in memory scanner 2025-07-30 21:08:38 +10:00
Stenzek
a9ce005a20 Qt: Fix maximized state not saving to config
Restores the "old" position when restoring again. Except on Wayland,
where nothing works.
2025-07-30 20:30:55 +10:00
Stenzek
3768940fbb Qt: Fix assertion on shutdown after resize 2025-07-30 20:18:42 +10:00
Stenzek
690f843e2a Qt: Auto switch between any/changed values in memory scanner 2025-07-29 23:10:25 +10:00
Stenzek
5ed7961390 Qt: Refuse to start in known broken environments 2025-07-29 23:10:25 +10:00
Stenzek
30df16cc76 Scripts: Remove PKGBUILD
I originally provided this an alternative to the broken AUR packages.

However, it seems that Arch users would rather use broken packages and
keep complaining to me instead of their packager. I specifically forbid
packages for DuckStation (see README.md), and there's no way to request
removal of these packages without handing my details over to a
distribution I want nothing to do with.

So this is step one. Next step will be removing Linux support entirely,
because I'm sick of the headaches and hacks for an operating system that
only compromises 2% of the userbase, and I don't even use myself. But I'm
hoping the Linux community will be reasonable, because as someone giving
up my free time and not being compensated in any way, I shouldn't have
to deal with this.

Just grep the source for "wayland" and you'll see what I mean.
2025-07-29 23:10:22 +10:00
Stenzek
ce53e29997 Qt: Fix possible crash on shutdown 2025-07-29 20:56:58 +10:00
Stenzek
e5593c973f CI/Flatpak: Hopefully fix build cache
If this doesn't work, just going to remove it completely. So far past
the point of caring.
2025-07-29 17:37:09 +10:00
Stenzek
acf78970c6 Qt: Create main window before starting EmuThread
Stops signals such as achievements active changed being lost.
2025-07-29 17:23:18 +10:00
Stenzek
f569448ea1 System: Centralize pause checks 2025-07-29 17:23:18 +10:00
Davide Pesavento
fbca692629 GameDB: Set max speedup cycles to 70000 for Resident Evil 2 (#3496)
Freezes after (some) door transitions otherwise.
2025-07-29 17:23:05 +10:00
Davide Pesavento
e821b13ba2 GameDB: Tweak compat settings for Parasite Eve 2 (#3492)
We no longer need to disable read speedup all the time thanks to the
new DisableCDROMSpeedupOnMDEC trait. Unfortunately we still have to
increase the max speedup cycles to avoid other issues ranging from
the game simply freezing to audio glitches during area transitions.
2025-07-29 17:22:52 +10:00
Stenzek
188be7de05 Deps: Revert Harfbuzz to 11.2.1
Match Qt bundled version. Might help with crashes I can't reproduce in
text shaping.
2025-07-29 13:50:42 +10:00
Stenzek
042930d735 FullscreenUI: Fix focus loss with grid/list button 2025-07-28 20:42:50 +10:00
zkdpower
fac47b135a Update the Simple-Chinese translation to latest. (#3495) 2025-07-28 20:42:12 +10:00
Davide Pesavento
168b80dd49 Qt: Add tooltips to game list 2025-07-27 21:31:30 +10:00
Davide Pesavento
df65879d06 GPU: Fix typo 2025-07-27 21:31:30 +10:00
Stenzek
300d158320 FullscreenUI: Fix clock position in pause menu 2025-07-27 13:45:46 +10:00
Stenzek
5bfe5cf121 dep/imgui: Remap non-breaking space to space
MacOS likes to use them for formatting.
2025-07-27 13:45:08 +10:00
Stenzek
351f67a227 CMake: Use -g1 for Release builds 2025-07-27 13:03:55 +10:00
Davide Pesavento
70d6a2d1af Achievements: Revert back to long date format for unlock/submit time 2025-07-27 13:03:38 +10:00
Davide Pesavento
71591e8219 Qt: Use localized date/time formatting in a few more places 2025-07-27 13:03:38 +10:00
Stenzek
0de3ffab0c Data: Update SDL game controller database 2025-07-27 02:17:18 +10:00
Stenzek
36718c6e99 CMake: Force debug symbols on Linux
Fixes crash backtraces.
2025-07-27 02:15:49 +10:00
Stenzek
634fac4410 CrashHandler: Fix recursive backtrace on Linux 2025-07-27 02:01:58 +10:00
Stenzek
2b18df0910 MediaCapture: Don't crash if video codec supports 0 formats 2025-07-27 01:36:13 +10:00
Stenzek
44237146ef FullscreenUI: Fix remaining fixed date/time formatting locations 2025-07-27 01:25:08 +10:00
Stenzek
29e92705c4 FullscreenUI: Add option to hide grid view labels
Also handle titles that span multiple lines.
2025-07-26 23:24:02 +10:00
Stenzek
96c224497b Qt: Use selected language locale for formatting
But check the prefix against the system locale, so that e.g. en can use
the system country.
2025-07-26 22:33:10 +10:00
Stenzek
c82351a14a Qt: Implement 'System Language' language option 2025-07-26 22:33:10 +10:00
Stenzek
7f5f90338f Qt: Use application locale in most places 2025-07-26 22:33:10 +10:00
Stenzek
ef320c62a3 Qt: Cache app locale object 2025-07-26 22:33:10 +10:00
Stenzek
f91ee34fa4 Qt: Merge qttranslations.cpp with qthost.cpp
No need to keep it separate anymore since we're not precalculating glyph
ranges.
2025-07-26 22:33:10 +10:00
Stenzek
9b353f841e Misc: Use host locale formatting for dates
Fixes achievement unlocks and lasted played times being shown in US
format.
2025-07-26 22:33:09 +10:00
Stenzek
1c8699b8a0 Host: Add FormatNumber()
Formats the argument according to the system locale, instead of C.
2025-07-26 22:33:09 +10:00
Stenzek
e82218f823 Qt: Fix changing language while game running 2025-07-26 22:33:09 +10:00
Stenzek
47fe487c2e README: Add migration instructions for Flatpak->AppImage 2025-07-26 17:36:50 +10:00
Stenzek
83d521f3d8 CMake: Drop Flatpak workarounds
No longer needed since it is using self-contained.
2025-07-26 17:36:50 +10:00
Stenzek
6c4300c6c7 CI/Flatpak: Simplify deps build
I'll probably drop it in the future since there was only one or two
people who indicated that they're using it. But at least now I don't
have another file I need to keep up to date.

So consider the Flatpak package as deprecated.
2025-07-26 17:36:50 +10:00
Stenzek
3426bcdc71 Deps: Update for July 2025
SDL3 3.2.18
harfbuzz 11.3.2
libjpeg-turbo 3.1.1
libpng 1.6.50
libwebp 1.6.0
libzip 1.11.4
2025-07-26 17:36:50 +10:00
Stenzek
ad4a909aa4 FullscreenUI: Fix incorrect parent directory button 2025-07-26 14:03:43 +10:00
Stenzek
37efd34a99 Qt: Drop renderer option from setup wizard
No need when automatic renderer exists.
2025-07-26 14:03:43 +10:00
Davide Pesavento
d63ae9715f GameDB: Add missing controllers and metadata for The Legend of Dragoon 2025-07-26 14:03:32 +10:00
Davide Pesavento
6e63ceb5a2 GameDB: Add missing metadata for Koudelka
And fix the EU and NA release dates
2025-07-26 14:03:32 +10:00
Víctor "IlDucci
d28c0a00b4 Spanish (Spain) update 2025-07-25 (#3490)
- New strings have been translated.
- Corrected a typo in the "seconds" counter.
- Other minor changes.
2025-07-26 14:03:07 +10:00
Stenzek
d0e00178c3 Qt: Fix fullscreen action enabled on startup 2025-07-24 22:05:24 +10:00
Stenzek
a660c13625 System: Always adjust video size for capture
Fixes auto resolution size with non-multiple-of-4 window sizes.
2025-07-24 21:47:09 +10:00
Stenzek
22fb032f91 GPUThread: Fix very rare or impossible FIFO corruption
If the buffer wraps around once, and the GPU thread does not execute any
commands before the CPU thread reaches the end again, it could lose one
buffer's worth of commands.

Also don't keep incrementing the work count while this is happening.
Super unlikely unless a ton of data is being pushed through the FIFO.
2025-07-24 21:08:53 +10:00
Stenzek
13233cc82e PostProcessing/GLSL: Fix compile error with interface blocks 2025-07-24 12:08:53 +10:00
Stenzek
0522b6ffb5 CDImagePPF: Ignore out-of-range sectors 2025-07-23 22:00:13 +10:00
Stenzek
830b812fc7 GameDB: Set max speedup cycles to 40000 for FF8 2025-07-23 22:00:10 +10:00
Stenzek
fe51439c4b GameDB: Set DisableCDROMSpeedupOnMDEC for a couple of games 2025-07-22 23:04:01 +10:00
Stenzek
b6b1a5e33c CDROM: Add option to disable speedup on MDEC/FMVs 2025-07-22 23:03:22 +10:00
Stenzek
4f1af2f6eb Qt: Increase debugger column size 2025-07-22 22:16:25 +10:00
Stenzek
46cf8e68cd SPU: Display reverb environment in debug window 2025-07-22 22:16:25 +10:00
Stenzek
932104c581 SPU: Fix VU meter display when scrolling 2025-07-22 22:16:25 +10:00
Nahuel Gaitan
56b5b337aa PSFLoader: Fix recursive _lib loading (#3489) 2025-07-22 21:08:45 +10:00
Stenzek
46a071f3e7 Qt: Fix disabling of sprite texture filtering option 2025-07-22 20:30:34 +10:00
Stenzek
2e56f5d3ae Qt: Fix another usage of QObject::disconnect() 2025-07-22 20:28:53 +10:00
Stenzek
a5826ea6ae Qt: Hide apply image patches in game settings
Doesn't makes sense, because game settings are applied after
identification.
2025-07-22 20:18:20 +10:00
Davide Pesavento
a34aee68a7 Declare all namespace-scope constants as inline
This is the idiomatic way since C++17
2025-07-22 19:29:37 +10:00
Davide Pesavento
69da2df8e9 Make all single-argument constructors explicit 2025-07-22 19:29:37 +10:00
Davide Pesavento
9ab4e4d70c Qt: Add game list button to toggle game icons (#3488) 2025-07-21 19:05:04 +10:00
Stenzek
51ce5351d7 CI: Pin AppImageTool version
If it breaks something, I kinda don't care. Not worth it for 2% of
users..
2025-07-21 18:51:34 +10:00
Stenzek
cdd054702c CPU: Log on break exception without PCDrv 2025-07-20 21:10:00 +10:00
Stenzek
a5b46f7676 MediaCapture: Fix use-after-free when starting 2025-07-20 21:09:46 +10:00
Stenzek
161637e3b7 Qt: Disconnect safe mode widget on recreate 2025-07-20 16:58:36 +10:00
Stenzek
7c01bde94e Log: Remove redundant channel 2025-07-20 16:58:24 +10:00
Stenzek
9321a32d39 Qt: Fix startup cancellation on window close 2025-07-20 14:21:42 +10:00
Stenzek
f65ca0dab3 FullscreenUI: Don't round achievements inner progress bars 2025-07-20 14:21:42 +10:00
Stenzek
9e17e38c9d FullscreenUI: Custom draw loading screen 2025-07-20 14:21:42 +10:00
Stenzek
3199617124 FullscreenUI: Use layout scale for loading screen 2025-07-20 14:21:42 +10:00
Stenzek
df9506fbf6 FullscreenUI: Center loading screen logo 2025-07-20 14:21:42 +10:00
Stenzek
311e93fae4 FullscreenUI: Use game path for loading screen image
Makes it work with custom titles.
2025-07-20 14:21:42 +10:00
Stenzek
4440ae3b78 GPUThread: Store copy of game info
Don't save it in FullscreenUI.
2025-07-20 14:21:42 +10:00
Stenzek
5fd61b6e3a Qt: Fix disc icon being used for games without icons 2025-07-20 14:21:42 +10:00
Stenzek
df432c6c64 Qt: Fix crash booting unscanned games 2025-07-20 14:21:42 +10:00
shikulja
47d44701fe Update Russian translation (#3486)
* Update Russian translation

* Update Russian translation

* Update Russian translation

* Update Russian translation
2025-07-20 14:21:24 +10:00
Stenzek
a8506f4708 Qt: Disable more actions while system starting 2025-07-19 18:16:15 +10:00
Stenzek
ad53fc2345 Qt: Fix fullscreen UI shutdown on language change 2025-07-19 18:16:15 +10:00
Stenzek
278614a415 FullscreenUI: Display game cover when loading 2025-07-19 18:16:15 +10:00
Stenzek
75314f79de FullscreenUI: Localize base strings (e.g. dir selector) 2025-07-19 18:16:15 +10:00
Stenzek
63e0acbe9c FullscreenUI: Fix held colour in popup menus 2025-07-19 17:20:37 +10:00
Stenzek
3453c897d1 FullscreenUI: Add native cover download 2025-07-19 17:20:37 +10:00
Stenzek
a9862461f3 FullscreenUI: Add modal progress callback 2025-07-19 17:07:34 +10:00
Stenzek
c922893b6f GameDB: Bump MGS max speedup cycles to 100k
Causes screen flickering at 80k, game crash at 70k, still some
flickering at 90k.
2025-07-19 15:11:04 +10:00
Stenzek
3e232b76b3 Qt: Improve more window close behaviour
- Closing FSUI display window without a game running should not exit the
  application.
- Closing display window with FSUI started should exit the application
  in nogui mode.
2025-07-19 14:34:30 +10:00
Stenzek
8bd493eae0 Qt: Re-update main window geometry on nogui exit
Also fix the game list refresh executing on the incorrect thread.
2025-07-19 13:46:33 +10:00
Davide Pesavento
1b56940ad0 Qt: Update menu and toolbar state when toggling fullscreen via double click
Amends 1289e045b9
2025-07-19 12:14:02 +10:00
Davide Pesavento
f446e24b20 Qt: Don't exit fullscreen when switching to game list with RenderToSeparateWindow
Amends 24a16db437
2025-07-19 12:14:02 +10:00
Davide Pesavento
4c12dc8ab9 Qt: Don't enable window size menu if system isn't running (#3484) 2025-07-19 12:10:34 +10:00
Stenzek
24a16db437 Qt: Handle fullscreen cases on MacOS
If the user exits fullscreen with the window button, restore
render to main.
2025-07-19 01:04:22 +10:00
Stenzek
b545671d67 MetalDevice: Retain references to layer
Apparently the allocate method returns +0 references.
2025-07-19 01:04:19 +10:00
Stenzek
210f492487 MetalDevice: Remove pipeline cache
It seems to be broken when appending using from-source created
libraries.

Similar issues have been described in:
- https://bugreports.qt.io/browse/QTBUG-114338
- https://bugreports.qt.io/browse/QTBUG-108216
2025-07-19 01:04:19 +10:00
Stenzek
05dcb17334 Qt: Fix unused lambda capture warning 2025-07-18 20:29:44 +10:00
Stenzek
6615fc79d6 Qt: Work around autouic bug causing unnecessary recompiles 2025-07-18 20:29:24 +10:00
Stenzek
a002fd2672 Qt: Include moc sources in main source
Saves compiling a bunch of files with MSBuild.
2025-07-18 19:59:13 +10:00
Stenzek
fc613a5267 Qt: Fix incorrect placeholders in translations 2025-07-18 18:04:46 +10:00
Stenzek
9e15fe176c CI: Check placeholders in translation strings 2025-07-18 18:04:22 +10:00
Stenzek
9442ba74af Qt: Remove window state save
Instead, explicitly save the toolbar area. Also adds it to the context
menu.
2025-07-18 17:42:01 +10:00
Stenzek
b2ad193178 Qt: Store window geometry in human-readable form 2025-07-18 17:42:01 +10:00
Stenzek
6b969a0b94 Qt: Refactor and remove multiple sources of truth for render-to-main 2025-07-18 16:14:29 +10:00
Stenzek
0f2ef98747 Qt: Turn cover downloader into a non-modal window
Same as the others.
2025-07-18 13:06:01 +10:00
Stenzek
3f2b6995bc Qt: Fix timestamps in log window if file timestamps on 2025-07-18 12:46:58 +10:00
Davide Pesavento
1289e045b9 Qt: Make "Fullscreen" toolbar button and menu item checkable 2025-07-18 12:44:20 +10:00
Davide Pesavento
2f13538cc0 Qt: Fix game list icons when toggling disc set merging
Also, make sure we call beginFilterChange() in the proxy model
as mentioned in the Qt docs.
2025-07-18 12:44:20 +10:00
Davide Pesavento
4b5be29eb2 Qt: Hide GameListWidget buttons instead of disabling them 2025-07-18 12:44:20 +10:00
Davide Pesavento
21f44b3782 Qt: Refactor GameListWidget tool buttons and corresponding menu actions 2025-07-18 12:44:20 +10:00
Davide Pesavento
01b81c74ef Qt: Fix crash on triggering certain actions before display widget is created (#3482) 2025-07-18 12:43:45 +10:00
Stenzek
67381754fa Qt: Fix game start flicker with hide-main-window checked 2025-07-17 21:46:05 +10:00
Stenzek
c6cb3cdd68 Qt: Update Korean translation by Hack茶ん 2025-07-17 21:46:05 +10:00
Stenzek
6ae334b30c Qt: Avoid wildcard disconnect
See https://bugreports.qt.io/browse/QTBUG-134610
2025-07-17 21:46:05 +10:00
Stenzek
4b62ccf2ff Qt: Redirect Qt messages to logger 2025-07-17 21:46:05 +10:00
Stenzek
6f65a15bb9 CrashHandler: Catch SIGABRT 2025-07-17 21:46:05 +10:00
Stenzek
9c81425043 Qt: Fix format strings in es-ES 2025-07-17 21:46:05 +10:00
Stenzek
2aaeaf6f99 Qt: Add missing event type check 2025-07-17 21:46:05 +10:00
Daniel Nylander
da6ba416c9 Updated Swedish translation (#3481) 2025-07-16 17:11:13 +10:00
Stenzek
a890902d5b Qt: Further eliminate redundant window shows
And remove a couple of hacks.
2025-07-16 17:10:31 +10:00
Anderson Cardoso
40b081c8ff Atualiazação Português do Brasil (#3480)
Atualizado para a última versão
2025-07-16 16:39:16 +10:00
Stenzek
b07998512e Qt: Refactor render window lifecycle
Remove multiple sources of truth, eliminate bugs in handling edge cases
when switching between modes.
2025-07-16 16:38:31 +10:00
Stenzek
a5e3f163a5 Misc: Make bitfield unions trivially copyable 2025-07-13 20:29:00 +10:00
Stenzek
8ca68a052a GPUDevice: Remove unused fields 2025-07-13 20:29:00 +10:00
Stenzek
5c7a599cad Qt: Couple of consistency fixes 2025-07-13 20:29:00 +10:00
Stenzek
cd77ace12a FullscreenUI: Fix going back to root directory on Linux 2025-07-13 20:29:00 +10:00
Stenzek
2dc25a07ac NeGconRumble: Remove unused fields 2025-07-13 19:55:38 +10:00
Stenzek
b93353647f Qt: Clear help text map on reload
Saves keeping messages around for pointers that are no longer valid.
2025-07-13 17:32:56 +10:00
Stenzek
8ef97b9b46 FullscreenUI: Sort unlocked achievements by unlock time 2025-07-13 17:29:52 +10:00
Stenzek
be867c815d FullscreenUI: Minor polish to achievements list 2025-07-13 17:29:37 +10:00
Stenzek
43543ddedc FullscreenUI: Improve icons in file selector 2025-07-13 16:54:54 +10:00
Stenzek
3bb67c785e D3DCommon: Load d3d12.dll dynamically 2025-07-13 16:31:49 +10:00
Stenzek
4ead72747b D3DCommon: Load dxgi.lib dynamically 2025-07-13 16:13:19 +10:00
Stenzek
0195b2886e D3DCommon: Load d3d11.dll dynamically 2025-07-13 16:12:44 +10:00
Stenzek
3928eaff54 D3DCommon: Load D3DCompiler dynamically 2025-07-13 16:11:59 +10:00
Stenzek
5e2e39f642 VulkanDevice: Use driver type enum for auto selection 2025-07-13 15:40:53 +10:00
Stenzek
792b72b955 Qt: Reenable WinPanel style for patches
Partial revert of 7eb2b07.

Looks much worse in Fusion/default style.
2025-07-13 15:33:21 +10:00
Stenzek
97a0f4669f ShaderGen: Fix use of reserved 'packed' keyword 2025-07-13 15:28:46 +10:00
Stenzek
1cad6389aa AnalogController: Fix flipped log message 2025-07-13 15:28:46 +10:00
Davide Pesavento
7eb2b07e39 Qt: Don't draw a frame if there are no patches 2025-07-13 15:27:29 +10:00
Davide Pesavento
d0c3f7d5a2 Qt: Reduce layout margins in postprocessing settings
And remove a redundant VBoxLayout
2025-07-13 15:27:29 +10:00
Davide Pesavento
0e9f116a2e Qt: Turn retroachievements.org into a hyperlink 2025-07-13 15:27:29 +10:00
Stenzek
2fad6478b4 CDImage: Include the WAV file's details when incompatible 2025-07-11 21:25:10 +10:00
Stenzek
2308c5ddc6 Qt: Check cache when getting game icon for window
Apparently forgot this...
2025-07-10 21:33:28 +10:00
Stenzek
9e319ff495 FullscreenUI: Avoid ID duplication in choice dialogs
If two items, e.g. discs happen to have the same display name.
2025-07-10 20:39:14 +10:00
Stenzek
00623ebf8b FullscreenUI: Fix rounding on widget grab rects 2025-07-10 20:37:37 +10:00
Stenzek
f21ab0b70a GPUDevice: Fix ARM GPU detection 2025-07-10 19:36:14 +10:00
Stenzek
13e4515118 GPU: Send read command in SW if stats are enabled
Won't do anything, but it does update the counter.
2025-07-10 19:30:35 +10:00
Stenzek
5d42bbc49f GameDB: Force software for X2 - No Relief
Lots of readbacks.
2025-07-10 19:29:50 +10:00
Stenzek
cd2d0503da System: Fix frame advance+runahead stepping 2 frames 2025-07-10 12:43:23 +10:00
Stenzek
e4e57c674d GPUDevice: Use driver type fields 2025-07-10 12:17:11 +10:00
Stenzek
ef26d5cb74 GPUDevice: Backport driver type detection 2025-07-09 22:17:14 +10:00
Stenzek
1e930c4063 ShaderGen: Drop DRIVER_V3D and DRIVER_POWERVR macros
They're not needed anymore.
2025-07-09 22:12:46 +10:00
Stenzek
cc3bc120a4 OpenGLContext: Prefer GLES over GL<3.2
Ends up having a larger feature set in GLSL.
2025-07-09 21:46:45 +10:00
Stenzek
63adf475d4 VulkanDevice: Avoid defaulting to Vulkan for V3D driver
Image copies are broken.

https://discord.com/channels/695640472202379425/695823554712698962/1392128815689629707
2025-07-09 21:20:43 +10:00
Stenzek
b9a9ea220e PostProcessing/FX: Don't try to compile for GL<3.2
No interface blocks or binding layouts. Get a better driver for gosh
sake.
2025-07-09 21:17:25 +10:00
Stenzek
80a689257c PostProcessing/GLSL: Support OpenGL 3.1 2025-07-09 21:16:43 +10:00
Stenzek
742cfcb12b ShaderGen: Emit location qualifiers for SPV without interface blocks
Required for GLSL post-processing with OpenGL 3.1.
2025-07-09 21:15:56 +10:00
Stenzek
2d29c63708 ShaderGen: Emit fallback functions for GLSL < 4.0 2025-07-09 21:15:10 +10:00
Stenzek
601173b01e ShaderGen: Add UseGLSLInterfaceBlocks() 2025-07-09 21:14:51 +10:00
Stenzek
f273dcff18 GameList: Fix possible bad optional unwrap in ApplyCustomAttributes() 2025-07-09 20:05:50 +10:00
Stenzek
6f3a6d7934 Qt: Remove unused includes 2025-07-09 20:05:50 +10:00
Davide Pesavento
1bf248b299 Qt: Swap order of read/seek speedup cycles in Advanced settings
To match the order in Console settings.
2025-07-09 20:05:31 +10:00
Davide Pesavento
a012d496ea Qt: Fix resetting per-game CDROM speedup and SIO settings
Amends d2c09dfaff and 0098c60ee8
2025-07-09 20:05:31 +10:00
Davide Pesavento
cacd174642 Qt: Rearrange log settings checkboxes 2025-07-09 20:05:31 +10:00
Davide Pesavento
002cb942bb Qt: Fix initial UI state of log timestamps checkboxes 2025-07-09 20:05:31 +10:00
Davide Pesavento
d8a267162d Qt: Set default button in settings and ISO browser (#3475) 2025-07-07 22:14:58 +10:00
zkdpower
9ba3129b67 Update the Simple-Chinese translation to latest. (#3474) 2025-07-07 22:12:44 +10:00
Davide Pesavento
041145d336 GameDB: Increase max read speedup cycles for Dino Crisis 1 & 2 (#3473)
Both games freeze almost immediately otherwise.

Also add AnalogController to the first game, but disable auto analog
mode because vibration is supported but the sticks don't do anything.
2025-07-07 22:12:29 +10:00
Davide Pesavento
3f7e5ca1cb Qt: Always connect the open folder button (#3472)
And make the line edit read-only instead of disabling it.
2025-07-07 22:12:07 +10:00
Stenzek
fb7772871c GameDatabase: Use string_view for disc sets
Avoid the allocations, apparently forgot this one.
2025-07-05 14:12:29 +10:00
Stenzek
0a267ce158 Common: Add more tests 2025-07-05 14:12:29 +10:00
Davide Pesavento
9b3a29fb5c GameDB: Increase max read speedup cycles for Castlevania - SotN (#3471)
Allows the game to progress past the first loading screen.
2025-07-05 13:02:45 +10:00
Davide Pesavento
ffe05c853f Increase max read speedup cycles for Breath of Fire IV (#3470)
* GameDB: Increase max read speedup cycles for Breath of Fire IV

Otherwise the game hangs before reaching the start menu.

* GameDB: Drop seek speedup setting already at its default value
2025-07-05 13:02:32 +10:00
Stenzek
7dcdff35cb Qt: Include 'Refresh Progress' button in achievement settings 2025-07-03 19:13:07 +10:00
Davide Pesavento
b08ca9430e GameDB: Disable read speedup in Spyro 2 & 3 (#3464) 2025-07-03 19:12:57 +10:00
Davide Pesavento
3e61a12b0e GameDB: Consistently use title case in genre 2025-07-03 19:12:40 +10:00
Davide Pesavento
66341a12d4 FullscreenUI: Swap file size and uncompressed size in game details 2025-07-03 19:12:40 +10:00
Stenzek
d4cf7f248c FullscreenUI: Fix default displayed value for FF volume 2025-07-02 20:46:50 +10:00
Stenzek
d852149809 FullscreenUI: Add icons to game list detail lines 2025-07-02 20:44:48 +10:00
Stenzek
38022afa25 FullscreenUI: Fix focus loss on F4 to switch view 2025-07-02 20:01:09 +10:00
zkdpower
8484170ece Update the Simple-Chinese translation to latest. (#3468) 2025-07-01 21:20:32 +10:00
Stenzek
c8087204c4 FullscreenUI: Fix highlighted option with 'None' background 2025-07-01 19:45:44 +10:00
Stenzek
ca322449da FullscreenUI: Add 'Compact Mode' for game list 2025-07-01 19:41:02 +10:00
Stenzek
0098c60ee8 SIO: Add debugging option to redirect to TTY
Until I bother to finish my sio branch...
2025-07-01 19:00:17 +10:00
Stenzek
d0f4f579e1 FullscreenUI: Add missing log timestamp preferences 2025-07-01 18:40:33 +10:00
Stenzek
2a6aa89efb FullscreenUI: Avoid more conflicts between emoji and PromptFont
By moving them to the unused range.
2025-07-01 18:38:18 +10:00
Stenzek
5b3e843b08 Qt: Separate window and file log timestamp options 2025-07-01 18:08:41 +10:00
Stenzek
eb503c4029 Qt: Fix 'Log To File' in Debug menu 2025-07-01 17:57:49 +10:00
Stenzek
f123677df4 Log: Fix file log timestamps always enabled 2025-07-01 17:57:38 +10:00
Stenzek
36518a8df5 Bus: Use log colour abstraction for TTY 2025-07-01 17:40:13 +10:00
Davide Pesavento
9e045755a6 FullscreenUI: Add missing std::move (#3467) 2025-06-30 11:49:55 +10:00
Stenzek
b35beb6f24 Qt: Update Korean translation by Hack茶ん 2025-06-30 11:49:24 +10:00
Stenzek
e4761823ad FullscreenUI: Fix fade on system reset/shutdown 2025-06-30 00:42:42 +10:00
Stenzek
518e0194bc MediaCapture: Fix compiler warning 2025-06-30 00:42:33 +10:00
Stenzek
0978e6ecee MediaCatpure: Ensure there are no gaps in sample time 2025-06-29 16:32:49 +10:00
Stenzek
a59b6357b3 MediaCapture: Don't repeat frame rate calculations 2025-06-29 16:30:26 +10:00
Stenzek
ebf5c9d0c1 MediaCapture: Fix HEVC encoding with Media Foundation 2025-06-29 14:20:06 +10:00
Stenzek
9d686f7baf Qt: Hide fullscreen combo if unsupported 2025-06-29 13:20:32 +10:00
Anderson Cardoso
d603e3bc0c Atualização | Idioma Turco (#3466)
* Atualização Português do Brasil

Atualizado para a última versão.

* Atualização | Idioma Turco

Atualizado para a última versão.
Validado por um nativo.
--
Update to the latest version. 
Validated by native speaker.
2025-06-29 13:20:17 +10:00
Stenzek
355c17bde9 FullscreenUI: Fix fade on system start/stop 2025-06-28 12:46:27 +10:00
Stenzek
376a2e8d4d FullscreenUI: Fix crash when loading/saving state
Also fix fade transition.
2025-06-28 12:43:29 +10:00
Stenzek
33b1e82e34 Achievements: Fix imgui assertion in leaderboard view 2025-06-28 12:31:19 +10:00
Stenzek
71a60f95df Data: Update SDL game controller database 2025-06-27 23:41:39 +10:00
Stenzek
5df28de340 Qt: Fix hotkey category heading size on MacOS 2025-06-27 23:40:38 +10:00
Víctor "IlDucci
866b77e229 Spanish (Spain) 2025-06-27 translation update (#3465)
- Translated all new strings.
2025-06-27 21:48:50 +10:00
Stenzek
1b740efc10 FullscreenUI: Avoid ID clash in controller settings 2025-06-27 21:48:00 +10:00
Stenzek
889df1d8be VulkanDevice: Only reset descriptor pool if used
Save a tiny fraction of overhead.
2025-06-27 19:47:15 +10:00
Stenzek
2bff2098a1 FullscreenUI: Fix returning to wrong window after back 2025-06-27 17:14:07 +10:00
Stenzek
ebf97c26b8 dep/imgui: Sync to 5ee9c2a
And fix a bunch of local bugs, including random large-font-size glyphs.
2025-06-27 17:07:45 +10:00
Davide Pesavento
280c0036eb FullscreenUI: Change a few icons for improved consistency (#3463) 2025-06-27 17:07:24 +10:00
Stenzek
281119b812 Qt: Always perform update check on startup 2025-06-24 15:34:05 +10:00
Daniel Nylander
a7d0a8a485 Updated Swedish translation (#3461) 2025-06-23 12:41:49 +10:00
Anderson Cardoso
c679ffbac0 Atualização Português do Brasil (#3462)
Atualizado para a última versão.
2025-06-23 12:41:35 +10:00
Stenzek
5b18455536 Qt: Eliminate unnecessary includes in settingwidgetbinder.h 2025-06-22 20:28:05 +10:00
zkdpower
96d0851365 Update the Simple-Chinese translation to latest. (#3460) 2025-06-22 20:25:44 +10:00
Davide Pesavento
9347c00d95 Qt: Refine use of ellipsis in game list context menu (#3459) 2025-06-22 15:26:33 +10:00
Stenzek
cdc9206b6a Qt: Fix typo in toolbar icon action 2025-06-22 14:30:01 +10:00
Stenzek
ba799f4f88 Qt: Disable toolbar related actions if hidden 2025-06-22 14:05:01 +10:00
Stenzek
6fcb1194d5 FullscreenUI: Further icon improvements 2025-06-22 14:01:56 +10:00
Davide Pesavento
29ec2fea19 Qt: Fix saving toolbar locked state (#3458) 2025-06-22 13:25:26 +10:00
Davide Pesavento
40c495cd19 Qt: Remove last use of SLOT 2025-06-22 13:07:56 +10:00
Davide Pesavento
b67a8c3127 Common: Don't include deprecated (and unused) codecvt header
<codecvt> was deprecated in C++17 and removed in C++26
2025-06-22 13:07:56 +10:00
Davide Pesavento
976bf834ed Qt: Use QDialog::Accepted/Rejected in more places 2025-06-22 13:07:56 +10:00
Davide Pesavento
842f7414d9 Qt: Simplify connecting to QDialogButtonBox signals 2025-06-22 13:07:56 +10:00
Davide Pesavento
175ed8caf3 Qt: Fix default button in ControllerLEDSettingsDialog 2025-06-22 13:07:56 +10:00
Davide Pesavento
f6d10eb5d2 Qt: Fix default button in InputBindingDialog 2025-06-22 13:07:56 +10:00
Davide Pesavento
74f697eb62 Qt: Add button icons to InputBindingDialog 2025-06-22 13:07:56 +10:00
Davide Pesavento
e469e33aac Qt: Fix default button in AudioStretchSettingsDialog 2025-06-22 13:07:56 +10:00
Stenzek
a7f5105073 Qt: Fix toolbar context menu lock inversion 2025-06-22 03:04:09 +10:00
Stenzek
7b1c8a0407 System: Log init/boot time 2025-06-22 02:43:58 +10:00
Stenzek
ee0cb6076c Qt: Add additional toolbar properties for labels/icons 2025-06-22 02:33:00 +10:00
Stenzek
bf36432432 Qt: Swap console/emulation icons
Better match I think.
2025-06-22 02:32:57 +10:00
Stenzek
aafd72efba FullscreenUI: Add cheats/patches icons 2025-06-22 02:32:57 +10:00
Stenzek
f9fb591dc8 Data: Add missing file 2025-06-22 01:11:04 +10:00
Stenzek
82bb29d186 FullscreenUI: Fix extra padding in resume state popup 2025-06-22 01:02:59 +10:00
Stenzek
11bc1935c8 FullscreenUI: Skip drawing background if transparent
Save that fill rate.
2025-06-22 00:59:08 +10:00
Stenzek
f775a6d066 Qt: Fix achievement login tab order 2025-06-22 00:50:40 +10:00
Stenzek
5dd64c89c0 FullscreenUI: Bump animation time for theme change 2025-06-22 00:42:51 +10:00
Stenzek
68fa33e075 FullscreenUI: Polish achievements page 2025-06-22 00:39:00 +10:00
Stenzek
d18910a619 Achievements: Release lock while waiting for HTTP requests 2025-06-22 00:27:48 +10:00
Stenzek
ac9be0110f FullscreenUI: Snap CenterImage() to integer coordinates 2025-06-22 00:03:44 +10:00
Stenzek
11cb2217e0 FullscreenUI: Polish range dialogs 2025-06-21 22:08:33 +10:00
Stenzek
7b03b54539 FullscreenUI: Eliminate last of layout height constants 2025-06-21 22:08:33 +10:00
Stenzek
88a63f04be FullscreenUI: More hardcoded size removal
In achievements and elsewhere.
2025-06-21 22:08:33 +10:00
Stenzek
5063a49f2a FullscreenUI: Remove hardcoded sizes for menu items
Make it dynamic based on content instead.
2025-06-21 22:08:33 +10:00
Stenzek
9127198be7 ImGuiManager: Move font awesome to last priority
Too many glyph conflicts. Fixes coloured icons.
2025-06-21 22:08:32 +10:00
Davide Pesavento
3b90d18c6a Qt: Fix return code confusion in AchievementLoginDialog
We were passing the wrong code to QDialog::done(). Qt defines 0 as Rejected
and 1 as Accepted. This had no practical impact because callers were also
using the inverted logic. The accepted()/rejected() signals were emitted
incorrectly but nothing is using them at the moment.

Still, to prevent further issues and improve code readability, flip the logic
and prefer accept()/reject() over done().
2025-06-21 13:13:31 +10:00
Stenzek
1026902389 Data: Update SDL game controller database 2025-06-19 22:22:08 +10:00
Stenzek
2ac481d2c1 Qt: Fix setup wizard achievements page title 2025-06-19 22:22:00 +10:00
Stenzek
ff0add2ed0 ImGuiManager: Load PF before FA
Works around code point conflicts, for now.

Probably should just reallocate PF in the future though.
2025-06-19 22:17:11 +10:00
Stenzek
6c6cc910e6 DMA: Invalidate code pages on CD-ROM DMA write
Avoids page faulting by invalidating the pages in advance.

Might help with frame time spikes on super low-spec devices.
2025-06-19 21:15:26 +10:00
KamFretoZ
fa0a926133 Deps: Bump FontAwesome to 6.7.2 (#3456) 2025-06-19 20:38:41 +10:00
Stenzek
49d5d8e9a7 Qt: Fix achievement login dialog sizing on MacOS 2025-06-19 19:59:00 +10:00
Stenzek
1653cf82a2 GPU/HW: Fix GLSL ES compile error 2025-06-18 19:28:24 +10:00
Stenzek
42a9d8c353 Qt: Raise updater window if already shown
Too bad it won't work on Wayland. I'm trying to give a good
user experience on a platform that is so developer hostile.
2025-06-18 19:07:37 +10:00
Stenzek
5f885b83b8 Settings: Add missing case statement 2025-06-18 19:03:29 +10:00
Davide Pesavento
6ef3df5a5c Achievements: Use gethostuuid() as machine key on macOS (#3452) 2025-06-18 18:29:26 +10:00
crashGG
99268f22ec Separate mmpx enhance from mmpx (#3453)
Use conditional weak blending instead of pixel copying to eliminate artifacts on straight lines
Reduce algorithm overhead
use explicitly initialize to fix dx11 fxc uninitialized variable false positive

Update gpu_hw_shadergen.cpp

Update gpu_hw_shadergen.cpp
2025-06-18 18:28:19 +10:00
Stenzek
d83ecb0582 Qt: Fix return to desktop mode with -nogui -bigpicture 2025-06-17 18:44:27 +10:00
Stenzek
ce6924df21 Qt: AutoUpdaterDialog -> AutoUpdaterWindow in translations
Hopefully avoid some manual updates.
2025-06-17 18:44:27 +10:00
Stenzek
fa7b4ae9f1 Qt: Convert auto updater to window
And remove the application modality.

Fixes fights between the auto updater and achievement relogin window.
2025-06-17 18:44:27 +10:00
Davide Pesavento
a2bf5b4f50 GameDatabase: Drop "GPU" prefix from PGXP settings in compatibility report 2025-06-17 14:53:45 +10:00
Davide Pesavento
2edcb20930 GameDatabase: Add three missing settings to compatibility report 2025-06-17 14:53:45 +10:00
Davide Pesavento
69399f3449 GameDatabase: Missing newline in compatibility report
And refactor the Append*Setting() functions to reduce duplication.
2025-06-17 14:53:45 +10:00
Davide Pesavento
0c3ad8a78b GameDB: Fix number of players for Syphon Filter 2 & 3 (#3451) 2025-06-17 14:52:46 +10:00
Stenzek
f5c3280202 ImGuiOverlays: Remove unused code 2025-06-15 13:58:09 +10:00
Stenzek
4616dd3293 Qt: Avoid heap string copy for each context menu action
QString is copy-on-write.
2025-06-15 13:57:06 +10:00
Stenzek
308bc5f356 ImGuiOverlays: Warning fixes 2025-06-15 13:31:46 +10:00
Stenzek
35a8bfa469 FullscreenUI: Warning fixes 2025-06-15 13:31:43 +10:00
Stenzek
0c8cf0a4d7 Qt: Fix incorrect help text 2025-06-15 13:24:15 +10:00
Stenzek
466ccc5d88 CI: Use maximum compression for zip builds 2025-06-15 13:24:15 +10:00
Stenzek
7f066c2864 ImGuiOverlays: Fix display with only GPU/latency stats 2025-06-15 13:24:15 +10:00
bl@ck_m@ge
61f3f86bbc GameDB: exclude analog support for Final Fantasy Origins (#3449) 2025-06-15 13:24:02 +10:00
zkdpower
42bf2b3360 update the Simple-Chinese translation to latest. (#3448) 2025-06-15 13:23:49 +10:00
Stenzek
c32e590808 Qt: Don't hold lock while game list context menu active 2025-06-14 15:08:45 +10:00
Stenzek
20b353535d ImGuiOverlays: Backport condition tidy-up 2025-06-14 15:08:28 +10:00
Stenzek
ba6309c458 FullscreenUI: Keep a one-deep previous window stack
Fixes settings close returning to wrong window if opened from game list.
2025-06-14 14:39:22 +10:00
Stenzek
1a39dece6a FullscreenUI: Don't tint background in landing/game list
But keep it for settings etc, since it needs it for readability.
2025-06-14 14:33:07 +10:00
Stenzek
3a7cbc20d9 FullscreenUI: Use horizotal layout for about dialog 2025-06-14 14:10:29 +10:00
Stenzek
e19817c7f9 README: Fix typo 2025-06-14 13:42:02 +10:00
Stenzek
233c342d68 README: Recommend AppImage over Flatpak
Tired of Flathub's infrastructure randomly failing builds, and portal
paths being invalidated every update.

Does anyone actually use this?
2025-06-14 13:37:27 +10:00
Stenzek
3ba05f182f Qt: Use same size for serial across platforms
And center the field to compensate.
2025-06-14 13:25:52 +10:00
Stenzek
b98d521ff9 ImGuiOverlays: Draw larger status indicator icons
Always bugged me, but couldn't justify the rasterization time before
dynamic fonts.
2025-06-14 13:25:22 +10:00
Stenzek
bf4a89e82e Qt: Use GameList::FormatTimespan()
No point duplicating the logic since the core can handle
plural translations now.
2025-06-14 13:12:21 +10:00
Stenzek
9ffded0e73 SmallString: Fix size bug in assign(SmallStringBase&&) 2025-06-14 13:12:02 +10:00
Stenzek
a31d67921b SmallString: Use L instead of L+1
Keep the stack aligned to power of 2.
2025-06-14 13:11:39 +10:00
Davide Pesavento
70225f8345 Always use CTAD with std::unique_lock 2025-06-14 13:10:57 +10:00
Davide Pesavento
2c7d07b245 Qt: Implement reset play time for disc sets 2025-06-14 13:10:57 +10:00
Anderson Cardoso
74838e9bd8 Atualização Português do Brasil (#3444)
Atualizado para a última versão
2025-06-14 13:09:28 +10:00
KamFretoZ
bb76d7cce8 Update Indonesian Translation (#3445) 2025-06-14 13:09:18 +10:00
Davide Pesavento
873c7c9dc3 Qt: Right align size columns in game list view 2025-06-14 13:08:38 +10:00
Davide Pesavento
00330ca391 Qt: Avoid truncating Serial column in game list view on macOS 2025-06-14 13:08:38 +10:00
Davide Pesavento
5dc55bb4a1 Qt: Avoid showing "0 minutes" of played time (#3447) 2025-06-14 13:00:19 +10:00
Stenzek
9c4e15ef1c Host: Remove now-unused ReadCompressedResourceFile() 2025-06-14 02:30:11 +10:00
Stenzek
9ff3edd317 Qt: Disable unmaintained translations
These haven't been touched in 4+ years, and there are very few strings
still valid.

They'll still be built, so you can use them via the ini, but they will
not appear in the dropdown list.
2025-06-14 02:30:11 +10:00
Stenzek
0cf5618a05 FullscreenUI: Fix crash in JogCon controller settings 2025-06-14 02:30:11 +10:00
Stenzek
65ed9b51ab Data: Fix glyph conflict with vibration icon 2025-06-14 02:30:11 +10:00
Stenzek
0026615eb9 Data: Remove unused base fonts 2025-06-14 02:30:10 +10:00
Stenzek
c06da318d6 FullscreenUI: Fix trophy placement on non-square covers 2025-06-14 02:30:10 +10:00
Stenzek
06da45b3f2 FullscreenUI: Polish dialogs 2025-06-14 02:30:10 +10:00
Stenzek
77457a3b1d ImGuiManager: Switch to dynamic fonts 2025-06-14 02:30:10 +10:00
Stenzek
5945153e67 Data: Add variable weight fonts 2025-06-13 22:37:11 +10:00
Stenzek
9c4aaca7c8 FullscreenUI: Avoid losing game list selection inbetween mouse move and popups 2025-06-13 21:42:40 +10:00
Stenzek
a2d351ca90 FullscreenUI: Improve title truncation in game grid
Use the computed text length, rather than an arbitrary size.
2025-06-13 21:26:54 +10:00
Stenzek
39a5bd6e54 FullscreenUI: Remove padding from CD icon
It wasn't even.
2025-06-13 21:26:34 +10:00
Stenzek
94b88fad23 GPU/HW: Avoid texture filter dual-source output when unnecessary
Because we all know how much mobile drivers crapping themselves
whenever anyone mutters dual-source blending.
2025-06-13 21:02:07 +10:00
Stenzek
d37048e4e4 FullscreenUI: Fix animation glitch on choice select 2025-06-13 20:54:50 +10:00
Stenzek
a8db46a6b8 GPU/HW: Use signed difference in luma_distance()
Fixes the warning, and also underflowing, since both were unsigned
it would overflow if the second was greater the first.
2025-06-13 20:54:48 +10:00
Stenzek
ac0c4544e1 GPU/HW: Work around fxc uninitialized variable false positive 2025-06-13 20:54:48 +10:00
Stenzek
824b91a1f8 GPU/HW: Split MMPX to MMPX and MMPX Enhanced 2025-06-13 16:42:32 +10:00
crashGG
98798fec66 mmpx enhance (#3443)
enhance MMPX algorithm, fix some minor graphics defects.

Update gpu_hw_shadergen.cpp
2025-06-13 16:34:54 +10:00
Stenzek
9112e38f4e GPUDevice: Fix incorrect close call during symbol lookup
Not actually hit since all symbols should be present, but just in
case...
2025-06-13 16:29:06 +10:00
Davide Pesavento
36b869003a Qt: Use standard key sequences for main window shortcuts
Notably, this enables command+R to refresh on macOS, where F5
is not commonly used.
2025-06-11 19:51:12 +10:00
Davide Pesavento
e45c04e0dd Qt: Simplify grid layout in game summary widget 2025-06-11 19:51:12 +10:00
Davide Pesavento
5ea64810dc Qt: Consistently use QToolButton for "restore default" action 2025-06-11 19:51:12 +10:00
Davide Pesavento
7752b2bd2d Qt: Remove redundant nested layouts 2025-06-09 22:18:13 +10:00
Davide Pesavento
c7052a1903 Qt: Use restart-line icon for "restore defaults" buttons 2025-06-09 22:18:13 +10:00
Davide Pesavento
a4977f986c Qt: Add icons to buttons in patch settings widget
Similar to the cheat settings page
2025-06-09 22:18:13 +10:00
Davide Pesavento
ba78714d4f Qt: More consistent icon handling 2025-06-09 22:18:13 +10:00
Stenzek
5eb8578edc System: Save undo state on reset 2025-06-08 17:08:52 +10:00
Stenzek
cb2dfabeeb Qt: Backport undo load state timestamps 2025-06-08 17:08:50 +10:00
Stenzek
29e55a2e5b FullscreenUI: Use system scroll rate and layout scale
Makes scrolling feel much more responsive, and doesn't vary
depending on the size of the window.
2025-06-08 16:50:51 +10:00
Stenzek
38aebd0a3e dep/imgui: Add overridable scroll rate 2025-06-08 16:47:34 +10:00
Stenzek
bd9e206165 FullscreenUI: Fix layout calculations in game grid 2025-06-08 12:04:06 +10:00
Daniel Nylander
8d2dec4632 Updated Swedish translation (#3439) 2025-06-08 12:03:56 +10:00
Anderson Cardoso
595f8d0624 Atualização Português do Brasil (#3438)
Atualizado para a última versão.
2025-06-08 12:03:43 +10:00
Davide Pesavento
2326fc20d1 README: Fix typo (#3437) 2025-06-08 12:03:25 +10:00
Stenzek
6bea16b6eb INISettingsInterface: Only set changed if the value actually changes 2025-06-05 20:39:07 +10:00
Stenzek
5f2355510b Qt: Only write settings ini if it is changed
Save some disk writes.
2025-06-05 20:37:57 +10:00
Stenzek
d0b7d9d027 Host: Get rid of base settings interface indirection 2025-06-05 20:37:14 +10:00
Stenzek
9cd371d5ff SettingsInterface: Drop some unused virtual methods 2025-06-05 20:37:14 +10:00
Stenzek
59f7d0b2ff Cheats: Fix compiler warnings 2025-06-05 19:58:45 +10:00
Stenzek
d54077e345 Achievements: Add 'Refresh Progress' option
Manually refreshes the all progress database if you have completed
unlocks on other devices/machines.
2025-06-05 19:58:45 +10:00
Stenzek
0a0379f31f Qt: Make game list scrollbar only visible as-needed 2025-06-05 19:17:07 +10:00
Stenzek
95e085584c Qt: Move list/grid setup to subclasses 2025-06-05 19:16:46 +10:00
Stenzek
808c51b3ce CMake: Bump version requirements
Can't do it for Qt because of course flatpak....
2025-06-05 18:23:36 +10:00
Stenzek
f518b8492c Deps: Version updates
- HarfBuzz 11.2.0
- SDL3 3.2.16
- libpng 1.6.48
- Qt 6.9.1
2025-06-05 17:42:00 +10:00
Stenzek
22089e9b75 Qt: Improve game grid layout calculations
Use grid size instead of icon size/spacing.

Fixes the number of columns changing when different items are visible.

Also restores the old behaviour of dynamic scroll bar visibility.
2025-06-05 17:23:16 +10:00
Stenzek
cb751b0990 Data: Update SDL controller database 2025-06-05 13:35:04 +10:00
Stenzek
0205f9fa04 Achievements: Update progress database unconditionally on unlock
Doesn't make sense to preserve the greater count, since it can be
reset through the RA webpage, and SC/HC seems to work fine here.
2025-06-05 13:35:04 +10:00
BlueInterlude
2f2dcb43cc GameDB: Fix incorrect controller information + Add PlayStation Mouse for Jingle Cats (#3436) 2025-06-04 03:13:10 +10:00
BlueInterlude
52cf394bb2 GameDB: Add PlayStation Mouse Support for Jingle Cats (#3435) 2025-06-04 02:04:23 +10:00
Stenzek
9ab2608ba0 GPU/TextureCache: Fix replacement background name length 2025-06-03 22:55:21 +10:00
Stenzek
5b40d7902a System: Shut down GPU backend before other components
Prevents a rare crash on shutdown if OSD stats were enabled.
2025-06-03 19:06:17 +10:00
Stenzek
7fde697118 GPU/TextureCache: Add merging of adjacent palette records
So a texture spanning multiple pages can be merged at dump time.

Doing a merge instead of a union on the original palette rect
is safer, because gaps won't dump as larger textures with garbage
in the middle.
2025-06-03 19:05:22 +10:00
Stenzek
eee67a30da GPU/HW: Fix off-by-one in sprite UV rect calculation
CheckForTexPageOverlap() makes it exclusive already.

Fixes replacements for FF8 title screen not applying in the third
texture page, because it thought it was sampling from an unwritten
area of VRAM.
2025-06-03 18:54:29 +10:00
Davide Pesavento
e55dabfaa4 GameDB: Two fixes for Alone in the Dark - The New Nightmare (#3434) 2025-06-03 17:59:09 +10:00
Mark Zhuang
62c0a1e7d4 RISCV: fix flush cache for linux riscv when clang <= 18
for __builtin___clear_cache, clang-18 generates __clear_cache:
https://godbolt.org/z/K5Kx6EEhq, which is an empty function.
clang-19 can generates __riscv_flush_icache:
https://godbolt.org/z/TKe6Kh61a
2025-06-03 17:58:38 +10:00
Stenzek
d9367229e9 Achievements: Avoid duplicate tracker display 2025-06-03 17:57:29 +10:00
Stenzek
42813e8840 GameDatabase: Actually disable auto scale for DisableUpdating 2025-06-01 21:19:07 +10:00
Stenzek
ae3b295d95 FullscreenUI: Disable menu item borders by default
Looks nicer.
2025-06-01 15:10:40 +10:00
Stenzek
47405b081c GameDatabase: Disable MSAA with DisableUpscaling 2025-06-01 14:37:16 +10:00
Stenzek
2cc0851116 GameDatabase: Fix DisableUpscaling trait with auto res 2025-06-01 14:37:16 +10:00
Stenzek
fc7934a2be FullscreenUI: Fix nav focus loss in leaderboards
Stops hotkeys triggering when using mouse navigation.

Also fixes the first leaderboard entry not focusing on page swap.
2025-06-01 14:37:16 +10:00
Stenzek
1ad9ca7e90 FullscreenUI: Cancel pending nav on focus reset 2025-06-01 14:37:16 +10:00
CRASHARKI
9d59763bad GameDB: Disable upscaling and filtering in Constructor (#3432) 2025-05-31 14:27:13 +10:00
Davide Pesavento
02d8e14752 ImGuiManager: Avoid deprecated std::memory_order_consume (#3433) 2025-05-31 14:27:02 +10:00
Stenzek
0a0ad3f9e2 Qt: Improve clarity of unknown dump hashes 2025-05-31 03:00:59 +10:00
Stenzek
f2caec801d GameDB: Force full boot for Lomax games
Crashes after FMVs if fast boot is disabled.
2025-05-30 19:26:50 +10:00
Stenzek
2018eb77fe GPU: Adjust draw timing approximation
Cache seems to be able to go up to 128x8? Constructor draws sprites that
fit exactly in the texture cache, and does so within vblank, so it can't
take too long to draw.
2025-05-30 19:26:49 +10:00
CRASHARKI
6d8e111d72 GameDB: Add ForcePGXPCPUMode to all remaining versions of Aladdin (#3431) 2025-05-28 21:42:25 +10:00
Sheng Jiang 蒋晟
b195f747cf implement ExtConstantBitClear/Set on ExtImprovedSlide (#3430) 2025-05-28 21:42:11 +10:00
CRASHARKI
af803eefc1 GameDB: Various fixes to GTA games (#3429) 2025-05-27 22:24:16 +10:00
CRASHARKI
fff7654bc6 GameDB: Asterix does not support analog mode (#3428) 2025-05-27 18:21:54 +10:00
Stenzek
4164b95cb3 ImGuiManager: Make OSD message animation match notifications 2025-05-27 17:58:22 +10:00
Stenzek
2da46f83bb dep/imgui: Fix smooth scrolling with >60hz 2025-05-27 17:21:31 +10:00
Stenzek
6b811df6d0 CDROM: Add "Switch to Next Disc on Stop" option.
NOTE: THIS WILL NOT WORK FOR ALL GAMES.

Plenty of games don't stop the CD-ROM drive when they're expecting a
disc change, leaving us with no way of knowing when it's needed.
2025-05-27 17:10:11 +10:00
Stenzek
24cd6fa11b Hotkeys: Add switch to previous/next disc hotkeys 2025-05-27 17:03:39 +10:00
Stenzek
d885446672 VulkanDevice: Fix manual device selection 2025-05-27 17:03:39 +10:00
Stenzek
1c54047cd1 Qt: Remove redundant vertical layout in console settings 2025-05-27 17:03:39 +10:00
Davide Pesavento
8fa6336a90 Qt: Further polish the layout of some widgets (#3427) 2025-05-27 17:02:46 +10:00
Anderson Cardoso
09a1bfdde3 Atualização Português do Brasil (#3426)
- Novas linhas adicionadas/movidas traduzidas.
- Confirmação de novas linhas de texto.
2025-05-25 13:00:16 +10:00
Víctor "IlDucci
492ff51f40 Spanish (Spain) translation update 2025/05/24 (#3425)
- Translated all the new strings.
- Minor edits on existing ones.
2025-05-25 12:59:58 +10:00
Davide Pesavento
80c9a8d399 Qt: Remove unused ui file 2025-05-24 15:57:05 +10:00
Davide Pesavento
e30c1b53ad Qt: Use grid layout for audio stretch settings dialog 2025-05-24 15:57:05 +10:00
Stenzek
f6aa3eb5b0 Qt: Update glyph ranges 2025-05-24 12:55:59 +10:00
Stenzek
64dfe003b2 Qt: Update status bar visibility on shutdown
Fixes empty widgets being displayed.
2025-05-24 12:55:44 +10:00
zkdpower
7e37849378 update the Simple-Chinese translation to latest. (#3422) 2025-05-24 12:54:37 +10:00
Davide Pesavento
0f5204b31e CI: Pin action-automatic-releases to latest commit (#3423) 2025-05-24 12:54:15 +10:00
Davide Pesavento
c12e7fcc0b Qt: Fix minor typos in graphics settings help text (#3421) 2025-05-23 17:08:53 +10:00
Stenzek
4d5ba3b4e6 VulkanDevice: Tidy up device/extension initialization
Single pass, avoids enabling extensions that will not be used.
2025-05-23 17:06:59 +10:00
Stenzek
32b3ade56c VulkanDevice: Allocate N semaphores for N swap chains 2025-05-23 15:21:49 +10:00
Stenzek
cdadda85b5 Qt: Fix application exiting on fullscreen+lang change 2025-05-23 15:21:49 +10:00
Stenzek
66934cc5b8 System: Include queued frames in input latency stats 2025-05-23 15:16:15 +10:00
Stenzek
03111befb9 Settings: Correct a couple of default values 2025-05-23 15:15:58 +10:00
Stenzek
461c51ff6a Qt: Fix updater crash while game running
Or while fullscreen.
2025-05-20 00:00:41 +10:00
Stenzek
1667179f78 Qt: Updater shouldn't confirm shutdown
Otherwise if it's cancelled we end up in a funky state.
2025-05-20 00:00:38 +10:00
Stenzek
b27e5ac26a Qt: Fix incorrect lock parent 2025-05-19 23:52:11 +10:00
Stenzek
a422402014 CPU: Fix bgez/blez disassembly with non-standard pattern 2025-05-18 13:43:41 +10:00
Stenzek
c7ed3239b7 Qt: Use grid layout for second audio settings panel 2025-05-18 13:33:38 +10:00
Stenzek
54444475f5 Qt: Fix sizing of patch detail widgets 2025-05-18 13:33:21 +10:00
Stenzek
0ee3f235b6 Qt: Fix swapped parameter order in patch info 2025-05-18 12:47:03 +10:00
Stenzek
5e339c8975 dep/rcheevos: Fix buffer reserve estimate 2025-05-18 12:17:53 +10:00
Anderson Cardoso
4748a93b8a Atualização Português do Brasil (#3420)
Atualizaod para a última versão.
2025-05-18 12:14:47 +10:00
Davide Pesavento
06c950c06a GameDB: Disable disc read speedup for Parasite Eve 2 (#3419) 2025-05-18 12:14:32 +10:00
Stenzek
8ee0daaa17 GameDatabase: Bump cache version
Forgot to do this before.
2025-05-17 23:06:36 +10:00
Stenzek
5eedecd811 System: Swap back gamesettings->safe mode order
Fixes e.g. round texcoords warning being shown on games that need it.

But don't display CD speedup warnings if the gamedb will disable them.
2025-05-17 23:06:36 +10:00
Stenzek
9b17e1485d MediaCapture/FFmpeg: Log when dynlib open fails 2025-05-17 23:06:36 +10:00
Stenzek
0aa789d6c9 MediaCapture/FFmpeg: Default to VP9 2025-05-17 23:06:30 +10:00
Stenzek
6baea54e9d MediaCapture/FFMpeg: Re-introduce v7.0.x support
I hate this... thanks flatpak.
2025-05-17 21:48:32 +10:00
Stenzek
84999e0bc9 FileSystem: Handle BOM in ReadFileToString()
Works with UTF-8 BOM, UTF-16 LE + BE.

Fixes DisplayDepth ReShade shader not loading.
2025-05-17 20:27:01 +10:00
Stenzek
e3c0eed3df StringUtil: Add DecodeUTF16String() and BE variants 2025-05-17 20:25:45 +10:00
Stenzek
17dfb95d6a GPU/HW: Fix MSAA+depth buffer combination
Clear should wipe out all samples, copy should copy all samples.
2025-05-17 19:44:23 +10:00
Stenzek
4a707afae1 System: Show safe mode warning after applying gamesettings
Prevents warning about things that have already been disabled.
2025-05-17 18:44:03 +10:00
Stenzek
a6b59f9efe GameDatabase: Add traits for disabling disc speedup 2025-05-17 18:40:58 +10:00
Stenzek
c729515118 AnalogController: Add option to use right stick as shoulder buttons 2025-05-17 18:40:38 +10:00
Stenzek
db80f6fbc5 CI/Flatpak: Disable ffmpeg support
So sick of dealing with fragmented bullshit because different packaging
systems and operating systems have different library versions.

Freedesktop SDK is stuck at ffmpeg 7.0, so it loses support.
2025-05-17 18:11:20 +10:00
Stenzek
22109fc8e0 MediaCapture/FFmpeg: Tidy up format selection
And remove use of deprecated fields.
2025-05-17 18:11:13 +10:00
Stenzek
e439ebc1c6 Deps: Update bundled ffmpeg headers to v7.1.1 2025-05-17 18:10:03 +10:00
Stenzek
d35cefb02a GPU/HW: Check for depth clears for lines 2025-05-17 15:22:01 +10:00
Stenzek
844869c0c1 GPU/HW: Fix precise lines failing depth test 2025-05-17 15:04:22 +10:00
Stenzek
a375d558f6 GPU/HW: ScaleNx/MMPX do not require blending 2025-05-17 14:05:56 +10:00
Stenzek
3d8f6bf7aa GPU/HW: Fix filtered alpha blending in ROV path 2025-05-17 14:05:55 +10:00
Davide Pesavento
401f2652ca Achievements: Use round instead of ceil for unlocked percentage (#3418) 2025-05-17 14:05:41 +10:00
Stenzek
21aaec99f1 Qt: Note when patches are not allowed for achievements 2025-05-17 01:07:55 +10:00
Stenzek
871323f4e1 Cheats: Fix setting overrides applying for blacklisted patches 2025-05-17 00:59:20 +10:00
Stenzek
1547de2b3c Deps: Build Vulkan-Headers before ffmpeg
CI system headers are too old.
2025-05-17 00:05:33 +10:00
Stenzek
481fba357c dep/rcheevos: Sync with branch 2025-05-16 23:51:44 +10:00
Daniel Nylander
4ec372cd4e Updated Swedish translation (#3417) 2025-05-16 23:51:22 +10:00
Stenzek
a5987878be Deps: Version updates
SDL3, ffmpeg.
2025-05-16 22:27:37 +10:00
Stenzek
93e4913f11 Qt: Fix additional padding in patch list 2025-05-16 19:21:37 +10:00
Stenzek
cfb24f930d Qt: Fix revision-specific patches showing in list
It was already filtered in Big Picture Mode.
2025-05-16 19:20:26 +10:00
Stenzek
7368047b49 ImGuiManager: Upload software cursor textures on GPU thread 2025-05-16 19:13:38 +10:00
Stenzek
4ea90f948d CDROM: Display OSD message on backend read fail 2025-05-16 19:06:55 +10:00
Stenzek
7310aa509a CDROM: Stop reading on backend read fail
Instead of panicing. Game's probably just going to crash anyway.
2025-05-16 18:14:08 +10:00
Stenzek
f8b8963776 CDImageDevice: Fix possible invalid optional access 2025-05-16 17:54:02 +10:00
Stenzek
44729000af Qt: Update Korean translation by Hack茶ん 2025-05-14 23:18:23 +10:00
Stenzek
7932618424 Bus: Enable SIO2 on any unknown BIOS
Not all PS2 BIOSes are in the list.
2025-05-14 23:18:23 +10:00
Stenzek
2ed7aa5536 CPU: Clear pending bus error when interpreting block
It can get set from a failed rec access much earlier.

Also eliminates a redundant store from the main interpreter loop.
2025-05-14 23:18:22 +10:00
JukePlz
8382a1ac7b GameDB: Pop'n Tanks! does not support analog mode (#3416)
Only supports vibration.
2025-05-13 21:44:30 +10:00
Stenzek
4bacbc8958 Qt: Eliminate heap allocations in GameListSortModel
More of an issue since the filter is now checking multiple fields.
2025-05-13 21:43:32 +10:00
Stenzek
b91d219524 Qt: Clarify that XInput should only be used for wrappers 2025-05-13 21:31:00 +10:00
Stenzek
2b280bddd0 GPU/TextureCache: Display replacement info on game start 2025-05-13 21:21:16 +10:00
JukePlz
0483117c70 GameDB: Disable auto analog mode for Gex - Deep Cover Gecko (PAL) (#3415)
Language selector only works in digital mode.
2025-05-12 20:58:54 +10:00
zkdpower
2c67c7d287 Update the Simple-Chinese translation to latest. (#3413) 2025-05-12 20:58:43 +10:00
KamFretoZ
085ef31ee8 Qt: Search more things! (#3414)
Co-authored-by: KrossX <2485237+krossx@users.noreply.github.com>
2025-05-12 20:58:36 +10:00
Stenzek
4530301820 dep/rcheevos: Bump to 8a0178d 2025-05-11 14:08:24 +10:00
Stenzek
6cde51b7b5 Achievements: Tidy up API calls 2025-05-11 14:07:31 +10:00
Stenzek
aee66edd6e Achievements: Unload RAIntegration on UI thread
Fixes crash when toggling it on/off.
2025-05-09 20:58:38 +10:00
Stenzek
303ad7cdce Data: Update SDL Game Controller Database 2025-05-07 21:30:49 +10:00
Stenzek
18c5608f7d Qt: Work around MacOS disc change menu bug
QActionGroup usage here was incorrect.
2025-05-07 21:29:39 +10:00
Stenzek
b2dcf39f8b FullscreenUI: Fix possible crash with RAIntegration 2025-05-06 22:50:32 +10:00
Stenzek
e67ce7b54d GameDB: DisablePGXP => DisablePGXPCulling for Cool Boarders 2025-05-06 22:42:06 +10:00
Stenzek
2aea3e1c3c FullscreenUI: Add vertical padding to several windows
Looks less cluttered.

- Achievement/leaderboard lists.
- Game list/game grid.
- Save state selector.
2025-05-06 22:42:06 +10:00
Stenzek
30fe7f3e4a Achievements: Manually generate badge URLs when using RAIntegration
It doesn't fill in these fields (currently at least).
2025-05-06 22:42:06 +10:00
Stenzek
942316b2d0 Log: Fix inconsistent enum ordering 2025-05-06 22:40:21 +10:00
JukePlz
994dd18739 GameDB: Fixes for Cool Boarders and Welcome House (#3412)
* GameDB: Welcome House hash

* GameDB: Force disable PGXP in Cool Boarders

With PGXP on, it crashes, hangs or otherwise renders incorrectly in stage select menu.
2025-05-06 22:40:08 +10:00
Stenzek
03db7ea8ea GPUThread: Remove unnecessary padding 2025-05-05 02:22:57 +10:00
Stenzek
c8a5712c10 FullscreenUI: Fix possible crash with achievements/leaderboards hotkey 2025-05-05 02:22:57 +10:00
Stenzek
d326d307b4 Achievements: Fix memory writes using CPU addresses 2025-05-05 02:22:57 +10:00
Anderson Cardoso
ea58cd1d57 Atualização Português do Brasil (#3411)
Atualizado para a última versão.
2025-05-05 02:22:40 +10:00
Stenzek
ad13b17bea FullscreenUI: Fix slow fadeout on fast forward toggle 2025-05-03 00:46:18 +10:00
Stenzek
6cafb5cdea FullscreenUI: Fix resume state dialog height at some window sizes 2025-05-03 00:45:45 +10:00
Víctor "IlDucci
af5fb6961c Spanish (Spain) translation update 2025/04/26 (#3410)
- Translated latest strings.
- Minor tweaks related to the Game Settings.
2025-05-03 00:44:51 +10:00
Stenzek
8d80ae123d Controller: Remove 'f' from string float values 2025-04-26 14:41:45 +10:00
KamFretoZ
d049b36387 Log: Allow read-only access to the log file (#3409) 2025-04-26 13:03:39 +10:00
Stenzek
611bb8fb4f VulkanDevice: Remove hardcoded 1.0 API version
Been like this for a couple of months, evidently forgot to remove it
when testing...
2025-04-25 17:40:40 +10:00
Stenzek
f8cd1d3d92 Qt: Warn on cheat enable if gamesettings disabled 2025-04-25 15:54:34 +10:00
Stenzek
674816b6eb GameDB: Recompiler ICache for Crypt Killer
Justifier handlers are timing sensitive.
2025-04-24 21:56:37 +10:00
Stenzek
773ec046b5 Justifier: Fix byteswapped RGB colours 2025-04-24 21:41:38 +10:00
Stenzek
589b8f5139 Justifier: Handle byte 4 IRQ enable flag
Fixes games with two justifiers connected concurrently.
2025-04-24 21:41:31 +10:00
Stenzek
740758fdda CPU/Recompiler: Call RaiseBreakException() on BP
For pcdrv.
2025-04-24 10:51:07 +10:00
Stenzek
559f831c30 Achievements: Defer login/game identify until after RAIntegration load 2025-04-23 22:16:27 +10:00
Stenzek
50e99dd1ff D3D12Device: Fix incorrect state when texture uploaded 2x w/o use 2025-04-23 22:16:27 +10:00
Anderson Cardoso
b0172a0afc Atualização Português do Brasil (#3408)
Atualizado para a última versão.
2025-04-23 22:16:09 +10:00
Stenzek
769e6f2bae GPUThread: Fix command size blow-up 2025-04-21 19:10:18 +10:00
Stenzek
1405004fc0 GameDB: Set tolerance for Spider-Man games
Glitch polygons due to sign flipping because coordinates are up around
the 1024 range (CPU::PGXP::TruncateVertexPosition()).
2025-04-21 19:10:13 +10:00
Stenzek
41ee9d9ff0 FullscreenUI: Use path from game list entry on resume
Fixes clean boot failing when selecting a game with a no-longer-valid
path.
2025-04-21 13:30:03 +10:00
Stenzek
50ba0fa5b3 CI: Use flatpak/flatpak-github-actions 2025-04-21 13:12:45 +10:00
Stenzek
b4019f325c GPU/HW: Fix black dots with some texture filters
JINC2 specifically ended up with NaNs propagating through.
2025-04-21 13:06:09 +10:00
Stenzek
f4df18b7cf Cheats: Make FormatCodeForFile() public
Needed for Android.
2025-04-20 00:23:23 +10:00
Stenzek
1caf45cf62 SmallString: Fix possible non-null-termination in set_size() 2025-04-19 23:56:35 +10:00
Stenzek
437430cbc4 System: Pull screenshot format from path extension 2025-04-19 22:49:16 +10:00
Stenzek
1f10cac42a GPUThread: Align commands to 16 bytes
Apparently some of the types end up 16-byte aligned on Android x86_64.
2025-04-19 22:45:21 +10:00
Stenzek
bd558efaaa CMake: Use upstream-compatible Findzstd 2025-04-19 20:43:27 +10:00
Stenzek
876b80ccd2 ImGuiManager: Fix incorrect backend flag on aux window 2025-04-19 18:07:06 +10:00
Stenzek
df2a5a5e67 ImGuiManager: Move drawing out of GPUDevice 2025-04-19 16:21:29 +10:00
Stenzek
46e11d96da CI: Bump flatpak-github-actions version
Maybe fix the cache failing because it was still on v3?
2025-04-19 11:40:55 +10:00
Stenzek
a86eabc1f0 Win32RawInputSource: Fix handling of absolute positioned devices
Maybe? Works in VMware now, I don't have any actual tablets.
2025-04-18 18:48:31 +10:00
Stenzek
75ae7deadb FullscreenUI: Add padding to game list 2025-04-18 14:44:25 +10:00
Stenzek
d840a825e2 CI: Use kde-6.9 flatpak docker image 2025-04-18 14:44:04 +10:00
Stenzek
0003cf7b11 CI/Flatpak: Bump to KDE 6.9 SDK 2025-04-17 22:20:55 +10:00
Stenzek
1fa77e530b FullscreenUI: Center achievement/leaderboard images
Fixes the placeholder image being stretched.
2025-04-17 21:05:54 +10:00
Stenzek
9a6725367b FullscreenUI: Change default background name 2025-04-17 21:05:44 +10:00
Stenzek
def6b76116 FullscreenUI: Make menu item borders optional 2025-04-17 21:05:44 +10:00
Stenzek
5b5eef61d7 FullscreenUI: Increase spacing between menu items 2025-04-17 21:05:44 +10:00
Stenzek
7aa831c8df FullscreenUI: Improve look of slider popups 2025-04-17 21:05:44 +10:00
Stenzek
ddf906f377 FullscreenUI: Polish achievements login dialog 2025-04-17 21:05:44 +10:00
Stenzek
9c819d9676 ImGuiManager: Fix tab key handling 2025-04-17 21:05:44 +10:00
Stenzek
c9ae4dcd0f SPU: Enable VU meter in debug builds 2025-04-17 21:05:44 +10:00
Stenzek
3d2085f797 GPU: Fix some CPU thread state reads 2025-04-14 22:20:29 +10:00
Stenzek
4c1aba62fc System: Remove unused function
And rename instances of "filename" to "path".
2025-04-14 22:20:29 +10:00
Stenzek
a0de2febad GPUThread: Minor logic corrections 2025-04-14 22:19:17 +10:00
Stenzek
b1ce3bf0b1 Data: Fix link in thirdparty.html 2025-04-14 22:19:17 +10:00
Stenzek
751d81eff0 GPU/TextureCache: Handle FetchTexture() fails 2025-04-14 22:19:17 +10:00
Anderson Cardoso
7583425c56 Atualização Português do Brasil (#3407)
Atualizado para a última versão
2025-04-14 22:18:57 +10:00
bl@ck_m@ge
1a5e852ffa GameDB: disable analog support for some demos and beta versions (#3406) 2025-04-14 22:18:46 +10:00
Stenzek
ebf33f32fa FullscreenUI: Crash fix 2025-04-13 13:58:46 +10:00
Stenzek
89301688db Qt: Use grid layout for forms
Fixes inconsistent widget sizes under KDE theme.
2025-04-13 13:58:44 +10:00
Stenzek
2e6c6dffae Qt: Slightly adjust widget sizes
Fixes cut-off with default KDE theme.
2025-04-13 13:58:44 +10:00
Stenzek
cf7feec9c4 Deps: Swap lunasvg for plutosvg 2025-04-13 13:58:44 +10:00
Stenzek
79cb5779b4 Data: Swap svg classes for inline style
plutosvg can't handle classes.
2025-04-13 13:58:44 +10:00
Stenzek
03d6d12b8a Image: Export RGBA8 conversion functions 2025-04-13 13:58:32 +10:00
bl@ck_m@ge
903a1570f1 GameDB: exclude analog support for some Rockman titles (#3404) 2025-04-13 13:58:21 +10:00
shikulja
57fc5b9d23 Update Russian translation (#3405) 2025-04-13 13:54:19 +10:00
Daniel Nylander
46dd32ad4d Updated Swedish translation (#3403) 2025-04-12 21:21:16 +10:00
Stenzek
ca46c11829 FullscreenUI: More string_view usage 2025-04-12 21:14:51 +10:00
Stenzek
65fd6f9ff3 FullscreenUI: Fix crash in hotkey settings 2025-04-12 21:14:47 +10:00
Stenzek
b78d3b4b79 dep/imgui: Update to v1.91.9b 2025-04-12 21:13:59 +10:00
Stenzek
32963c3f6a Controller: Use string_view() for localised strings 2025-04-12 14:51:58 +10:00
Stenzek
057398b4ab FullscreenUI: Mostly replace C string usage with string_view 2025-04-12 14:13:05 +10:00
Stenzek
8f8f7cd1cb Achievements: Queue RAIntegration writes on CPU thread 2025-04-12 12:35:05 +10:00
Stenzek
faa7ca5121 FullscreenUI: Add confirmation to hardcore mode enable/reset 2025-04-12 12:30:53 +10:00
Stenzek
9573286e3b FullscreenUI: Increase notification rounding 2025-04-12 12:30:31 +10:00
Stenzek
c192bd798b Bus: Stub out 0x1F802080
Used by some homebrew.
2025-04-11 22:18:27 +10:00
Stenzek
fca250257c Achievements: Initialize RAIntegration in two parts 2025-04-11 22:13:07 +10:00
Stenzek
78ff3b97b4 dep/rcheevos: Make RAIntegration loadable in two parts
DLL loaded/version checked on core thread, UI initialized on UI thread.
2025-04-11 22:13:07 +10:00
Stenzek
c1e01af511 Host: Expose RunOnUIThread() to core
I hate this, but sadly needed for RAIntegration...
2025-04-11 22:13:07 +10:00
Stenzek
f0d4816de7 RegTest: Add function queueing for RunOnCPUThread() 2025-04-11 22:13:07 +10:00
Stenzek
5f48adb53a RegTest: Compile fix 2025-04-11 22:13:07 +10:00
Stenzek
3b5d2e96f5 GameDB: PGXP-CPU for Spider-Man games 2025-04-11 22:10:37 +10:00
bl@ck_m@ge
12a50fe7c5 GameDB: exclude analog support for some 2D games (#3402) 2025-04-11 22:10:10 +10:00
Stenzek
2eecf6b79d GPU/HW: Clear depth at vblank time in 480i games
If this is a 480i single buffer game, then rendering should complete within one vblank.
Therefore we should clear the depth buffer, because the drawing area may not change.
2025-04-10 22:02:40 +10:00
Stenzek
e7a3465598 Achievements: Display hardcore disabled subtitle in game summary 2025-04-10 21:45:45 +10:00
Stenzek
284b13cd43 Achievements: Fix starting with RAIntegration-forced HC mode 2025-04-10 21:40:34 +10:00
Stenzek
8e73b1db7e Achievements: Display notification on subset complete 2025-04-10 21:32:26 +10:00
Stenzek
6165b504b8 Achievements: Use new badge_url/badge_locked_url fields 2025-04-10 21:24:08 +10:00
Stenzek
4708a8fda4 Achievements: Fix login while ingame 2025-04-10 21:12:35 +10:00
Stenzek
21560537c2 Achievements: Fix crash starting with no game 2025-04-10 02:29:45 +10:00
Stenzek
15a81e5543 Deps: Remove RAInterface 2025-04-10 02:18:17 +10:00
Stenzek
d286b96c2d Achievements: Swap RAInterface for RAIntegration via rc_client 2025-04-10 02:16:12 +10:00
Stenzek
1bb1354d4e Achievements: Use rc_client as source of truth for HC mode 2025-04-10 01:35:10 +10:00
Stenzek
a0aac8ef17 dep/rcheevos: Bump to latest upstream 2025-04-10 01:35:10 +10:00
Stenzek
e41543c38a Achievements: Cache latest/nearest achievement info
When using RAIntegration through rc_client, the rc_client_achievement_t
pointer does not persist after rc_client_destroy_achievement_list().
2025-04-10 01:35:08 +10:00
Stenzek
a310d3a5e7 FullscreenUI: Fix load-and-resume-state HC popup 2025-04-09 22:47:39 +10:00
Stenzek
8e5531eaa2 FullscreenUI: Fix call of moved-from function 2025-04-09 22:41:13 +10:00
Stenzek
8186e615ab ShaderGen: Don't use __VERSION__ for polyfill
Adreno once again is a broken turd and uses 300 even for GLSL ES 3.20.

And to add insult to injury, it reports the errors at the call site
instead of where the function is actually being overloaded...
2025-04-09 13:24:47 +10:00
Stenzek
97c81edf39 FullscreenUI: Android build fix 2025-04-09 13:24:47 +10:00
Stenzek
82d3b6852d CI/AppImage: Include libcom_err.so.2 in cross appimages 2025-04-09 13:24:46 +10:00
Stenzek
182ba2aa7f SPU: Devel build fix 2025-04-08 22:21:12 +10:00
Stenzek
8706f609dd SPU: Add VU meter display in debug/devel builds 2025-04-08 22:06:03 +10:00
Stenzek
0479500357 CPU: Correctly mask upper 1.5GB of KUSEG
Stops fastmem going into a loop when trying to backpatch accesses
above 512MB.
2025-04-08 21:39:29 +10:00
Stenzek
0a1e8e27f0 ShaderGen: Emit packUnorm4x8() for GLSL ES 3.0 2025-04-08 20:11:01 +10:00
Stenzek
7971bb949b GPU/HW: Add Scale2x/Scale3x texture filters 2025-04-08 20:10:58 +10:00
Stenzek
6e02133452 Qt: Fix game list achievement icon spacing at 100% DPI 2025-04-07 21:21:38 +10:00
Stenzek
83f755055b FullscreenUI: Fix long lists not scrolling to selected item 2025-04-07 21:13:52 +10:00
Stenzek
52f8a347c7 FullscreenUI: Fix Toggle Fast Forward being disabled 2025-04-07 20:48:32 +10:00
Stenzek
3ecaffd427 dep/reshadefx: Don't unconditionally emit point size variable
Metal compiler doesn't like it.
And we're only using triangles at the moment anyway.
2025-04-07 20:47:31 +10:00
Stenzek
2bd9e5fbb1 README: Add link to old releases repository
Apparently I forgot to do this when I created it back in Feb...

I can't be bothered to rearchitecture the automatic updater so it
doesn't have the silly 30 tag limit that GitHub imposes on its API
requests by default.
2025-04-06 23:28:55 +10:00
Stenzek
a3a162f724 Data: Update SDL game controller database 2025-04-06 23:20:47 +10:00
Stenzek
dfa96e080d GPU: Implement MMPX texture filter 2025-04-06 23:16:59 +10:00
Stenzek
054e96f46b BIOS: SCPH-7000W is region-free 2025-04-06 23:16:03 +10:00
Stenzek
b794e841a9 Achievements: Improve HC self-disable 2025-04-06 23:16:03 +10:00
Stenzek
5034fb943c Hotkeys: Rearrange categories for some shortcuts and improve naming 2025-04-06 23:16:03 +10:00
Stenzek
e62f3bd4a8 PostProcessing: Show Reshade ui_text style help text 2025-04-06 23:16:03 +10:00
Stenzek
a9f1dd20c3 D3D12Device: Fix GPU-based validation being unconditionally enabled 2025-04-06 23:16:03 +10:00
Stenzek
f55961593a PostProcessing: Display compile errors in OSD 2025-04-06 23:16:03 +10:00
Stenzek
979ad979b9 PostProcessing/FX: Add support for compute shaders 2025-04-06 23:16:03 +10:00
Stenzek
1aabcf1ba7 PostProcessing/FX: Alternate between two 'backbuffers'
Saves video memory, and also fixes shaders that expect each pass's input
to be the output of the previous path without explicitly referencing the
render target.
2025-04-06 23:16:03 +10:00
Stenzek
80cfe59dbe PostProcessing/FX: Allow use of fixed-size render targets
Also obey the ClearRenderTarget flag.
2025-04-06 23:16:03 +10:00
Stenzek
4e7fdc8dbd PostProcessing/FX: Allow frametime as int
But the value will be bogus.
2025-04-06 23:16:03 +10:00
Stenzek
eca113cd76 GPUDevice: Fix/improve compute shader support
Add multiple texture layout with/without UBO.
2025-04-06 23:16:02 +10:00
Stenzek
2a99529473 Deps: April updates
- Harfbuzz 10.4.0
- libpng 1.6.47
- SDL3 3.2.10
- Zstandard 1.5.7
- Qt 6.9.0
- shaderc 2025.1

Flatpak is still stuck on Qt 6.8 as usual.
2025-04-06 12:05:57 +10:00
bl@ck_m@ge
6e39453b29 GameDB: add Digital Contoller support for The Adventure of Little Ralph (Demo) (#3401) 2025-04-06 11:38:00 +10:00
Stenzek
4ead87d191 README: Mention ARM32/ARM64 AppImage builds 2025-04-05 21:54:40 +10:00
Stenzek
584ed4bb38 FullscreenUI: Fix progress bar line at 0% 2025-04-05 21:54:38 +10:00
Stenzek
0f6e5bb1fe FullscreenUI: Fix pause menu achievements text progress colour 2025-04-05 21:54:38 +10:00
Stenzek
079dae37fd FullscreenUI: Use transition for background/theme changes 2025-04-05 15:02:53 +10:00
Stenzek
162150c509 FullscreenUI: Force key nav on first open 2025-04-05 15:02:50 +10:00
Stenzek
64fac4c9d4 Qt: Fix interacting with pause menu after double-click-fullscreen 2025-04-05 15:02:32 +10:00
Stenzek
47e941cdc2 Qt: Fix shutdown from Big Picture exiting application 2025-04-05 15:02:32 +10:00
Stenzek
46ae1780c5 Qt: Fix double-click-fullscreen with notifications up 2025-04-05 15:02:15 +10:00
Stenzek
f05c627e48 Qt: Update glyph ranges 2025-04-04 21:47:08 +10:00
Stenzek
836a0c7322 Qt: Fix achievements text highlight colour
Was only really an issue in the Classic Windows theme I think.
2025-04-04 21:46:38 +10:00
Stenzek
426cdd1611 Qt: Center icons in grid view 2025-04-04 21:46:38 +10:00
Stenzek
f494cb47c4 Qt: Widen status bar widgets
Linux systems with their thicc fonts...
2025-04-04 21:46:38 +10:00
Stenzek
fe60a2a87e CrashHandler: Replace invalid parameter and purecall handlers 2025-04-04 21:46:38 +10:00
Stenzek
c75d5f71b7 CrashHandler: Include assertion/panic information in dumps 2025-04-04 21:46:38 +10:00
zkdpower
b3087657be Update the Simple-Chinese translation to latest. (#3400) 2025-04-04 21:46:27 +10:00
Víctor "IlDucci
fdfbc7f569 Spanish (Spain) translation update 2025/04/03 (#3399)
- Updated Spanish (Spain) translation with latest changes.
- Minor corrections to unify certain user-facing questions and to abbreviate certain strings that would overflow Big Picture UI on a 4:3 display ratio.
- Cleaned up unused translations.
2025-04-04 10:57:36 +10:00
Daniel Nylander
d9363108d1 Updated Swedish translation (#3398) 2025-04-04 10:57:20 +10:00
Anderson Cardoso
1332f6da72 Atualização Português do Brasil (#3397)
Atualizado para a última versão.
2025-04-03 20:56:03 +10:00
Stenzek
ffd6726a59 Qt: Drop -settings/-portable CLI parameters
This hasn't been tested in years, and doesn't makes sense when you
consider other files are saved in the DataRoot directory (e.g. custom
properties, play time, crash dumps, etc).

-portable is redundant as the presence of settings.ini in the AppRoot
will trigger it anyway, therefore it is only relevant for first-time
installs. In which case it's just as much work to create an empty
settings.ini or portable.txt file as it is to create a shortcut with
-portable on the command line.

It was also broken anyway for a long time, and nobody complained.
2025-04-03 19:58:40 +10:00
Stenzek
bbdc6ab4e0 Misc: Fix a bunch of code analysis warnings
Quite a few of these were legitimate.
2025-04-03 19:29:03 +10:00
Stenzek
c7139b943c GPU/HW: Remove redundant check 2025-03-30 23:42:02 +10:00
Stenzek
acd684bca2 D3D12Device: Fix a couple of errors in ROV handling 2025-03-30 23:41:51 +10:00
Stenzek
b798d8f1aa Settings: Add option for enabling GPU-based validation 2025-03-30 23:20:39 +10:00
Stenzek
049ec4af90 CI/Linux: Bump discord-rpc/lunasvg commits 2025-03-30 22:27:59 +10:00
Stenzek
162d742cc0 CDROM: Remove hack for Fighting Force
Instead properly handle the one-sector-delay that occurs when autopause
detects the start of a new track.
2025-03-30 22:00:21 +10:00
Stenzek
8c1f75ab8c GameDatabase: Add overrides for maximum CD speedup cycles 2025-03-30 22:00:21 +10:00
Stenzek
d2c09dfaff Settings: Split read and seek cycles for maximum CD speedup 2025-03-30 22:00:21 +10:00
Stenzek
3292833fb8 FullscreenUI: Add option to turn off animations 2025-03-30 15:58:48 +10:00
Stenzek
04c5a9f1b2 FullscreenUI: Improve leaderboard text contrast 2025-03-30 15:43:15 +10:00
Stenzek
c5cc94c4b7 FullscreenUI: Fix hotkey categories duplicating 2025-03-30 15:22:46 +10:00
Stenzek
64513395f3 FullscreenUI: Add fade transition to most screen changes 2025-03-30 15:22:46 +10:00
Stenzek
e6e6313219 FullscreenUI: Add offscreen-based screen fade 2025-03-30 15:22:46 +10:00
Stenzek
4e2872f248 FullscreenUI: Fix consecutive choice dialogs 2025-03-30 14:45:26 +10:00
Stenzek
2d31bf5685 FullscreenUI: Convert input binding into a PopupDialog 2025-03-30 14:45:26 +10:00
Stenzek
9bcd738f5c FullscreenUI: Make save state selector a main window
More reliable, saves messing around with popups.
2025-03-30 14:45:26 +10:00
Stenzek
3bf5ded0d2 FullscreenUI: Fix various issues
- Pause menu losing key focus the first time it's opened.
- Pause menu being unopenable after close when paused.
- Key nav not being enabled after closing game via main UI.
2025-03-30 11:47:31 +10:00
Stenzek
a3e840526a FullscreenUI: Fix multi-disc selection with duplicate filenames 2025-03-29 21:46:56 +10:00
Stenzek
54c42f9c27 Achievements: Consider all-hidden-leaderboards as no leaderboards
Stops the menu option being available and showing 0 leaderboards.
2025-03-29 20:06:09 +10:00
Stenzek
b4ae19411b Achievements: Show unconfirmed unlocks in pause menu 2025-03-29 20:06:09 +10:00
Stenzek
37230107f4 FullscreenUI: Run idle while notifications/toasts are onscreen 2025-03-29 20:06:09 +10:00
Stenzek
730fa67952 FullscreenUI: Darken titled toast text 2025-03-29 20:06:09 +10:00
Stenzek
3cf2f41723 FullscreenUI: Fix crash changing renderer 2025-03-29 20:06:09 +10:00
Stenzek
ba3c693717 Qt: Fix double memcard warning on shutdown 2025-03-29 18:01:10 +10:00
Stenzek
0687e59bda FullscreenUI: Rewrite popup dialog handling
Add animations, fix background dimming.
2025-03-29 17:57:37 +10:00
Stenzek
576658b6eb Settings: Max speedup cycles should be at least 1 2025-03-28 21:23:32 +10:00
Stenzek
c7504e7016 dep/fmt: Bump to v11.1.4 2025-03-28 20:54:04 +10:00
Stenzek
e4a028834a FullscreenUI: Fix keynav default in open-in-game-list mode 2025-03-28 20:44:54 +10:00
Stenzek
f36062a94e FullscreenUI: Fix duplicate item in advanced settings 2025-03-28 20:40:52 +10:00
Stenzek
9ef7f54f19 FullscreenUI: Enable all windows to nav-wrap
i.e. when pressing down at the end, it wraps to the top.
2025-03-28 20:38:31 +10:00
Stenzek
003518c234 FullscreenUI: Fix nav wrapping if first item is disabled 2025-03-28 20:12:41 +10:00
Stenzek
6f2225fb61 FullscreenUI: Remove redundant ActiveButton() and friends 2025-03-28 19:45:52 +10:00
Stenzek
f80a77fa27 FullscreenUI: Fix popup item border going outside of window 2025-03-28 19:27:24 +10:00
Stenzek
ea3774cece FullscreenUI: Fix setting BIOS to Auto Detect 2025-03-28 18:54:14 +10:00
Stenzek
58bd87666e Qt: Fix crash when FSUI open and game list activated 2025-03-28 17:25:53 +10:00
Stenzek
fbadacae78 CDROM: Fudge track autopause hold position
Fudge the hold position by 2 sectors to reduce the number of GetlocP's
that will return a MSF in the old track.

Works around the music hang in Fighting Force.
2025-03-28 17:24:39 +10:00
Stenzek
ceef7af1da GameList: Fix crash if cache fails to open 2025-03-28 17:07:13 +10:00
Stenzek
ece18d10c5 PCDrv: Allow opening by absolute path 2025-03-24 18:59:15 +10:00
Stenzek
ae9023ddf3 CI: Build armhf AppImages 2025-03-23 23:41:19 +10:00
Stenzek
3f0abccb59 CI: Don't use zlib-ng on cross-compiled AppImages
Seems to be problematic on armhf, and I can't be arsed debugging it.
2025-03-23 23:41:00 +10:00
Stenzek
104c82c2c3 Mini: Fix right button forwarding 2025-03-23 23:39:26 +10:00
Stenzek
2cb6ce635f Mini: Fix non-first game list refresh 2025-03-23 23:39:15 +10:00
Stenzek
4ce001aef3 GameDatabase: Add DisableFullTrueColor trait 2025-03-23 17:08:25 +10:00
Stenzek
1fca8ae6bf FullscreenUI: Fix start-in-game-list mode using grid 2025-03-23 17:02:52 +10:00
Stenzek
3ffd20b833 FullscreenUI: Display game list attributes in darker colour 2025-03-23 16:59:23 +10:00
Stenzek
9411e40c20 FullscreenUI: Fix assert when booting+loading state 2025-03-23 16:43:57 +10:00
Stenzek
03d7af2efc FullscreenUI: Add border rounding to menu items 2025-03-23 16:42:24 +10:00
Stenzek
9020959511 Qt: Add game list background function 2025-03-23 15:58:56 +10:00
Stenzek
98d1c71981 GameDB: Force full true color for Bust a Move 2
Not strictly accurate, but looks better.
2025-03-22 18:32:31 +10:00
Stenzek
741e971681 GPU/HW: Add 'True Color (Full)' dithering mode
This is equivalent to the old 'True Color' mode.

The new 'True Color' mode truncates flat-shaded sprites/polygons
to 16-bit color before drawing. Doing so fixes:

- Menu background in Breath of Fire IV.
- Loading background in JumpStart Wildlife Safari - Field Trip.
- and other similar games.
2025-03-22 18:32:31 +10:00
Stenzek
2d477f80b0 Qt: Add tooltips to setup wizard graphics settings
Same strings as the main graphics settings page, so translation should
be just a matter of accepting them as-is.
2025-03-22 18:32:31 +10:00
Stenzek
2311c8d287 Settings: Convert dithering/true color options to a dropdown
Half of them are mutually exclusive, so this simplifies things.
Fewer options = better, right?
2025-03-22 18:20:51 +10:00
Stenzek
32b09193d1 Qt: Move force video timing to console settings
Since it's related to the region, it makes sense to be in here.
And it frees up precious vertical space.
2025-03-22 18:20:51 +10:00
Stenzek
4afa41b927 Qt: Move async readahead sectors to advanced settings 2025-03-22 18:20:51 +10:00
Stenzek
3ab3e4be06 ImGuiManager: Tweak OSD message rounding 2025-03-22 18:20:51 +10:00
zkdpower
f4e93df1b1 Update the Simple-Chinese translation to latest. (#3395) 2025-03-22 17:10:12 +10:00
Stenzek
115ba4433c CPU/Interpreter: Emulate lo/hi read stall after mult/div
Still need to do the recompiler.
2025-03-22 01:59:00 +10:00
Stenzek
74064af730 GameDB: Set disable scaled interlacing on various games
Fixes intro fade/transitions in Final Fantasy VIII.
Fixes menu corruption in Destruction Derby Raw.
2025-03-22 01:19:01 +10:00
Stenzek
62d7a73381 GPU/HW: Add 'Scaled Interlacing' option
Disabling this option causes rendering to skip N lines instead of 1
line, where N is the internal resolution multiplier.
2025-03-22 01:19:01 +10:00
Stenzek
d176109d3b GPU/HW: Fix incorrect interlaced VRAM extract offset
Fixes exascerbated combing when upscaling.
2025-03-22 01:11:24 +10:00
Stenzek
6eddc0b982 GPUDevice: Don't allow copy-resize between different formats
That's a spec violation.
2025-03-22 01:11:23 +10:00
Stenzek
346f0f945d GameDatabase: Fix incorrect multitap key parsing 2025-03-21 19:11:50 +10:00
Stenzek
de6a8fba51 BIOS: Set priority of v4.1 E to 10
It doesn't have the additional region check.
2025-03-21 19:11:47 +10:00
Stenzek
5c41a48e39 GPU/HW: Fix crash when changing downsampling factor 2025-03-20 21:19:08 +10:00
zkdpower
19c03aff4d Update the Simple-Chinese translation to latest. (#3394) 2025-03-20 21:17:47 +10:00
Anderson Cardoso
fffa44911c Atualização Português do Brasil (#3393)
Atualizado para a última versão.
2025-03-20 21:17:39 +10:00
JukePlz
10fea83b4a GameDB: Intelligent Qube doesn't support analog controller (#3392)
Same for the demos.
2025-03-20 21:17:20 +10:00
Daniel Nylander
eea4159756 Updated Swedish translation (#3391) 2025-03-20 21:17:08 +10:00
KamFretoZ
e5cec05633 Qt/BPM: Add Green Giant Theme (#3390)
WHAT ARE YE DOING IN MY SWAMP???
2025-03-20 21:16:45 +10:00
Stenzek
a1d69982f3 CI: Update AppStream metainfo 2025-03-15 18:49:58 +10:00
Stenzek
e3cb3d029b FullscreenUI: Fix system not unpausing after HC disable popup 2025-03-15 16:27:43 +10:00
Stenzek
27fc7de07a FullscreenUI: Add translucency/shadow to achievement notifications 2025-03-15 16:27:43 +10:00
Stenzek
a1e5bb7bc0 FullscreenUI: Display legend for achievement status icons 2025-03-15 15:58:39 +10:00
Stenzek
61de096d26 FullscreenUI: Add status text (left side of footer) 2025-03-15 15:58:22 +10:00
Stenzek
4f00a7c7c1 FullscreenUI: Add rounding to achievements progress bars 2025-03-15 15:44:23 +10:00
Stenzek
3420af829c FullscreenUI: Display unlock rarity in achievements view 2025-03-15 15:41:30 +10:00
Stenzek
830842891e GameList: Rename max value enum for consistency 2025-03-15 15:03:42 +10:00
Stenzek
dd885cfe2f GameList: Cache invalid entries
Saves repeatedly scanning them every time the application starts.
2025-03-15 15:02:56 +10:00
Stenzek
8a0400ad2c GameList: Don't try to scan gpudump files 2025-03-15 14:46:19 +10:00
Stenzek
bcd4b918dc FullscreenUI: Fix black screen on renderer change 2025-03-15 14:39:22 +10:00
Stenzek
c82c007a75 FullscreenUI: Add settings reset option to settings 2025-03-15 14:33:51 +10:00
Stenzek
0a470067f5 FullscreenUI: Move appearance up in settings order 2025-03-15 14:07:35 +10:00
Stenzek
9734066514 FullscreenUI: Add StaticGray background 2025-03-15 14:05:09 +10:00
Stenzek
2a86faa51e FullscreenUI: Replace landing icons with colourable icons 2025-03-15 13:56:29 +10:00
Stenzek
4bac7cb79e FullscreenUI: Fix some dialogs not being cancellable
i.e. exitable with right mouse click/B button.
2025-03-15 02:18:20 +10:00
KamFretoZ
db3b689166 FullscreenUI: Add Dark Ruby theme (#3389) 2025-03-15 02:17:54 +10:00
Stenzek
1189f53840 FullscreenUI: Add 'Automatic' theme that syncs with Qt 2025-03-15 00:42:02 +10:00
Stenzek
6e27b8ab91 FullscreenUI: Add option to start/open to game list 2025-03-14 23:57:14 +10:00
Stenzek
3d0f038697 FullscreenUI: Move game list settings to main tab
And add resume to game list/grid.
2025-03-14 23:53:50 +10:00
Stenzek
6c867859bf FullscreenUI: Apply theme to loading screen 2025-03-14 23:07:14 +10:00
Stenzek
f11c31b41c ImGuiOverlays: Apply theme to save state selector 2025-03-14 22:58:02 +10:00
Stenzek
cffafad2ca ImGuiManager: Use fullscreen UI theme for OSD 2025-03-14 22:36:14 +10:00
Stenzek
b6fa2cecd3 FullscreenUI: Fix shadowed text alpha again 2025-03-14 22:36:14 +10:00
Stenzek
9c971825a9 FullscreenUI: Apply theme to ingame achievement overlays 2025-03-14 21:22:17 +10:00
Stenzek
c57689cc90 FullscreenUI: Inherit colour alpha for shadowed text 2025-03-14 21:21:56 +10:00
Stenzek
511663198e Qt: Update glyph ranges 2025-03-14 20:52:43 +10:00
zkdpower
531b3e103a Update the Simple-Chinese translation to latest. (#3388) 2025-03-14 20:52:19 +10:00
Stenzek
e422afdec1 FullscreenUI: Improve achievements pause menu overlays
- Add most recent unlock/nearest completion.
- Make it look nicer and better fit with the rest of the interface.
2025-03-14 20:50:20 +10:00
Stenzek
ba3295930c VulkanDevice: Allow 0x0 window size
Fixes minimizing in render-to-separate-window mode.
2025-03-12 23:54:25 +10:00
KamFretoZ
4fc49ee0ca FullscreenUI: Tweak the highlight background color (#3387) 2025-03-12 23:54:15 +10:00
Stenzek
f6296ceb09 Qt: Increase setup wizard dialog height
Needs it on Linux otherwise graphics combos are shrunk.
2025-03-12 01:46:10 +10:00
Stenzek
9a9ed52b70 Qt: Fix vertical alignment in patches page 2025-03-12 01:46:07 +10:00
Stenzek
44af55a77f FullscreenUI: Differentiate title/subtitle colours
Makes it easier to read.
2025-03-12 01:46:04 +10:00
Stenzek
72a0ba1e8e FullscreenUI: Fix pause menu light theme shadow colour 2025-03-12 00:19:32 +10:00
Stenzek
aeadd4c280 FullscreenUI: Move game info to top of pause menu 2025-03-11 23:19:00 +10:00
Stenzek
d6ab840e4b FullscreenUI: Use RetroAchievements game icon as fallback game image 2025-03-11 22:38:43 +10:00
Stenzek
492a55ee8b FullscreenUI: Add icons to achievement list categories 2025-03-11 22:27:08 +10:00
Stenzek
541af8d5de GDBServer: Stub out thread commands 2025-03-11 22:07:18 +10:00
Stenzek
7bae23d79d GDBServer: Implement memory breakpoints 2025-03-11 21:50:26 +10:00
Stenzek
a0c06f8d9c GDBServer: Implement 's' command (single step) 2025-03-11 21:32:03 +10:00
Stenzek
814263b442 GDBServer: Mostly rewrite handlers and fix undefined behaviour
Remove all heap allocations.
Remove copies.
2025-03-11 21:29:29 +10:00
Stenzek
2f5855a7a4 GDBServer: Get rid of <map> usage 2025-03-11 20:37:37 +10:00
Stenzek
cd694c01d8 GDBServer: Improve ack handling
Treat acks as complete packets, that way it doesn't spam an error
when only an ack is sent.
2025-03-11 20:30:47 +10:00
Stenzek
c717f547cf Deps: Update to SDL3 3.2.8 2025-03-10 21:54:45 +10:00
Stenzek
8bffd9725e Qt: Lock system when automatic updater shows
Prevents messyness when launching in fullscreen+big picture.
2025-03-10 21:54:45 +10:00
Stenzek
e25f287d60 Qt: Avoid stuck in temporary render-to-separate mode 2025-03-10 21:54:45 +10:00
Stenzek
9f0bbccd50 Achievements: Fix progress bar text alignment 2025-03-10 21:54:45 +10:00
Víctor "IlDucci
29f19d0ab6 Spanish (Spain) translation update (#3386)
- Adding new strings.
2025-03-09 16:10:49 +10:00
Stenzek
58dc7562a3 GPU/HW: Add in-pass clear depth pipeline
Instead of clearing the entire buffer, we only need to wipe out the
current drawing area. Saves a decent chunk of memory bandwidth in games
that end up spamming clears.
2025-03-07 21:33:06 +10:00
Stenzek
ee6887b68a GPU/HW: Add stat for depth buffer clears 2025-03-07 21:33:02 +10:00
Stenzek
2bfbec3e9e Settings: Use new key name for depth threshold
Because of the changed range.
2025-03-07 21:32:57 +10:00
Stenzek
705fe11e07 Qt: Fix incorrect file filter for memory card import 2025-03-07 21:32:57 +10:00
Stenzek
e73ca9e052 Qt: Fix new range for depth clear threshold 2025-03-07 18:05:20 +10:00
Stenzek
6437a5db60 GPU/TextureCache: Dump textures asynchronously
Saves lagging the emulation.
2025-03-07 16:05:36 +10:00
Stenzek
95797b05f1 GPU: Force early run on GP0 FIFO overflow
And don't crash if a game spams GP0 writes and it overflows.
2025-03-07 15:49:07 +10:00
Stenzek
9939f1cd05 CPU/Interpreter: Use __builtin_{add,sub}_overflow for exceptions
Recompiler already does this.
2025-03-07 15:48:28 +10:00
Stenzek
7eb7ad684c CPU/Recompiler: Remove load delay flag from lwc2
Shouldn't make any difference since it's not a register write.
2025-03-07 15:08:00 +10:00
Stenzek
826f10239c CPU/Recompiler: Flush GTE completion cycle on load without fastmem 2025-03-06 22:41:10 +10:00
Stenzek
78bb14bd23 CPU: Fix disassembly of GTE instructions in log 2025-03-06 22:41:10 +10:00
Stenzek
b230c9c639 CPU/PGXP: Use GTE MAX_Z for Z normalization
Fixes clipping with depth buffer in some games, e.g. Final Fantasy VII battles.
2025-03-06 22:41:10 +10:00
Stenzek
8cfd843d8f System: Fix depth clear threshold not applying immediately 2025-03-06 22:41:09 +10:00
Stenzek
160f1ea8a0 Qt: Fix vibration motor binding not showing some devices 2025-03-06 22:41:09 +10:00
Anderson Cardoso
c3ce0eece2 Atualização Português do Brasil (#3385)
Melhoria de consistência dos textos e adição de novos conforme última atualização mais recente.
2025-03-06 22:40:54 +10:00
bl@ck_m@ge
b8d86a18da GameDB: Kagero II & III 2025-03-04 17:55:00 +10:00
Stenzek
0bf0b5c22b Qt: Fix typo in setup wizard 2025-03-04 14:07:17 +10:00
Stenzek
4c64e4879f Mini: Log fatal errors to stderr 2025-03-04 14:07:17 +10:00
Daniel Nylander
af4eb68065 Updated Swedish translation (#3383) 2025-03-04 14:06:10 +10:00
JukePlz
c775872a6c GameDB: ASCII and VIP demos don't support analog controllers. (#3384) 2025-03-04 14:05:47 +10:00
Stenzek
859f5090c8 FullscreenUI: Update translation strings 2025-03-02 12:01:55 +10:00
KamFretoZ
38146f2023 FullscreenUI: Fix toast colors and add more themes (#3381) 2025-03-02 12:01:27 +10:00
Stenzek
a0fef2d5ab Qt: Merge gamelistmodel.cpp and gamelistwidget.cpp
They're constantly referring to each other.
2025-03-01 18:13:37 +10:00
Stenzek
4bfb37f8fb Qt: Add graphics and achievements to setup wizard 2025-03-01 18:05:48 +10:00
Stenzek
965da856db FullscreenUI: Add additional rounding to some dialogs 2025-03-01 17:10:09 +10:00
Stenzek
34fdbafe85 FullscreenUI: Add drop shadows to most text
Improves readability with custom backgrounds.
2025-03-01 16:00:05 +10:00
Stenzek
9bfc3e90cc FullscreenUI: Hook up dynamic toast colour 2025-03-01 13:10:50 +10:00
Stenzek
9d9da94b7b FullscreenUI: Default to dark theme on unknown value 2025-03-01 13:10:50 +10:00
Stenzek
5a4e87aba3 FullscreenUI: Reorder interface settings to match Qt 2025-03-01 13:10:44 +10:00
KamFretoZ
5dc0a3630a FullscreenUI: Add Themes (#3380) 2025-03-01 12:41:06 +10:00
Stenzek
15fde6a51b CI: Add ARM64 AppImage builds 2025-03-01 01:34:48 +10:00
Stenzek
ea8f3e5e58 Scripts: Support generating both Qt and Mini AppImages 2025-03-01 01:27:29 +10:00
Stenzek
89d9842c7e FullscreenUI: Fix popup title colours 2025-03-01 01:11:26 +10:00
Stenzek
be970bcfe4 Qt: Handle inverted+negated axes when mapping 2025-02-28 18:06:51 +10:00
Stenzek
ec7c83a58e Settings: Fix race toggling OSD messages 2025-02-28 16:29:18 +10:00
Stenzek
6a86c80445 CPU: Correct wording about cop2 and IRQs 2025-02-28 16:29:18 +10:00
Stenzek
37fa0d135c Mini: Add duckstation-mini interface 2025-02-28 16:29:18 +10:00
Stenzek
df9f15eb68 OpenGLDevice: Support SDL window type 2025-02-28 16:29:18 +10:00
Stenzek
ee1a3b904e VulkanDevice: Support SDL window type 2025-02-28 15:46:53 +10:00
Stenzek
4bddd38d70 WindowInfo: Add SDL window type 2025-02-28 15:46:53 +10:00
Stenzek
0733e173b2 FullscreenUI: Add BackgroundProgressCallback 2025-02-28 15:46:53 +10:00
Stenzek
498e7aac56 X11Tools: Load libxcb and friends dynamically 2025-02-28 15:46:53 +10:00
Stenzek
f7f17a077c Cheats: Add Enable8MBRAM option for patches 2025-02-26 22:43:18 +10:00
Anderson Cardoso
0b167aad52 Atualização Português do Brasil (#3379)
Atualizado para a última versão.
2025-02-26 22:42:50 +10:00
Renzo Pigliacampo
08bbb4a981 Updated Spanish (Latin America) translation (#3378) 2025-02-26 22:42:42 +10:00
Stenzek
fbbc4943f6 FullscreenUI: Fix crash in game properties on non-scanned file 2025-02-24 23:48:23 +10:00
Stenzek
eda32e0695 Qt: Fix image key in overlay export 2025-02-23 18:03:02 +10:00
Stenzek
b764ed4682 DDGoController: Fix incorrect translation context 2025-02-23 18:03:02 +10:00
zkdpower
2011c5511c Update the Simple-Chinese translation to latest. (#3377) 2025-02-23 18:02:52 +10:00
Stenzek
3ea26cc910 GPU: Rewrite automatic resolution scaling
Make it play nice with rewind/runahead.
2025-02-21 23:58:05 +10:00
Stenzek
d812463649 Qt: Ensure SIGCHLD is ignored properly 2025-02-21 23:58:04 +10:00
Stenzek
5fea81c07d Qt: Show only HC achievement count if HC == SC 2025-02-21 23:58:04 +10:00
Stenzek
91370ee5ac Achievements: Update both HC and SC counts on unlock/boot 2025-02-21 23:58:04 +10:00
Stenzek
fa3815d681 Achievements: Fix progress database corruption 2025-02-21 23:58:04 +10:00
Stenzek
90cb92bcc7 CI: Ensure libz.so.1 is packaged in AppImage 2025-02-21 23:58:04 +10:00
JukePlz
f2715b39ec GameDB: Falcata - Astran Pardma no Monshou hash (#3376) 2025-02-21 23:31:38 +10:00
bl@ck_m@ge
d5c83a80a3 GameDB: Sorcerer's Maze (#3375) 2025-02-21 23:31:21 +10:00
Stenzek
f96ab3afda Deps: Switch zlib to zlib-ng
Mac is ommitted because the updater is currently still dynamically
linked, and libz is not part of the bundle (yet).
2025-02-20 16:56:43 +10:00
Stenzek
d1b9473cd2 Deps: Update cpuinfo 2025-02-20 16:56:43 +10:00
Stenzek
373c83c357 GameDB: PGXP-CPU for Twisted Metal 2 2025-02-20 13:47:23 +10:00
KamFretoZ
6a0c73b547 Qt: Add AMOLED theme (#3374) 2025-02-20 13:18:27 +10:00
Stenzek
78bd0fdf3e Qt: Always use ARGB32 for padded cover images
Fixes black background around non-square covers.
2025-02-17 22:53:10 +10:00
Stenzek
31a5d8c481 GameDB: Tama - Adventurous Ball in Giddy Labyrinth hash 2025-02-17 22:53:10 +10:00
Stenzek
72ac4f94db CDROM: Increase delay for pause-when-paused
Fixes lockup in Tama - Adventurous Ball in Giddy Labyrinth.
2025-02-17 22:53:10 +10:00
Stenzek
6f25cf31a7 CDROM: Add randomness to repeated seek times
I hate it, but it fixes lockups in Dino Crisis 2, and probably
other games with dodgy code too.

Also Simple 1500 Series Vol. 57 - The Meiro.
2025-02-17 22:52:56 +10:00
Stenzek
2f5c4d819e Common: Add xorshift-based PRNG class 2025-02-17 21:33:37 +10:00
Stenzek
b57049f1aa CI: Enable Wayland on AppImage/Flatpak builds
Might have to revert this, we'll see how many systems it breaks on.
2025-02-17 00:24:52 +10:00
Stenzek
9a75af2fa9 Qt: Explicitly set desktop file path on startup
Fixes window icon when running under Wayland.

Or, well, as much as it can given the fact that smug GNOME developers
think that windows should not be able to set their own icons.
2025-02-16 23:49:19 +10:00
Stenzek
0c30acb285 Qt: Work around QtWayland bugs
- Render to main no longer screws up the game list/menu bar.
- Toggling render to main no longer breaks the main window.

Positioning still sucks, but the various groups involved would
rather sit around arguing with each other rather than actually
shipping solutions ¯\_(ツ)_/¯.
2025-02-16 22:16:19 +10:00
Stenzek
cb10c6fbf4 Qt: Ensure build warning is themed 2025-02-16 22:16:17 +10:00
Stenzek
4ce1b1afed GameDB: Set PGXPPreserveProjFP for Vagrant Story
Improves jitter on character models.

Haven't seen any other game with this much of an impact.
2025-02-16 19:03:09 +10:00
Stenzek
5bd1a492be GameDatabase: Turn PGXPPreserveProjFP into a boolean setting 2025-02-16 19:02:56 +10:00
Stenzek
e688e24eb9 GTE: Use floating-point math for preserve-proj-fp 2025-02-16 18:04:24 +10:00
Stenzek
9928d01ac4 Common: Fix ARM64 build on clang-cl 19
Also fix Vector4 extract32().
2025-02-16 18:03:33 +10:00
Stenzek
cba9d00019 Qt: Further improve async cover loading
- Fix non-square images not centering.
- Fix possible crash when changing scale quickly.
- Avoid repeatedly resizing placeholder.
2025-02-16 13:18:37 +10:00
Anderson Cardoso
b45f9c39c7 Atualização Português do Brasil (#3373)
Atualizado para a última versão.
2025-02-16 13:18:22 +10:00
Stenzek
1b3ca81efc Qt: Fix hotkey search placeholder localisation 2025-02-15 23:02:19 +10:00
Stenzek
369f62318f Cheats: Only display codes for selected revision 2025-02-15 22:45:17 +10:00
shikulja
4562573711 Update Russian translation (#3372)
* Update ts

* Update Russian translation

* .
2025-02-15 22:44:50 +10:00
Stenzek
ce8b1f0996 GPU: Small optimization to lanczos shader
Apparently the Adreno shader compiler can't do this on its own.

~23% performance improvement.
2025-02-15 17:44:41 +10:00
Stenzek
958fd0049c GPU/HW: Don't use shader for self-overlapping copies
If we use the shader here, we're going to immediately end the
render pass since the area we read and wrote to is going to be
dirty again.

This is problematic on Mali where the render passes are really
expensive. Test case: Dino Crisis 2 - open menu
2025-02-15 17:20:30 +10:00
Stenzek
8772c336ec CPU: Don't stall until GTE completion on write
Apparently this is what the real CPU does, and some very optimized
code can run slower if we stall early.

Obviously if you write to a register being read by the command,
things are going to break.
2025-02-15 12:57:18 +10:00
Stenzek
7d80a74dc3 GameDatabase: Remove now-unused traits 2025-02-15 12:57:02 +10:00
Stenzek
2fcf115d0b GameDB: Drop LUT fastmem overrides
No longer needed with the previous commit.
2025-02-15 12:55:07 +10:00
Stenzek
2bfc408242 Bus: Enable mmap fastmem on uppermost KSEG0 mirror
Instead of mapping all the RAM mirrors, we only map the KSEG0
uppermost mirror. This is where some games place their stack, so
we avoid the backpatching overhead/slowdown, but don't pay the
cost of 4x the mprotect() calls when a page's protection changes,
which can have a non-trivial impact on slow ARM devices.
2025-02-15 12:42:43 +10:00
Stenzek
e9bfca8cca System: Add 'Fast Forward Memory Card Access' option
Does what it says on the tin.
2025-02-15 12:38:32 +10:00
Stenzek
13d58d8ed0 Qt: Move fast boot/fast forward to console settings
Makes more sense there, and matches Android.
2025-02-15 12:32:22 +10:00
Stenzek
f4aa5e1b98 MemoryCard: Filename -> Path 2025-02-15 11:39:31 +10:00
Stenzek
e0620fcd40 System: Fix setting-altering game patch behaviour
e.g. overclock was only half applying
2025-02-14 23:50:34 +10:00
Stenzek
bceadadcb4 Image: Fix possible unaligned movaps 2025-02-14 22:51:29 +10:00
Stenzek
6802f77cb9 CrashHandler: More Wcast-function-type-mismatch fixes 2025-02-14 22:06:44 +10:00
Stenzek
af085d7e5a CI: Bump to LLVM/clang 19 2025-02-14 19:25:05 +10:00
Stenzek
ced9ee4b0b Qt: Update glyph ranges 2025-02-14 19:02:22 +10:00
Stenzek
dc6d6b91d4 PostProcessing: Fix abort on slow compile in big picture 2025-02-14 19:01:40 +10:00
Stenzek
5060e72b96 Qt: Fix missing vibration binding for NegConRumble 2025-02-14 19:01:40 +10:00
Stenzek
5ae32d3c70 System: Fix black screen when changing options while paused 2025-02-14 19:01:40 +10:00
Stenzek
953bd0919b RegTest: Fix flipped images in OpenGL
We're reading the framebuffer, not rendered image.
2025-02-14 19:01:40 +10:00
Stenzek
b68d7c8adb Image: Vectorize RGBA8 conversion and add A1BGR5 2025-02-14 19:01:40 +10:00
Stenzek
9b2cf0abbd InputSource: Fix Wcast-function-type-mismatch 2025-02-14 19:01:40 +10:00
Stenzek
5913de947f VulkanDevice: Fix incorrect texture format for A1BGR5 2025-02-14 19:01:40 +10:00
Stenzek
3a44c3a758 GPU: Fix prerotated presenting with OpenGL 2025-02-14 19:01:39 +10:00
Stenzek
995a34e0e3 CMake: Correctly unset host page size if set via cache
Fixes x86 flatpak builds unnecessarily using dynamic page size.
2025-02-14 19:01:39 +10:00
zkdpower
f90fdf66c8 Update the Simple-Chinese translation to latest. (#3371)
* Update the Simple-Chinese translation to latest.
2025-02-14 19:01:28 +10:00
Stenzek
7bc18c8538 DDGoController: Rewrite to support axis input
And add virtual buttons for each of the possible states.
2025-02-12 21:52:02 +10:00
Stenzek
a25d5dcd2f CI: Apply SDL3 joystick patch 2025-02-12 19:24:24 +10:00
Anderson Cardoso
cd89f62935 Atualização Português do Brasil (#3369)
Atualizado para a última versão.
2025-02-12 19:22:13 +10:00
Stenzek
ce616f1c5c Cheats: Reapply frame end codes immediately on reload
Otherwise you end up with a single frame where the old code is used.
2025-02-10 23:45:24 +10:00
Stenzek
c137c562cd Qt: Fix incorrect recommended value 2025-02-10 23:45:24 +10:00
Stenzek
36d5708391 GPU/HW: Fall back to replacements from first disc
So you only need one copy.
2025-02-10 23:45:24 +10:00
Daniel Nylander
f6e8ebec99 Updating Swedish translation (100%) (#3367) 2025-02-10 23:44:23 +10:00
zkdpower
2876713f0f Update the Simple-Chinese translation to latest. (#3368)
* Update the Simple-Chinese translation to latest.

* Update the Simple-Chinese translation to latest.
2025-02-10 23:44:11 +10:00
Stenzek
ef4c00a896 Qt: Use display name for a couple of recommended values 2025-02-10 02:21:19 +10:00
Stenzek
7a587d927f Qt: Fix overlapping widgets in macro trigger shift-click 2025-02-10 02:15:27 +10:00
Stenzek
3eed0d0613 CI/Flatpak: Don't strip SDL3 libraries 2025-02-10 02:01:50 +10:00
zkdpower
788b9cd3bf Update the Simple-Chinese translation to latest. (#3365) 2025-02-10 02:00:38 +10:00
JukePlz
2dfa164629 GameDB: Dezaemon Plus Select 100 does not support analog mode (#3364) 2025-02-10 02:00:08 +10:00
Víctor "IlDucci
c1f8a525ca Spanish (Spain) translation update 2025-02-09 (#3366)
Adding latest changes and cleaning up unused translations.
2025-02-10 01:59:49 +10:00
Stenzek
5fb5dcdd70 Achievements: Improve summary popup
Put hardcore mode notice on its own line, rather than in
parenthesis in the title.
2025-02-09 18:24:06 +10:00
Stenzek
46ae3e55ea Cheats: Show disabled code count when HC/safe mode is active 2025-02-09 17:45:19 +10:00
Stenzek
4ce48abfc1 GPU/HW: Fix incorrect source rect for page replacements 2025-02-09 17:45:16 +10:00
Stenzek
ac4ef4f853 Gt: Update glyph ranges 2025-02-09 16:50:02 +10:00
zkdpower
07f973076d update the Simple-Chinese Translation to latest. (#3363) 2025-02-09 16:49:38 +10:00
Stenzek
8132c51a12 Cheats: Add 'Ignore' field to file format
Codes with Ignore set to true will not be listed/loaded.
2025-02-09 15:58:23 +10:00
Stenzek
4236beabaf System: Fix setting-altering patches not applying on startup 2025-02-09 15:38:12 +10:00
Stenzek
0428a93315 Qt: Fix possible crash when rescanning game list 2025-02-09 15:04:09 +10:00
Stenzek
3e8ef44a1d Deps: Update to SDL3 3.2.4 2025-02-09 15:04:09 +10:00
Stenzek
901927d7fe CDROM: Don't panic on unknown register read 2025-02-09 13:23:37 +10:00
Stenzek
94b2060979 GPU: Clear display texture on fatal error 2025-02-09 13:22:03 +10:00
Stenzek
06b02183cb GPU/HW: Split transparent draws if dual-source blend unsupported
The ordering is not correct otherwise. Ape Escape has a bunch of
overlapping sprites that have a mix of opaque and transparent texels,
and the transparent texels are repeated multiple times when the
opaque texels should cancel them out.

Only affects old Mali drivers.
2025-02-09 13:07:53 +10:00
Stenzek
2663ac9666 CDImage: Improve PBP load error reporting 2025-02-08 17:33:58 +10:00
Stenzek
160c34ef28 CDROM: Avoid additional stat() call loading subchannel
And use BuildRelativePath() for title-based subchannel files.

Fixes flaky loading on Android, some devices return a zero-sized file
when querying a non-existant file.........
2025-02-08 15:54:38 +10:00
Stenzek
81bca06707 System: Add hash to OnGameChanged 2025-02-08 15:03:17 +10:00
Stenzek
acb355a8c3 CDImage: Make .bin loader track length match .cue
Fixes different hashes for loading single-track .bin games directly.
2025-02-08 15:02:56 +10:00
Stenzek
f2cca01e29 ImGuiManager: Fix achievement unlock icon not showing 2025-02-08 01:46:44 +10:00
Daniel Nylander
084422355a Updated Swedish translation (#3362) 2025-02-08 01:46:34 +10:00
Stenzek
063bb96e5d D3D11Device: Always query timestamp before present start
Fixes high GPU usage reporting in D3D11 with AMD GPUs + Optimal Frame
Pacing.
2025-02-07 15:58:35 +10:00
zkdpower
5ae6d9084a update Chinese translation. (#3361)
just UI.
2025-02-07 12:31:58 +10:00
Anderson Cardoso
51480818cd Atualização Português do Brasil (#3360)
Atualizado para a última versão
2025-02-06 22:04:07 +10:00
Stenzek
f8c39ace1c GPU/HW: Warning fix 2025-02-05 22:40:59 +10:00
Stenzek
bee2dabc77 Misc: Replace stringstream str() with C++20 move str()
No extra heap allocation/copy.
2025-02-05 22:38:48 +10:00
Stenzek
8aa97a8118 Data: Update game controller database 2025-02-05 22:14:00 +10:00
Stenzek
2cfc39e874 System: Move cheat reload to Initialize() 2025-02-05 22:13:51 +10:00
Stenzek
57cb2f846e FullscreenUI: Fix system unpausing on shutdown 2025-02-05 20:03:58 +10:00
Stenzek
ecbb79c4bf GPU: Add Lanczos scaling option 2025-02-05 20:01:26 +10:00
Stenzek
99e81f1559 GPU: Fix incorrect condition in WaitForOneQueuedFrame() 2025-02-05 19:31:01 +10:00
Stenzek
c6563a4656 VulkanDevice: Require Vulkan 1.1 for most extension probing
Too much of a headache to deal with these ancient Mali drivers that
support some extensions but not full Vulkan 1.1, and VMA does not
support this scenario.
2025-02-04 17:15:29 +10:00
Stenzek
4ad2d0ac2d GPU: Fix incorrect PAL overscan range 2025-02-03 19:31:23 +10:00
Stenzek
51bef1b3da CMake: Don't print status messages for deps CMakeLists
fmt is noisy.
2025-02-03 00:31:21 +10:00
Stenzek
455836af89 CMake: Check C++20 features that are missing on some systems 2025-02-03 00:30:59 +10:00
Stenzek
cb205c4c36 Qt: Show icon in settings console region dropdown 2025-02-02 22:57:59 +10:00
Stenzek
af277d4d14 Settings: Default to nearest sprite texture filtering
Instead of whatever the 3D texture filter is.

Less confusing since the UI is not disconnected when upgrading from very
old releases, or Android.
2025-02-02 22:57:31 +10:00
Stenzek
59773509af System: Recreate memory save states when device options change 2025-02-02 22:54:32 +10:00
Stenzek
1f5a10371e GPUThread: Handle rare race condition in frame queueing 2025-02-02 22:18:13 +10:00
Stenzek
1ca5782396 Threading: Handle EINTR on sem_wait() 2025-02-02 22:17:56 +10:00
Stenzek
57883910d6 CI: Add ARM64 flatpak build 2025-02-02 18:51:46 +10:00
Stenzek
4ceeb58dbc GPU: Use display size for calculating internal screenshot size
Fixes detail being lost due to added padding when not cropping.
2025-02-02 17:14:35 +10:00
Stenzek
64d3716cfd GPU: Further simplify draw rect calculation
Remove "Stretch Vertically" option, it was very confusing to users.

Integer scale will prefer whichever direction gets a larger draw
rectangle/preserves as much detail.
2025-02-02 17:02:58 +10:00
Stenzek
0c3d55a1a1 GPU: Fix incorrect PAR with overscan cropping 2025-02-02 16:07:06 +10:00
Stenzek
a5940b2e21 GPU: Use constants for display overscan range 2025-02-02 15:39:20 +10:00
Stenzek
7316b011a4 CI: Dependency library updates
HarfBuzz -> 10.2.0
Qt -> 6.8.2
SDL3 -> 3.2.2
SPIRV-Cross -> 1.4.304.0
libjpeg-turbo -> 3.1.0
libpng -> 1.6.45
libwebp -> 1.5.0
libzip -> 1.13.3
shaderc -> 2024.5
2025-02-02 13:56:23 +10:00
Stenzek
24354cb39f GPU: Fix more GPU thread-reading-CPU-thread-settings locations 2025-02-02 13:08:08 +10:00
Stenzek
804d90d48f System: Fix overriding console region 2025-02-02 13:00:18 +10:00
Stenzek
a681386f28 Qt: Fix some options not being disabled with SW 2025-02-01 23:19:12 +10:00
Stenzek
b01c06b412 GPU/TextureCache: Prevent wrapping for replacement lookup
Fixes replacements for 8 and 16-bit textures placed in the right-most
page of VRAM.
2025-01-31 20:56:11 +10:00
Stenzek
635ae5de31 GPU/HW: Don't use sprites-as-fills for small/offscreen points 2025-01-31 19:50:33 +10:00
Stenzek
d65c4efdd8 GPU/TextureCache: Prefill dumped texture list with replacements
Allows skipping dumping replaced textures without replacements enabled.
2025-01-31 15:47:22 +10:00
Stenzek
b5925ab139 Achievements: Include any codepoints above 0x100 in dynamic range 2025-01-31 13:48:57 +10:00
Stenzek
03181d1179 GPUThread: Fix crash during FSUI language switch 2025-01-31 13:47:29 +10:00
Stenzek
96058f5d7e System: Use recreation logic for toggling GPU threading 2025-01-31 12:56:19 +10:00
Stenzek
f7d7eecb6c GPU/TextureCache: Fix replacements starting in second page 2025-01-30 13:33:00 +10:00
Stenzek
44a75d6586 GPUThread: Fix setting change crash with thread off 2025-01-30 13:32:32 +10:00
Stenzek
369879e685 Settings: Log when creating EmuFolders fails 2025-01-30 02:11:23 +10:00
Stenzek
aae7573e63 Achievements: Fix build with regtest 2025-01-30 02:10:49 +10:00
Stenzek
9b6021b79e FullscreenUI: Fix progress bar padding in loading screen 2025-01-30 01:43:22 +10:00
Stenzek
0d9e6bd482 FullscreenUI: Use effective value for achievement options enable 2025-01-30 01:18:47 +10:00
Stenzek
d314b25f91 System: Fix per-game achievements hardcore mode
By mostly reverting 4dd6365a99, I didn't
think of all the implications. Not just per-game HC mode, but it's also
problematic on Android too.
2025-01-30 01:18:47 +10:00
Stenzek
02234715c5 FullscreenUI: Move UpdateRunIdleState() for system soft-fail to host
That way it's always in the correct state for e.g. memory card shutdown
confirmations.
2025-01-29 20:40:14 +10:00
Stenzek
128bab29f8 Host: Allow button title override in ConfirmMessageAsync() 2025-01-29 19:19:53 +10:00
Stenzek
4dd6365a99 System: Simplify HC disable confirm on startup
Use one path on all platforms, always asynchronous.
2025-01-29 19:19:53 +10:00
Stenzek
28f6358ec5 Qt: Use FSUI to service ConfirmMessageAsync() if active 2025-01-29 19:19:53 +10:00
Stenzek
4da7692a2d System: Adjust initialization order to better fit FullscreenUI
Fixes jankyness of rendering the landing page when trying to resume
a game with achievements active, or when loading state.
2025-01-29 19:19:53 +10:00
Stenzek
1b678d0ebc FullscreenUI: Allow using right mouse button for 'back' 2025-01-29 19:19:53 +10:00
Stenzek
224cb6ac8e FullscreenUI: Fix ClosePauseMenu() running on wrong thread 2025-01-29 19:19:49 +10:00
Stenzek
231ba050a2 GPUThread: Switch to borderless if exclusive fullscreen fails
Better than ending up windowed.
2025-01-29 18:20:41 +10:00
Stenzek
e36dbaf255 Qt: Show current fullscreen resolution in UI even if invalid 2025-01-29 18:20:08 +10:00
Stenzek
70c45f7cf8 GPU/TextureCache: Handle replacements larger than 256x256
I left this unfinished because it was a pain...
2025-01-28 17:36:00 +10:00
Stenzek
f58fa2297e GPU/TextureCache: Only use a single palette record for C16
Stops C16 textures larger than 256x256 being split up.
2025-01-28 17:36:00 +10:00
Stenzek
b0c0d6444c GPU/TextureCache: Fix parsing of C16 replacement names 2025-01-28 17:36:00 +10:00
Stenzek
7188ab863a GPU/HW: Treat fill-like sprites as fills if TC is enabled
Umihara Kawase Shun clears the framebuffer with a single large
sprite, which causes the texture cache to think the pages have
been drawn.
2025-01-28 17:35:52 +10:00
Stenzek
d7c78eedce GPU/HW: Fix box downsampling on OpenGL ES 2025-01-28 15:59:35 +10:00
JukePlz
afd619a7d8 GameDB: Pro-Pinball needs same traits as others in the series (#3359)
otherwise hangs on loading and has inferior performance. Probably missed due to title hyphenation.
2025-01-27 13:35:17 +10:00
Stenzek
0665cb5306 FullscreenUI: Further refine achievements login dialog 2025-01-27 13:34:45 +10:00
Stenzek
5630f3958b Qt: Fix loading webp images on Windows 2025-01-26 14:01:42 +10:00
Stenzek
0e3668a7bb GameList: Show achievement information in game list 2025-01-26 13:49:08 +10:00
Stenzek
6512ed8a8c Achievements: Add offline tracking of progress and hash library 2025-01-26 13:49:08 +10:00
Stenzek
d4b0b7fc29 Achievements: Include rc_client version in user agent 2025-01-26 13:49:08 +10:00
Stenzek
6a09d6ecda Achievements: Don't store hash as a string
This is needed to store achievement metadata in the game list.
2025-01-26 13:30:26 +10:00
Stenzek
1bfc4b6e6c dep/rcheevos: Update to 08999e0 2025-01-26 13:30:23 +10:00
Stenzek
21aa6ead5f Scripts: Add script to download/generate achievement database 2025-01-26 00:09:44 +10:00
Stenzek
ca509a8b97 StringUtil: Add fixed-length DecodeHex() 2025-01-25 22:35:06 +10:00
Stenzek
543704d57c HTTPDownloader: Drop some log messages to debug 2025-01-25 22:35:06 +10:00
Stenzek
2b7a4f8d19 Qt: Avoid game list refresh on shutdown
We only need to invalidate the entries that have had their play times
changed, not the entire list.
2025-01-25 19:45:42 +10:00
Stenzek
4e97420b3b InputManager: Switch to SDL3 2025-01-24 15:54:31 +10:00
Stenzek
573b2eb529 SPU: Move device failure message to OSD 2025-01-24 14:54:57 +10:00
Stenzek
9666abc172 FullscreenUI: Hook up to disc change hotkey 2025-01-24 13:47:55 +10:00
JukePlz
9096402a30 GameDB: Rakugaki Showtime does not support analog mode (#3358)
Only supports vibration.
2025-01-24 13:10:32 +10:00
Stenzek
dc5f85a34e System: Display safe mode warning when toggling on 2025-01-24 12:50:35 +10:00
Anderson Cardoso
807094d627 Atualização Português do Brasil (#3357)
Atualizado para a última versão
2025-01-23 12:38:43 +10:00
Stenzek
13c7b8542d GPUThread: Fix starting big picture mode 2025-01-23 12:37:26 +10:00
Stenzek
4da1f613b6 System: Simplify CD speedup warnings 2025-01-23 12:22:32 +10:00
Stenzek
df8822760a GPU/HW: Further tweaks to replacement alpha handling
We can't simply clear the alpha channel unconditionally here, because that
would result in any black pixels with zero alpha being transparency-culled.

Instead, we set it to a minimum value (2/255 in case of rounding error, I
don't trust drivers here) so that transparent polygons in the source still
set bit 15 to zero in the framebuffer, but are not transparency-culled.

Silent Hill needs it to be zero, I'm not aware of anything that needs
specific values yet. If it did, we'd need a different dumping technique.
2025-01-23 12:12:58 +10:00
Stenzek
9113a6e6a6 Qt: Add 'Multiple Devices' to automatic mapping
Also populate the "current device" label with the device from
the config when running the setup wizard, instead of always setting
the label to Keyboard.
2025-01-22 18:38:37 +10:00
Stenzek
b08ab9f712 Qt: Fix border overlay export button 2025-01-22 18:38:37 +10:00
Stenzek
d395be07ee Qt: Fix global setting showing incorrectly for int-list 2025-01-22 18:38:37 +10:00
Stenzek
89504b0184 GPUThread: Push settings through FIFO
Saves the std::function heap allocation.
2025-01-22 18:38:37 +10:00
Stenzek
f045a1742d GPUThread: Fix order of updating state
Fixes unoverwritten textures not dumping on system shutdown.
2025-01-22 18:38:37 +10:00
Stenzek
8eaa1f312d GPU: Fix overlay destination alpha with postfx
Also don't assume the image has premultiplied alpha.
2025-01-22 18:38:37 +10:00
Stenzek
0129679bb0 GPU: Reduce overdraw when using overlays
Clear the four borders individually instead of a blit over the
entire texture.
2025-01-22 18:38:37 +10:00
Stenzek
0166939609 PostProcessing/GLSL: Clear alpha to 1.0 2025-01-22 18:23:12 +10:00
Stenzek
be75a97efe GPUDevice: Fix swap chain clear colour normalization 2025-01-22 18:23:11 +10:00
Stenzek
af58740f5d System: Always display OSD warning messages
I regretted what I did in f2720b98dd
less than a week after I pushed the change.

As a compromise, only display the unsafe settings warnings on startup.
2025-01-22 18:23:10 +10:00
Stenzek
4e588bb6c1 GPU: Fix incorrect interface for postfx config 2025-01-21 20:55:26 +10:00
Stenzek
78f6e11b91 GPUThread: Skip debug window update on Android 2025-01-21 20:22:10 +10:00
Stenzek
19ca9cb47d GPU/HW: Use texture loads for native resolution
Hopefully work around sampling precision issues in older AMD drivers
and Mali Midgard if we're lucky. But I don't have anything this old
to verify with.
2025-01-21 20:15:07 +10:00
Stenzek
080eccd8fc GPUThread: Shutdown instead of panicing on switch failure 2025-01-21 20:12:38 +10:00
Stenzek
9c4b2112ae GPU: Fix incorrect screen draw rect
Fixes loading screen in Alundra 2, as well as incorrect effective
PAR when using None crop mode.
2025-01-21 19:54:54 +10:00
Stenzek
fb3e290133 GPUDevice: Move exclusive fullscreen to features
Also fixes it not enabling in D3D12 renderer.
2025-01-21 19:12:44 +10:00
Stenzek
389276bb03 GPUDevice: Normalize supports_texture_buffers => texture_buffers 2025-01-21 19:06:59 +10:00
Stenzek
9d4789e082 FullscreenUI: Fix blank screen flicker starting game
Also returns to whichever menu the system boot was initiated from.
2025-01-20 23:17:24 +10:00
Stenzek
17b0da7283 GameList: URL encode custom properties paths with brackets
Fixes custom properties not applying on restart to games with
brackets in their paths.
2025-01-20 21:59:24 +10:00
Stenzek
4b20fc6922 Path: Fix several errors in URLEncode/Decode and add tests 2025-01-20 21:44:44 +10:00
Stenzek
78902d7632 FullscreenUI: Fix several more unsafe reads 2025-01-20 19:00:51 +10:00
Stenzek
cc0ccf2648 Data: Update resources 2025-01-20 17:24:36 +10:00
Stenzek
f219b47e98 FullscreenUI: Use constant width/height scale on Android
Fixes achievement notifications being differently sized
depending on the screen rotation.
2025-01-20 00:01:46 +10:00
Stenzek
7c2488c942 PostProcessing/GLSL: Fix image moved off-screen with alignment 2025-01-19 21:40:38 +10:00
Stenzek
c03b6f3d84 Misc: Replace isspace() usage with StringUtil::IsWhitespace()
Avoids the UB if the character is negative (e.g. reading from a binary
file), as well as locale-specific rubbish.
2025-01-19 21:29:14 +10:00
Stenzek
21b167d382 CDImage: Tidy up Open() method 2025-01-19 21:29:14 +10:00
Stenzek
7905793ae0 GPU: Use screen alignment for overlay instead of display rect 2025-01-19 21:13:16 +10:00
Stenzek
8c5c0e6114 Common: Fix Vector2->Vector4 zero-extend constructor
And add loadl(const GSVector2i&) as an easier-to-read overload.
2025-01-19 21:13:16 +10:00
Stenzek
ade8bf7b3b GPU: Fix overlay+postprocessing combination 2025-01-19 21:13:16 +10:00
Stenzek
9fdeeb3fb6 GPU: Add alpha blending support to overlay 2025-01-19 16:37:51 +10:00
Stenzek
9b8d2a88de System: Required changes for Android 2025-01-19 15:31:58 +10:00
Stenzek
e1cbb50c64 GPU: Fix various capture/screenshot issues
- Simplify functions for rendering display.

- Post-processing should only when the target size matches the window.
  Otherwise the shaders are constantly recompiled.

- Include border overlay in capture/screenshots when above condition
  is satisfied.

- Relax video alignment size when using screen resolution + auto.

- Fix "Internal Resolution (Uncorrected)" capture mode.
2025-01-19 13:42:38 +10:00
Stenzek
725dcea05a GPU: Fix crash toggling border overlays 2025-01-19 12:25:19 +10:00
Stenzek
6131ddbefe GPU: Fill in unused/padded area in overlays 2025-01-18 22:59:49 +10:00
Stenzek
88b43370dc GPUDevice: Replace explicit GL_PUSH/GL_POP with nested GL_SCOPE 2025-01-18 22:59:49 +10:00
Stenzek
d62261e7a4 GPUDevice: Allow nested GL_SCOPE macros 2025-01-18 22:59:49 +10:00
Stenzek
7fcf0a3283 README: Update feature list for 2025 2025-01-18 22:59:48 +10:00
Stenzek
313f653fe0 Data: Add one example overlay 2025-01-18 22:59:48 +10:00
Stenzek
e0a9bbe600 PostProcessing: Move into GPU presenter
Means that the renderer can be changed without reloading shaders,
and speeds up config change detection.
2025-01-18 22:59:48 +10:00
Stenzek
d589696eff PostProcessing: Get rid of GPU-dependent globals 2025-01-18 22:59:48 +10:00
Stenzek
338d29d271 GPUDevice: Move empty/null texture to base class 2025-01-18 22:59:48 +10:00
Stenzek
609fa5c7d7 GPUDevice: Add sampler cache to base class
Removes per-backend bookkeeping in D3D12 and Vulkan.
2025-01-18 22:59:48 +10:00
Stenzek
da13579356 GPU: Align presenter/backends to cache line 2025-01-18 22:59:48 +10:00
Stenzek
dd9788262e GPU: Refactor display presentation workflow
Adds the ability to set overlays, and fixes postfx with prerotation.
2025-01-18 22:59:48 +10:00
Stenzek
6cba825bac System: Add fatal error shutdown path
Switch to a null backend and shut down the system instead of crashing.
2025-01-18 22:59:48 +10:00
Stenzek
d52bf795e4 GPU: Split backend into Backend+Presenter 2025-01-18 22:59:48 +10:00
Stenzek
8f19ac2dee System: Set rapidyaml error handlers on startup
That way it can be used in multiple places.
2025-01-18 22:59:48 +10:00
Stenzek
08d2586a86 System: Allow host to set async worker count
For regtest.
2025-01-18 22:59:48 +10:00
Stenzek
e41f179108 PostProcessing: Fix erroneous reload message 2025-01-18 22:59:48 +10:00
Stenzek
1481c1d231 System: Post-processing is shut down on GPU thread 2025-01-18 22:59:48 +10:00
Stenzek
b9822602b2 FullscreenUI: Show game icons in game list 2025-01-18 22:59:48 +10:00
Stenzek
f98b904c50 FullscreenUI: Add 'Set Cover Image' to game list 2025-01-18 22:59:48 +10:00
Stenzek
7cc47551a4 FullscreenUI: Fix parent scroll resetting on directory change 2025-01-18 22:59:48 +10:00
Stenzek
e34d23c8e7 FullscreenUI: Implicitly close non-multichoice dialogs
Also fixes disc swap using a multichoice instead of single.
2025-01-18 22:59:47 +10:00
Stenzek
a7ab53f02c GPU: Fix GLSL ES compile error with weave deinterlacing 2025-01-18 22:59:47 +10:00
Stenzek
43e7be902c Misc: Add missing error reporting to a couple of WriteBinaryFiles() 2025-01-18 22:59:47 +10:00
Stenzek
227c249d7f FullscreenUI: Skip SVG prefix if image is not a SVG 2025-01-18 22:59:47 +10:00
Stenzek
c34dda39b7 FullscreenUI: Fix invalidating images with size hints 2025-01-18 22:59:11 +10:00
Stenzek
e8a4296fd6 FullscreenUI: Add missing settings lock acquire 2025-01-18 22:59:10 +10:00
Stenzek
e94973cd28 FullscreenUI: Fix disc swap running on GPU thread 2025-01-18 13:48:05 +10:00
Stenzek
d054d76a76 FileSystem: Add Error to CopyFilePath() 2025-01-18 13:48:05 +10:00
Stenzek
feeb8d9e56 CI: Fix Flatpak manifest URL 2025-01-17 20:22:03 +10:00
Stenzek
fbb63a81a8 FullscreenUI: Change default background and add Strobe 2025-01-17 16:05:24 +10:00
Stenzek
7deaaa8b26 FullscreenUI: Use ImGui dialogs for boot failure 2025-01-17 14:30:22 +10:00
Stenzek
e554456a00 System: Fix blank display on pause-on-start 2025-01-17 14:20:37 +10:00
Stenzek
3be4f1983d GPU: Fix playback of VRAM updates during draws 2025-01-17 13:22:40 +10:00
Stenzek
bf7ca1951e Qt: Fix game list search box oversizing 2025-01-17 12:56:06 +10:00
Anderson Cardoso
2957f55450 Atualização Português do Brasil (#3356)
Atualizado para a última versão
2025-01-17 13:56:32 +10:00
Stenzek
092b2803c5 GPU/HW: Flipping the mask bit test should flush 2025-01-16 23:50:40 +10:00
Stenzek
cd8a160d8d GPU/HW: Clear alpha channel in opaque replacements
This is the value for bit15 in the framebuffer. Silent Hill
needs it to be zero, I'm not aware of anything that needs
specific values yet. If it did, we'd need a different dumping
technique.
2025-01-16 23:25:24 +10:00
Stenzek
a0c075e079 CI/Flatpak: Bump to SDL2 2.30.11
Apparently I forgot to do this.
2025-01-16 22:13:04 +10:00
Stenzek
add76c267a Achievements: Fix request spam downloading own badge icon 2025-01-16 22:13:02 +10:00
Stenzek
c4a7456689 GPU/SW: Use no_unique_address for potentially-unused varyings 2025-01-16 22:13:02 +10:00
Stenzek
804b8ff777 CDROM: Remove redundant min() 2025-01-16 21:45:34 +10:00
Stenzek
10de915ae0 System: Remove 'sync_to_host_with_vsync'
Disabling the throttler with threaded rendering just leads to the CPU
thread pushing multiple frames, and getting backpressured from the GPU
thread. In other words, input lag.
2025-01-16 21:45:30 +10:00
Stenzek
074a8a2653 GPUThread: Fix input OSD with threaded rendering off 2025-01-16 21:38:45 +10:00
Stenzek
f6f709bcc5 System: Fix vsync preventing fast forward/turbo 2025-01-16 21:14:21 +10:00
Stenzek
0507054675 Common: Add vector rsize() 2025-01-16 21:01:30 +10:00
Stenzek
93771981a6 FullscreenUI: Add sort alphabetically option to cheat page 2025-01-16 13:47:09 +10:00
Stenzek
79245b6cd6 FullscreenUI: Make footer text background semitransparent 2025-01-16 01:14:22 +10:00
Stenzek
57f3fee28c Common: Further optimize alltrue()/allfalse() on ARM 2025-01-16 00:43:33 +10:00
Stenzek
0189e1ef81 Common: Fix vector allfalse() on ARM32 2025-01-15 23:53:48 +10:00
Stenzek
45b500bc2c GPU/HW: Fix draw call count spiking in some scenarios 2025-01-15 22:50:29 +10:00
Stenzek
3687697d0e CPU/CodeCache: Only reset used portion of buffer
Saves writing 48MB every reset.
2025-01-15 21:02:56 +10:00
Stenzek
1952869cdc Cheats: Author field should be exported 2025-01-15 21:02:56 +10:00
Daniel Nylander
68d9971171 Updated Swedish translation (#3355) 2025-01-15 21:02:40 +10:00
Stenzek
050bda8cd2 FullscreenUI: Fix scroll reset on resume state popup 2025-01-14 21:07:00 +10:00
Stenzek
135d99ac17 FullscreenUI: Fix incorrect help text 2025-01-14 21:07:00 +10:00
Stenzek
7973a91438 FullscreenUI: Make menu item backgrounds slightly transparent
Blends with background.
2025-01-14 21:07:00 +10:00
Stenzek
2e95667ec2 Qt: Fix returning to desktop mode from Big Picture 2025-01-14 20:51:13 +10:00
Stenzek
bbb1befa43 RegTest: Build fix 2025-01-14 20:51:13 +10:00
Stenzek
2fd89403f8 FullscreenUI: Name landing icon files after action 2025-01-14 19:05:18 +10:00
Stenzek
3130e16438 FullscreenUI: Add user-selectable backgrounds 2025-01-14 18:59:42 +10:00
Stenzek
ccb2b61444 FullscreenUI: Fix incorrect back button 2025-01-14 16:33:24 +10:00
Stenzek
1aa1b5a7ec Qt: Make main toolbar editable 2025-01-14 16:33:24 +10:00
Anderson Cardoso
6a6d36267d Atualização Português do Brasil (#3354)
Atualizado para a última versão.
2025-01-14 13:53:37 +10:00
Stenzek
880c76da24 Qt: Fix columns being hidden after editing cheats 2025-01-14 13:53:09 +10:00
Stenzek
3a13806f73 Hotkeys: Fix Toggle OSD hotkey 2025-01-14 13:49:49 +10:00
Stenzek
88e18a8659 Image: Fix crash on loading corrupted JPEG file 2025-01-14 13:29:14 +10:00
Stenzek
da1590ed5f Qt: Fix cheats sort button tooltip 2025-01-13 23:49:59 +10:00
Stenzek
6db1dbbe02 GameList: Don't return nonexistant path on icon extract fail 2025-01-13 23:49:09 +10:00
Stenzek
33c0674a9f Qt: Remove unused struct 2025-01-13 23:18:52 +10:00
Stenzek
5aa23fa6dc CI: Only pin to major version of actions 2025-01-13 22:50:39 +10:00
Stenzek
991405ce06 Qt: Add search and sorting to cheat list 2025-01-13 22:45:59 +10:00
Stenzek
0dc257abe4 System: Set time constraints for GPU thread on MacOS
Fixes erratic frame times.
2025-01-13 19:51:35 +10:00
Stenzek
d3854d095e AnalogController: Use variant vibration icon for large motor 2025-01-13 19:49:56 +10:00
Stenzek
dc58d85b51 Data: PromptFont additions by KamFretoZ 2025-01-13 19:47:43 +10:00
Stenzek
f6c7681ef0 ImGuiOverlays: Double buffer input OSD and add vibration 2025-01-13 16:49:31 +10:00
Stenzek
dd7fd32501 Controller: Add GetVibrationMotorState() 2025-01-13 16:49:14 +10:00
Stenzek
aaf2a4b614 InputManager: Adjust scope of constants 2025-01-13 16:35:40 +10:00
Stenzek
3476140ba2 GPUThread: Add BeginASyncBufferCall() 2025-01-13 16:08:20 +10:00
Stenzek
462a4a3b50 Controller: Refactor so that GetControllerInfo() can't return null 2025-01-13 16:07:43 +10:00
Stenzek
062776c1c7 ImGuiManager: Map left stick to dpad 2025-01-13 14:28:39 +10:00
Stenzek
c45e59fe22 SDLInputSource: Arrays to std::array and forward generic axis 2025-01-13 14:28:28 +10:00
Stenzek
21aef088ed XInputSource: Arrays to std::array and forward generic axis 2025-01-13 14:25:51 +10:00
Stenzek
9d3c56fe6c ImGuiManager: Fix data races in input forwarding 2025-01-13 13:52:07 +10:00
Stenzek
17e8930e94 ImGuiManager: Pack state based on thread access 2025-01-13 13:33:15 +10:00
Stenzek
3621705933 Achievements: Ensure loading old states behave the same as new 2025-01-13 13:13:15 +10:00
Stenzek
8f39dbb464 Achievements: Fix race condition invalidating images 2025-01-13 13:03:41 +10:00
Stenzek
2f854de9d0 Qt: Invalidate FSUI cover cache when cover changed 2025-01-13 12:54:18 +10:00
Stenzek
738c96ffb3 FullscreenUI: Fix slot disappearing after delete in save state menu 2025-01-13 12:44:11 +10:00
Stenzek
ea82dacb0e FullscreenUI: Fix a couple of GPU thread race conditions
State saving/loading, memory card state read on shutdown.
2025-01-13 12:44:06 +10:00
Stenzek
a422e06628 Qt: Fix incorrect InitialSortOrderRole use 2025-01-12 21:44:05 +10:00
Stenzek
d3ee12d358 Achievements: Login error notification should be translatable 2025-01-12 19:16:22 +10:00
Stenzek
19ee37cd10 FullscreenUI: Render notifications on top of OSD 2025-01-12 19:14:59 +10:00
Stenzek
035762af94 System: Fix subimage change OSD message 2025-01-12 19:03:53 +10:00
Stenzek
be7cff5964 CDROM: Fix loading of subimage SBI files 2025-01-12 19:03:48 +10:00
Stenzek
e4dea69713 System: Drop state load OSD duration to quick 2025-01-12 17:50:33 +10:00
Stenzek
e43d7046ba Achievements: Attempt relogin on system boot
And display an error notification if login fails, instead of
invalidating the token.
2025-01-12 17:50:33 +10:00
Stenzek
0f76543685 Achivements: Set rc_client log level from host log level 2025-01-12 16:54:58 +10:00
Stenzek
ce0689687c Qt: Fix editing first controller preset 2025-01-12 02:09:55 +10:00
Stenzek
c43533f8d8 FullscreenUI: Extend achievement overlays to screen margins
Fixes overlays getting caught in rounded corners on Android.
2025-01-12 01:02:58 +10:00
Stenzek
ab790ed54b Common: Fix ARM32 build (again) 2025-01-12 00:25:48 +10:00
Stenzek
ee1da343ab GPU/HW: Use default initialization for BatchConfig
Reduce the risk of below...
2025-01-12 00:03:45 +10:00
Stenzek
9779cee934 GPU/HW: Ensure texture window bits are initialized
Fixes broken rendering after loading state or switching renderer in some
games, e.g. GTA2.
2025-01-12 00:03:18 +10:00
Stenzek
9c35b0e76d FullscreenUI: Get rid of Timer global 2025-01-11 23:32:21 +10:00
Stenzek
36590f3c71 InputManager: Fix crash on controller connect on Windows 2025-01-11 23:29:55 +10:00
Stenzek
6785285f31 Qt: Fix game list toolbar/view menu desync 2025-01-11 23:29:40 +10:00
Stenzek
54780d4fbf Qt: Fix fullscreen state stuck after exit 2025-01-11 21:37:39 +10:00
Stenzek
348e33562e Qt: Fix BP start/stop menu item after first activation 2025-01-11 21:34:20 +10:00
Stenzek
234e1f721f FullscreenUI: Improve controller settings page
- Add 'Clear Bindings' menu item.
- Show icons in controller types.
- Add confirmation to Reset Settings.
2025-01-11 21:29:04 +10:00
Stenzek
d6ce322eba Controller: Use additional icons 2025-01-11 20:51:16 +10:00
Stenzek
9971b9e059 Data: Update PromptFont with KamFretoZ's changes 2025-01-11 20:41:26 +10:00
Stenzek
e6c0725656 InputManager: Hold lock while manipulating devices/sources
Since we're enumerating on the GPU thread now, need to protect it.
2025-01-11 20:28:00 +10:00
Stenzek
d3bee3ce67 Qt: Rename 'Input Profile' to 'Controller Preset'
Hopefully more noob-proof?
2025-01-11 20:25:12 +10:00
Stenzek
e4c11aa905 Qt: Separate controller settings to global and profiles 2025-01-11 20:25:11 +10:00
Stenzek
2d63b34d48 Qt: Add icons/decorations to input devices 2025-01-11 20:25:11 +10:00
Stenzek
2298227054 FullscreenUI: Add binding of vibration motors 2025-01-11 20:25:11 +10:00
Stenzek
6f9caa6b12 InputManager: Add proper binds for vibration motors
Instead of the janky "vibration capabilities" flag.

Fixes the "Clear Mappings" button not applying to vibration motors.
2025-01-11 20:25:11 +10:00
Stenzek
13b85728a0 Qt: Refactor input device/motor tracking
Remove multiple sources of truth.
2025-01-11 20:25:11 +10:00
Stenzek
844287b722 FullscreenUI: Fix scrollbar on choice dialog at some screen sizes
e.g. game list right click
2025-01-11 20:25:11 +10:00
Stenzek
4b0bb9f70d FullscreenUI: Increase input dialog padding
Way too small.
2025-01-11 20:13:53 +10:00
Stenzek
4af5e96ff6 Controller: Remove analog-mode-start OSD message
It's arguably not very useful, and the sticks are mapped to the
dpad in digital mode anyway.
2025-01-11 15:15:01 +10:00
Stenzek
440aaf2644 FullscreenUI: Modernize achievement popup a bit 2025-01-11 15:07:17 +10:00
Stenzek
05b0b03fd6 Cheats: Order special characters before alpha characters 2025-01-11 12:51:33 +10:00
Stenzek
93a7e7cef5 Cheats: Add bounds check to 5107/5147 2025-01-11 12:40:46 +10:00
Anderson Cardoso
c98dbb9d9e Atualização Português do Brasil (#3353)
Atualizado para a última versão.
2025-01-11 12:37:16 +10:00
PugsyMAME
a26cac18e9 Cheats: Added register cheat types 5107 & 5147 (#3352)
This is new cheat type uses the general purpose cheat registers in a relative easy method to allow arrays of arrays cheats to be quickly created and will also cut down massively on cheats. For instance this method allows the following 15 cheats for Vandal Hearts II which would otherwise need 18886 separate cheats to replicate:

#Technique Slot Modifier\[MASTER] Select Slot Number for following cheats to act on (1 - 1349)
518500F1 001CF3C3
514500F2 0000000F
514500F3 0000????
514500F4 0000D0D0
OptionRange = 1:1349
#Technique Slot Modifier\Select Weapon
510700F1 000000??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\Technique 1 Learned
510700F1 00020001
#Technique Slot Modifier\Select Technique 1
510700F1 000300??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\Technique 2 Learned
510700F1 00040001
#Technique Slot Modifier\Select Technique 2
510700F1 000500??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\Technique 3 Learned
510700F1 00060001
#Technique Slot Modifier\Select Technique 3
510700F1 000700??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\Technique 4 Learned
510700F1 00080001
#Technique Slot Modifier\Select Technique 4
510700F1 000900??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\Technique 5 Learned
510700F1 000A0001
#Technique Slot Modifier\Select Technique 5
510700F1 000B00??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\Technique 6 Learned
510700F1 000C0001
#Technique Slot Modifier\Select Technique 6
510700F1 000D00??
OptionRange = 0x00:0xFF
#Technique Slot Modifier\100% (Max) Technique Learned
510700F1 000E0064
2025-01-11 12:37:03 +10:00
Stenzek
ea4e756512 Data: Update SDL Game Controller DB 2025-01-10 20:44:04 +10:00
Stenzek
ee33044f3d InputManager: Fix SDL sub-options not copying to profile 2025-01-10 20:42:17 +10:00
Stenzek
7ac4a85765 InputManager: Fix per-bind sensitivity/deadzone not copying to profile 2025-01-10 20:14:21 +10:00
Stenzek
ccfc60ec94 GPU/HW: Remove extra barrier on VRAM download
Seems to work around download texture corruption on AMD/Vulkan/Windows.
2025-01-10 20:06:56 +10:00
Stenzek
18c90718c6 GPU/SW: Skip pixel load if none preserved
~12% performance improvement on Cortex-A35.
2025-01-10 18:46:05 +10:00
Stenzek
1320d9b456 Common: Use __builtin_shufflevector() for NEON blend() 2025-01-10 17:12:45 +10:00
Stenzek
29934d62c4 System: Improve rewind behaviour
- Fix crash when rewinding before first state is saved.
- Always save a rewind state immediately after normal save state load.
- Don't toss the last rewind state when rewinding, that way there is
  always at least one state to rewind to.
2025-01-09 23:46:06 +10:00
Stenzek
d25cffebd5 GPU/HW: Disable depth testing with semitransparency
But provide an option to enable it.
2025-01-09 21:45:14 +10:00
Stenzek
d9c9b3038d GPU/HW: Fix ROV depth being written with semitransparency 2025-01-09 21:21:12 +10:00
Stenzek
7d2898b94c GPU/HW: Exclude 2D polygons from depth buffer
Fixes UI getting obscured in Kingsley's Adventure.
2025-01-09 21:21:12 +10:00
Stenzek
1c9b9ca37a GPUThread: Restore context after backend creation
Might help with random VRAM loss? I can't seem to reproduce it now..
2025-01-09 21:21:12 +10:00
Stenzek
40589dcd93 Settings: Add advanced option to set delay for max CD speedup
Affects both seeks and reads.
2025-01-09 21:21:12 +10:00
Stenzek
4449ae7904 Settings: Rearrange fields to avoid padding 2025-01-09 21:21:12 +10:00
Stenzek
9b339d4bff PostProcessing: Remove StageCount key for game settings
Potentially removes the ini file if it's otherwise empty.
2025-01-09 21:21:12 +10:00
Stenzek
2b4e60a5bf FullscreenUI: Fix loading screen font 2025-01-09 21:21:12 +10:00
Stenzek
bed3dd6950 FullscreenUI: Use span for DrawIntListSetting() 2025-01-09 17:54:12 +10:00
Stenzek
b76ebd2a7b FullscreenUI: Fix scrollbar rounding in choice dialogs 2025-01-09 17:53:52 +10:00
Stenzek
561397a53c CDROM: Add 'maximum' read speedup option
"Instant" seek is now renamed to Maximum as well, for consistency.
2025-01-09 15:23:47 +10:00
Anderson Cardoso
0ad0859e9d Atualização Português do Brasil (#3351)
Atualizado para a última versão
2025-01-09 15:23:25 +10:00
Stenzek
fc8fbd8f08 Qt: Disable shared memcard settings outside of shared mode 2025-01-08 16:36:05 +10:00
Stenzek
08a3c31bff CMake: Fix scmversion PRE_BUILD warning 2025-01-08 15:34:21 +10:00
Stenzek
87743c776d FullscreenUI: Fix crash reloading postfx shaders 2025-01-08 15:29:56 +10:00
Stenzek
45afc8f7b1 OpenGLDevice: Add map-based stream buffer paths
MapAndSync ends up around 25% faster on ancient Mali drivers without
ARB_buffer_storage support.
2025-01-08 14:14:06 +10:00
Stenzek
1daa60c64d GPU: Use tristrips for presentation as well 2025-01-08 00:14:15 +10:00
Stenzek
670dc461c1 GPU/HW: Slight re-shuffling of field offsets
Free up some bits in the middle.
2025-01-07 23:20:26 +10:00
Stenzek
0030bc2699 GPUDevice: Ensure 16 byte minimum UBO alignment 2025-01-07 23:20:25 +10:00
Stenzek
4c801c3ff3 GPUDevice: Move size-matches check into ResizeTexture() 2025-01-07 23:20:25 +10:00
Stenzek
b9186139d0 GPU/HW: Use sized tristrips instead of fullscreen quads 2025-01-07 23:20:25 +10:00
Stenzek
9bc5ffe091 Common: Add Vector4i xyxy(Vector2i) 2025-01-07 23:20:25 +10:00
656 changed files with 151427 additions and 116207 deletions

View File

@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-22.04
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.1
- uses: actions/checkout@v4
with:
fetch-depth: 0

View File

@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-22.04
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
@@ -19,7 +19,7 @@ jobs:
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: ~/deps
key: deps ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-ffmpeg-linux.sh') }}
@@ -32,13 +32,10 @@ jobs:
if: steps.cache-deps.outputs.cache-hit != 'true'
run: scripts/deps/build-ffmpeg-linux.sh "$HOME/deps"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#pragma once' > src/scmversion/tag.h
echo '#define SCM_RELEASE_ASSET "DuckStation-x64.AppImage"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
@@ -64,13 +61,13 @@ jobs:
run: |
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-18 -DCMAKE_CXX_COMPILER=clang++-18 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake --build . --parallel
cd ..
scripts/packaging/appimage/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps DuckStation-x64
- name: Upload Qt AppImage
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "linux-x64-appimage"
path: "DuckStation-x64.AppImage"
@@ -81,7 +78,7 @@ jobs:
runs-on: ubuntu-22.04
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
@@ -90,7 +87,7 @@ jobs:
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: ~/deps
key: deps ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-ffmpeg-linux.sh') }}
@@ -103,13 +100,10 @@ jobs:
if: steps.cache-deps.outputs.cache-hit != 'true'
run: scripts/deps/build-ffmpeg-linux.sh "$HOME/deps"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#pragma once' > src/scmversion/tag.h
echo '#define SCM_RELEASE_ASSET "DuckStation-x64-SSE2.AppImage"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
@@ -135,13 +129,13 @@ jobs:
run: |
mkdir build
cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DDISABLE_SSE4=ON -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-18 -DCMAKE_CXX_COMPILER=clang++-18 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DDISABLE_SSE4=ON -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" ..
cmake --build . --parallel
cd ..
scripts/packaging/appimage/make-appimage.sh $(realpath .) $(realpath ./build) $HOME/deps DuckStation-x64-SSE2
- name: Upload Qt AppImage
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "linux-x64-sse2-appimage"
path: "DuckStation-x64-SSE2.AppImage"

View File

@@ -0,0 +1,100 @@
name: 🐧 Linux Cross-Compiled AppImage
on:
workflow_call:
workflow_dispatch:
jobs:
build:
name: "Build"
strategy:
fail-fast: true
matrix:
arch: ["arm64", "armhf"]
runs-on: ubuntu-22.04
container:
image: ghcr.io/duckstation/cross-build-${{ matrix.arch }}:latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4
with:
path: ~/deps
key: deps-cross ${{ matrix.arch }} ${{ hashFiles('scripts/deps/build-dependencies-linux.sh', 'scripts/deps/build-dependencies-linux-cross.sh') }}
- name: Build Dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: |
scripts/deps/build-dependencies-linux.sh -skip-cleanup "$HOME/deps/host"
scripts/deps/build-dependencies-linux-cross.sh -skip-download "$HOME/deps/host" "${{ matrix.arch }}" "/${{ matrix.arch }}-chroot" "$HOME/deps/cross"
# Work around container ownership issue
- name: Set Safe Directory
shell: bash
run: git config --global --add safe.directory "*"
- name: Create Binary Aliases
run: |
ln -s llvm-strip-19 /usr/bin/llvm-strip
- name: Set Up Toolchain File
run: |
cp "$HOME/deps/cross/toolchain.cmake" "$HOME/toolchain.cmake"
echo 'set(CMAKE_C_COMPILER clang-19)' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_C_COMPILER_AR llvm-ar-19)' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_C_COMPILER_RANLIB llvm-ranlib-19)' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_CXX_COMPILER clang++-19)' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_CXX_COMPILER_AR llvm-ar-19)' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_CXX_COMPILER_RANLIB llvm-ranlib-19)' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld")' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld")' >> "$HOME/toolchain.cmake"
echo 'set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld")' >> "$HOME/toolchain.cmake"
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#pragma once' > src/scmversion/tag.h
echo '#define SCM_RELEASE_ASSET "DuckStation-${{ matrix.arch }}.AppImage"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
if: github.ref == 'refs/heads/master'
run: |
echo '#define SCM_RELEASE_TAG "preview"' >> src/scmversion/tag.h
- name: Tag as Rolling Release
if: github.ref == 'refs/heads/dev'
run: |
echo '#define SCM_RELEASE_TAG "latest"' >> src/scmversion/tag.h
- name: Download Patch Archives
shell: bash
run: |
cd data/resources
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/cheats.zip"
curl -LO "https://github.com/duckstation/chtdb/releases/download/latest/patches.zip"
- name: Generate CMake
shell: bash
run: |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_TOOLCHAIN_FILE="$HOME/toolchain.cmake" -DLCONVERT_EXE="$HOME/deps/host/bin/lconvert" -DHOST_MIN_PAGE_SIZE=4096 -DHOST_MAX_PAGE_SIZE=16384 -DHOST_CACHE_LINE_SIZE=64 -DBUILD_QT_FRONTEND=ON -DBUILD_MINI_FRONTEND=ON
- name: Compile Build
shell: bash
run: |
cmake --build build --parallel
scripts/packaging/appimage/make-cross-appimage.sh duckstation-qt ${{ matrix.arch }} "$(realpath build)" "$HOME/deps/cross" "/${{ matrix.arch }}-chroot"
scripts/packaging/appimage/make-cross-appimage.sh -inject-libc duckstation-mini ${{ matrix.arch }} "$(realpath build)" "$HOME/deps/cross" "/${{ matrix.arch }}-chroot"
- name: Upload AppImages
uses: actions/upload-artifact@v4
with:
name: "linux-${{ matrix.arch }}-appimage"
path: "DuckStation-*.AppImage"

View File

@@ -15,14 +15,19 @@ on:
jobs:
linux-flatpak-build:
name: "x64"
runs-on: ubuntu-22.04
name: "Build"
strategy:
fail-fast: true
matrix:
setup: [{arch: "x86_64", runner: "ubuntu-22.04"}, {arch: "aarch64", runner: "ubuntu-24.04-arm"}]
runs-on: ${{ matrix.setup.runner }}
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.8
image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.9
options: --privileged
timeout-minutes: 120
timeout-minutes: 60
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
set-safe-directory: ${{ env.GITHUB_WORKSPACE }}
@@ -32,13 +37,10 @@ jobs:
shell: bash
run: git config --global --add safe.directory "*"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tags
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#pragma once' > src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
- name: Tag as Preview Release
@@ -70,19 +72,19 @@ jobs:
run: flatpak-builder-lint manifest scripts/packaging/flatpak/org.duckstation.DuckStation.yaml
- name: Build Flatpak
uses: flathub-infra/flatpak-github-actions/flatpak-builder@23796715b3dfa4c86ddf50cf29c3cc8b3c82dca8
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: duckstation-x64.flatpak
bundle: duckstation-${{ matrix.setup.arch }}.flatpak
upload-artifact: false
manifest-path: scripts/packaging/flatpak/org.duckstation.DuckStation.yaml
arch: x86_64
arch: ${{ matrix.setup.arch }}
build-bundle: true
verbose: true
mirror-screenshots-url: https://dl.flathub.org/media
branch: stable
cache: true
restore-cache: true
cache-key: flatpak-x64-${{ hashFiles('scripts/packaging/flatpak/**/*.yaml') }}
cache-key: flatpak-${{ hashFiles('scripts/packaging/flatpak/org.duckstation.DuckStation.yaml', 'scripts/deps/build-dependencies-linux.sh') }}
- name: Validate Build
run: |
@@ -90,7 +92,7 @@ jobs:
- name: Push To Flathub Beta
if: inputs.flathub_publish && inputs.flathub_branch == 'beta'
uses: flathub-infra/flatpak-github-actions/flat-manager@b6c92176b7f578aedd80cac74cd8f0336f618e89
uses: flatpak/flatpak-github-actions/flat-manager@v6
with:
flat-manager-url: https://hub.flathub.org/
repository: stable
@@ -99,7 +101,7 @@ jobs:
- name: Push To Flathub Stable
if: inputs.flathub_publish && inputs.flathub_branch == 'stable'
uses: flathub-infra/flatpak-github-actions/flat-manager@b6c92176b7f578aedd80cac74cd8f0336f618e89
uses: flatpak/flatpak-github-actions/flat-manager@v6
with:
flat-manager-url: https://hub.flathub.org/
repository: stable
@@ -107,7 +109,7 @@ jobs:
build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Upload Flatpak
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "linux-flatpak"
path: "duckstation-x64.flatpak"
name: "linux-flatpak-${{ matrix.setup.arch }}"
path: "duckstation-${{ matrix.setup.arch }}.flatpak"

View File

@@ -10,7 +10,7 @@ jobs:
runs-on: macos-14
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
@@ -24,7 +24,7 @@ jobs:
- name: Cache Dependencies
id: cache-deps-mac
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: ~/deps
key: deps-mac ${{ hashFiles('scripts/deps/build-dependencies-mac.sh') }}
@@ -33,13 +33,10 @@ jobs:
if: steps.cache-deps-mac.outputs.cache-hit != 'true'
run: scripts/deps/build-dependencies-mac.sh "$HOME/deps"
- name: Initialize Build Tag
run: |
echo '#pragma once' > src/scmversion/tag.h
- name: Set Build Tags
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
run: |
echo '#pragma once' > src/scmversion/tag.h
echo '#define SCM_RELEASE_ASSET "duckstation-mac-release.zip"' >> src/scmversion/tag.h
echo '#define SCM_RELEASE_TAGS {"latest", "preview"}' >> src/scmversion/tag.h
@@ -70,10 +67,10 @@ jobs:
cmake --build . --parallel
mv bin/DuckStation.app .
codesign -s - --deep -f -v DuckStation.app
zip -r duckstation-mac-release.zip DuckStation.app/
zip -9 -r duckstation-mac-release.zip DuckStation.app/
- name: Upload MacOS .app
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "macos"
path: "build/duckstation-mac-release.zip"

View File

@@ -25,6 +25,9 @@ jobs:
linux-appimage:
name: 🐧 Linux AppImage
uses: "./.github/workflows/linux-appimage-build.yml"
linux-cross-appimage:
name: 🐧 Linux Cross-Compiled AppImage
uses: "./.github/workflows/linux-cross-appimage-build.yml"
linux-flatpak:
name: 📦 Linux Flatpak
uses: "./.github/workflows/linux-flatpak-build.yml"
@@ -34,12 +37,12 @@ jobs:
create-release:
name: 📤 Create Release
needs: [windows, linux-appimage, linux-flatpak, macos]
needs: [windows, linux-appimage, linux-cross-appimage, linux-flatpak, macos]
runs-on: ubuntu-22.04
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4.1.7
uses: actions/download-artifact@v4
with:
path: ./artifacts/
@@ -48,7 +51,7 @@ jobs:
- name: Create Preview Release
if: github.ref == 'refs/heads/master'
uses: "marvinpinto/action-automatic-releases@latest"
uses: marvinpinto/action-automatic-releases@d68defdd11f9dcc7f52f35c1b7c236ee7513bcc1
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "preview"
@@ -63,12 +66,17 @@ jobs:
./artifacts/windows-arm64/duckstation-windows-arm64-release-symbols.zip
./artifacts/linux-x64-appimage/DuckStation-x64.AppImage
./artifacts/linux-x64-sse2-appimage/DuckStation-x64-SSE2.AppImage
./artifacts/linux-flatpak/duckstation-x64.flatpak
./artifacts/linux-arm64-appimage/DuckStation-arm64.AppImage
./artifacts/linux-arm64-appimage/DuckStation-Mini-arm64.AppImage
./artifacts/linux-armhf-appimage/DuckStation-armhf.AppImage
./artifacts/linux-armhf-appimage/DuckStation-Mini-armhf.AppImage
./artifacts/linux-flatpak-x86_64/duckstation-x86_64.flatpak
./artifacts/linux-flatpak-aarch64/duckstation-aarch64.flatpak
./artifacts/macos/duckstation-mac-release.zip
- name: Create Rolling Release
if: github.ref == 'refs/heads/dev'
uses: "marvinpinto/action-automatic-releases@latest"
uses: marvinpinto/action-automatic-releases@d68defdd11f9dcc7f52f35c1b7c236ee7513bcc1
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "latest"
@@ -83,6 +91,11 @@ jobs:
./artifacts/windows-arm64/duckstation-windows-arm64-release-symbols.zip
./artifacts/linux-x64-appimage/DuckStation-x64.AppImage
./artifacts/linux-x64-sse2-appimage/DuckStation-x64-SSE2.AppImage
./artifacts/linux-flatpak/duckstation-x64.flatpak
./artifacts/linux-arm64-appimage/DuckStation-arm64.AppImage
./artifacts/linux-arm64-appimage/DuckStation-Mini-arm64.AppImage
./artifacts/linux-armhf-appimage/DuckStation-armhf.AppImage
./artifacts/linux-armhf-appimage/DuckStation-Mini-armhf.AppImage
./artifacts/linux-flatpak-x86_64/duckstation-x86_64.flatpak
./artifacts/linux-flatpak-aarch64/duckstation-aarch64.flatpak
./artifacts/macos/duckstation-mac-release.zip

30
.github/workflows/translation-lint.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Translation Lint
on:
pull_request:
paths:
- 'src/duckstation-qt/translations/*.ts'
push:
branches:
- master
- dev
paths:
- 'src/duckstation-qt/translations/*.ts'
workflow_dispatch:
jobs:
translation-lint:
runs-on: ubuntu-22.04
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
# Meh, can't be bothered to work out exactly which one was modified, just check them all.
- name: Check Translation Placeholders
shell: bash
run: |
for i in src/duckstation-qt/translations/*.ts; do
python scripts/verify_translation_placeholders.py "$i";
done

View File

@@ -8,13 +8,13 @@ jobs:
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: |
dep/msvc/deps-arm64
@@ -30,7 +30,7 @@ jobs:
- name: Upload Cache Files
if: steps.cache-deps.outputs.cache-hit == 'true'
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "windows"
path: "deps-*.zip"

View File

@@ -10,13 +10,13 @@ jobs:
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: |
dep/msvc/deps-arm64
@@ -35,15 +35,11 @@ jobs:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-arm64.bat
- name: Initialize Build Tag
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
echo #define SCM_RELEASE_ASSET "duckstation-windows-x64-release.zip" >> src/scmversion/tag.h
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h
@@ -83,7 +79,7 @@ jobs:
- name: Create x64 Symbols Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-release-symbols.zip ./bin/x64/*.pdb
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-x64-release-symbols.zip ./bin/x64/*.pdb
- name: Remove Extra Bloat Before Archiving
shell: cmd
@@ -94,10 +90,10 @@ jobs:
- name: Create x64 Release Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-release.zip ./bin/x64/*
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-x64-release.zip ./bin/x64/*
- name: Upload x64 Release Artifact
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "windows-x64"
path: "duckstation-windows-x64-release*.zip"
@@ -108,13 +104,13 @@ jobs:
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: |
dep/msvc/deps-arm64
@@ -133,15 +129,11 @@ jobs:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-arm64.bat
- name: Initialize Build Tag
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
echo #define SCM_RELEASE_ASSET "duckstation-windows-x64-sse2-release.zip" >> src/scmversion/tag.h
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h
@@ -181,7 +173,7 @@ jobs:
- name: Create x64 Symbols Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-sse2-release-symbols.zip ./bin/x64/*.pdb
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-x64-sse2-release-symbols.zip ./bin/x64/*.pdb
- name: Remove Extra Bloat Before Archiving
shell: cmd
@@ -192,10 +184,10 @@ jobs:
- name: Create x64 Release Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-x64-sse2-release.zip ./bin/x64/*
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-x64-sse2-release.zip ./bin/x64/*
- name: Upload x64 Release Artifact
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "windows-x64-sse2"
path: "duckstation-windows-x64-sse2-release*.zip"
@@ -206,14 +198,14 @@ jobs:
runs-on: windows-2022
timeout-minutes: 120
steps:
- uses: actions/checkout@v4.1.6
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- name: Cache Dependencies
id: cache-deps
uses: actions/cache@v4.0.2
uses: actions/cache@v4
with:
path: |
dep/msvc/deps-arm64
@@ -232,15 +224,11 @@ jobs:
DEBUG: 0
run: scripts/deps/build-dependencies-windows-arm64.bat
- name: Initialize Build Tag
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
- name: Set Build Tag Asset
if: github.ref == 'refs/heads/master' || github.ref == 'refs/heads/dev'
shell: cmd
run: |
echo #pragma once > src/scmversion/tag.h
echo #define SCM_RELEASE_ASSET "duckstation-windows-arm64-release.zip" >> src/scmversion/tag.h
echo #define SCM_RELEASE_TAGS {"latest", "preview"} >> src/scmversion/tag.h
@@ -280,7 +268,7 @@ jobs:
- name: Create ARM64 symbols archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-arm64-release-symbols.zip ./bin/ARM64/*.pdb
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-arm64-release-symbols.zip ./bin/ARM64/*.pdb
- name: Remove Extra Bloat Before Archiving
shell: cmd
@@ -291,10 +279,10 @@ jobs:
- name: Create ARM64 Release Archive
shell: cmd
run: |
"C:\Program Files\7-Zip\7z.exe" a -r duckstation-windows-arm64-release.zip ./bin/ARM64/*
"C:\Program Files\7-Zip\7z.exe" a -mx9 -r duckstation-windows-arm64-release.zip ./bin/ARM64/*
- name: Upload ARM64 Release Artifact
uses: actions/upload-artifact@v4.3.3
uses: actions/upload-artifact@v4
with:
name: "windows-arm64"
path: "duckstation-windows-arm64-release*.zip"

View File

@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16)
cmake_minimum_required(VERSION 3.19)
project(duckstation C CXX)
# Policy settings.
@@ -12,14 +12,9 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
endif()
if(NOT CMAKE_BUILD_TYPE MATCHES "Debug|Devel|MinSizeRel|RelWithDebInfo|Release")
message(STATUS "CMAKE_BUILD_TYPE not set, defaulting to Release.")
set(CMAKE_BUILD_TYPE "Release")
message(FATAL_ERROR "CMAKE_BUILD_TYPE not set. Please set it first.")
endif()
message(STATUS "CMake Version: ${CMAKE_VERSION}")
message(STATUS "CMake System Name: ${CMAKE_SYSTEM_NAME}")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
# Pull in modules.
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules/")
include(DuckStationUtils)
@@ -34,6 +29,7 @@ detect_cache_line_size()
# Build options. Depends on system attributes.
include(DuckStationBuildOptions)
include(DuckStationDependencies)
include(DuckStationCompilerRequirement)
# Enable PIC on Linux, otherwise the builds do not support ASLR.
if(LINUX OR BSD)
@@ -67,6 +63,10 @@ if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /OPT:ICF")
set(CMAKE_EXE_LINKER_FLAGS_DEVEL "${CMAKE_EXE_LINKER_FLAGS_DEVEL} /OPT:REF /OPT:ICF")
else()
# Force debug symbols for Linux builds.
add_debug_symbol_flag(CMAKE_C_FLAGS_RELEASE)
add_debug_symbol_flag(CMAKE_CXX_FLAGS_RELEASE)
endif()
# Warning disables.
@@ -95,16 +95,10 @@ endif()
# Write binaries to a seperate directory.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin")
# Installation directories. If INSTALL_SELF_CONTAINED is set, everything goes
# into one directory, otherwise CMAKE_INSTALL_PREFIX/bin is used (for Flatpak).
# Installation directories. Everything goes into one directory.
if(ALLOW_INSTALL)
if(INSTALL_SELF_CONTAINED)
set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}")
set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}")
else()
# Let GNUInstallDirs set the destinations.
include(GNUInstallDirs)
endif()
set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}")
set(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}")
endif()
# Enable large file support on Linux 32-bit platforms.
@@ -120,10 +114,6 @@ endif()
# Prevent fmt from being built with exceptions, or being thrown at call sites.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFMT_EXCEPTIONS=0")
# Use C++20.
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Recursively include the source tree.
add_subdirectory(dep)
add_subdirectory(src)

View File

@@ -1,8 +1,8 @@
# Renderer options.
option(ENABLE_OPENGL "Build with OpenGL renderer" ON)
option(ENABLE_VULKAN "Build with Vulkan renderer" ON)
option(BUILD_NOGUI_FRONTEND "Build the NoGUI frontend" OFF)
option(BUILD_QT_FRONTEND "Build the Qt frontend" ON)
option(BUILD_MINI_FRONTEND "Build the Mini frontend" OFF)
option(BUILD_REGTEST "Build regression test runner" OFF)
option(BUILD_TESTS "Build unit tests" OFF)
option(DISABLE_SSE4 "Build with SSE4 instructions disabled, reduces performance" OFF)
@@ -11,7 +11,6 @@ if(LINUX OR BSD)
option(ENABLE_X11 "Support X11 window system" ON)
option(ENABLE_WAYLAND "Support Wayland window system" ON)
option(ALLOW_INSTALL "Allow installation to CMAKE_INSTALL_PREFIX" OFF)
option(INSTALL_SELF_CONTAINED "Make self-contained install, i.e. everything in one directory" ON)
endif()
if(APPLE)
option(SKIP_POSTPROCESS_BUNDLE "Disable bundle post-processing, including Qt additions" OFF)

View File

@@ -1,3 +1,5 @@
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
if(ENABLE_OPENGL)
message(STATUS "Building with OpenGL support.")
endif()
@@ -25,15 +27,19 @@ if(BUILD_TESTS)
endif()
if(ALLOW_INSTALL)
message(WARNING "Install target is enabled. This will install all DuckStation files into:
${CMAKE_INSTALL_PREFIX}
It does **not** use the LSB subdirectories of bin, share, etc, so you should disable this option if it is set to /usr or /usr/local.")
message(STATUS "Creating self-contained install at ${CMAKE_INSTALL_PREFIX}")
if(INSTALL_SELF_CONTAINED)
message(STATUS "Creating self-contained install at ${CMAKE_INSTALL_PREFIX}")
else()
message(STATUS "Creating relative install at ${CMAKE_INSTALL_PREFIX}")
message(STATUS " CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR}")
# Stop users being silly.
if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr")
message(FATAL_ERROR "You are trying to install DuckStation into a system directory, this is not supported. Please use a different CMAKE_INSTALL_PREFIX.")
endif()
endif()
# Refuse to build in Arch package environments. My license does not allow for packages, and I'm sick of
# dealing with people complaining about things broken by packagers. This is why we can't have nice things.
if(DEFINED ENV{DEBUGINFOD_URLS})
if($ENV{DEBUGINFOD_URLS} MATCHES ".*archlinux.*")
message(FATAL_ERROR "Unsupported environment.")
endif()
endif()

View File

@@ -0,0 +1,16 @@
# Use C++20.
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# C++20 feature checks. Some Linux environments are incomplete.
check_cpp20_feature("__cpp_structured_bindings" 201606)
check_cpp20_feature("__cpp_constinit" 201907)
check_cpp20_feature("__cpp_designated_initializers" 201707)
check_cpp20_feature("__cpp_using_enum" 201907)
check_cpp20_feature("__cpp_lib_bit_cast" 201806)
check_cpp20_feature("__cpp_lib_bitops" 201907)
check_cpp20_feature("__cpp_lib_int_pow2" 202002)
check_cpp20_feature("__cpp_lib_starts_ends_with" 201711)
check_cpp20_attribute("likely" 201803)
check_cpp20_attribute("unlikely" 201803)
check_cpp20_attribute("no_unique_address" 201803)

View File

@@ -9,18 +9,18 @@ endif()
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
find_package(SDL2 2.30.8 REQUIRED)
find_package(Zstd 1.5.6 REQUIRED)
find_package(SDL3 3.2.18 REQUIRED)
find_package(zstd 1.5.7 REQUIRED)
find_package(WebP REQUIRED) # v1.4.0, spews an error on Linux because no pkg-config.
find_package(ZLIB REQUIRED) # 1.3, but Mac currently doesn't use it.
find_package(PNG 1.6.40 REQUIRED)
find_package(PNG 1.6.44 REQUIRED) # 1.6.48, but Flatpak is out of date.
find_package(JPEG REQUIRED)
find_package(Freetype 2.13.2 REQUIRED) # 2.13.3, but flatpak is still on 2.13.2.
find_package(lunasvg 2.4.1 REQUIRED)
find_package(plutosvg 0.0.6 REQUIRED)
find_package(cpuinfo REQUIRED)
find_package(DiscordRPC 3.4.0 REQUIRED)
find_package(SoundTouch 2.3.3 REQUIRED)
find_package(libzip 1.11.1 REQUIRED)
find_package(libzip 1.11.4 REQUIRED)
if(NOT WIN32)
find_package(CURL REQUIRED)
@@ -40,13 +40,14 @@ if(ENABLE_WAYLAND)
endif()
if(BUILD_QT_FRONTEND)
find_package(Qt6 6.8.0 COMPONENTS Core Gui Widgets LinguistTools REQUIRED)
# 6.9.1, but flatpak stuck on 6.9.0 because they love to ship vulnerable software.
find_package(Qt6 6.9.0 COMPONENTS Core Gui Widgets LinguistTools REQUIRED)
endif()
find_package(Shaderc REQUIRED)
find_package(spirv_cross_c_shared REQUIRED)
if(LINUX AND NOT (ALLOW_INSTALL AND INSTALL_SELF_CONTAINED))
if(LINUX AND NOT ALLOW_INSTALL)
# We need to add the rpath for shaderc to the executable.
get_target_property(SHADERC_LIBRARY Shaderc::shaderc_shared IMPORTED_LOCATION)
get_filename_component(SHADERC_LIBRARY_DIRECTORY ${SHADERC_LIBRARY} DIRECTORY)
@@ -65,7 +66,7 @@ if(NOT WIN32 AND NOT APPLE)
endif()
if(NOT ANDROID AND NOT WIN32)
find_package(FFMPEG COMPONENTS avcodec avformat avutil swresample swscale)
find_package(FFMPEG 7.0.0 COMPONENTS avcodec avformat avutil swresample swscale)
if(NOT FFMPEG_FOUND)
message(WARNING "FFmpeg not found, using bundled headers.")
endif()

View File

@@ -1,3 +1,5 @@
include(CheckSourceCompiles)
function(disable_compiler_warnings_for_target target)
if(MSVC)
target_compile_options(${target} PRIVATE "/W0")
@@ -118,8 +120,11 @@ function(detect_page_size)
# For universal Apple builds, we use preprocessor macros to determine page size.
# Similar for Windows, except it's always 4KB.
if(NOT CPU_ARCH_ARM64 OR NOT LINUX)
unset(HOST_PAGE_SIZE CACHE)
unset(HOST_PAGE_SIZE PARENT_SCOPE)
unset(HOST_MIN_PAGE_SIZE CACHE)
unset(HOST_MIN_PAGE_SIZE PARENT_SCOPE)
unset(HOST_MAX_PAGE_SIZE CACHE)
unset(HOST_MAX_PAGE_SIZE PARENT_SCOPE)
return()
elseif(DEFINED HOST_PAGE_SIZE)
@@ -166,6 +171,7 @@ endfunction()
function(detect_cache_line_size)
# This is only needed for ARM64, or if the user hasn't overridden it explicitly.
if(NOT CPU_ARCH_ARM64 OR HOST_CACHE_LINE_SIZE)
unset(HOST_CACHE_LINE_SIZE CACHE)
unset(HOST_CACHE_LINE_SIZE PARENT_SCOPE)
return()
endif()
@@ -243,5 +249,69 @@ endfunction()
function(install_imported_dep_library name)
get_target_property(SONAME "${name}" IMPORTED_SONAME_RELEASE)
get_target_property(LOCATION "${name}" IMPORTED_LOCATION_RELEASE)
# Only install if it's not a system library.
foreach(path ${CMAKE_PREFIX_PATH})
if (NOT "${LOCATION}" MATCHES "^${path}")
message(STATUS "Not installing imported system library ${name}")
return()
endif()
endforeach()
message(STATUS "Installing imported library ${SONAME}")
install(FILES "${LOCATION}" RENAME "${SONAME}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
endfunction()
function(add_debug_symbol_flag var)
# CMake's regex engine is missing so many features...
set(value "${${var}}")
if (NOT " ${value} " MATCHES " -g[1-3]? ")
message(STATUS "Adding -g1 to ${var}.")
set(${var} "${value} -g1" PARENT_SCOPE)
endif()
endfunction()
function(check_cpp20_feature MACRO MINIMUM_VALUE)
set(CACHE_VAR "CHECK_CPP20_FEATURE_${MACRO}")
if(NOT DEFINED ${CACHE_VAR})
# Create a small source code snippet that fails to compile if the feature is not available.
set(TEMP_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cpp")
file(WRITE "${TEMP_FILE}" "#include <version>
#if !defined(${MACRO}) || ${MACRO} < ${MINIMUM_VALUE}L
#error Missing feature
#endif
")
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
try_compile(HAS_FEATURE
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} "${TEMP_FILE}"
CXX_STANDARD 20
CXX_STANDARD_REQUIRED TRUE
)
set(${CACHE_VAR} ${HAS_FEATURE} CACHE INTERNAL "Cached feature test result for ${MACRO}")
endif()
if(NOT HAS_FEATURE)
message(FATAL_ERROR "${MACRO} is not supported by your compiler, at least ${MINIMUM_VALUE} is required.")
endif()
endfunction()
function(check_cpp20_attribute ATTRIBUTE MINIMUM_VALUE)
set(CACHE_VAR "CHECK_CPP20_ATTRIBUTE_${MACRO}")
if(NOT DEFINED ${CACHE_VAR})
set(TEMP_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cpp")
file(WRITE "${TEMP_FILE}" "#include <version>
#if !defined(__has_cpp_attribute) || __has_cpp_attribute(${ATTRIBUTE}) < ${MINIMUM_VALUE}L
#error Missing feature
#endif
")
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
try_compile(HAS_FEATURE
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} "${TEMP_FILE}"
CXX_STANDARD 20
CXX_STANDARD_REQUIRED TRUE
)
set(${CACHE_VAR} ${HAS_FEATURE} CACHE INTERNAL "Cached attribute test result for ${MACRO}")
endif()
if(NOT HAS_FEATURE)
message(FATAL_ERROR "${ATTRIBUTE} is not supported by your compiler, at least ${MINIMUM_VALUE} is required.")
endif()
endfunction()

View File

@@ -1,45 +0,0 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# - Try to find Facebook zstd library
# This will define
# Zstd_FOUND
# Zstd_INCLUDE_DIR
# Zstd_LIBRARY
#
find_path(Zstd_INCLUDE_DIR NAMES zstd.h)
find_library(Zstd_LIBRARY_DEBUG NAMES zstdd zstd_staticd)
find_library(Zstd_LIBRARY_RELEASE NAMES zstd zstd_static)
include(SelectLibraryConfigurations)
SELECT_LIBRARY_CONFIGURATIONS(Zstd)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
Zstd DEFAULT_MSG
Zstd_LIBRARY Zstd_INCLUDE_DIR
)
mark_as_advanced(Zstd_INCLUDE_DIR Zstd_LIBRARY)
if(Zstd_FOUND AND NOT (TARGET Zstd::Zstd))
add_library (Zstd::Zstd UNKNOWN IMPORTED)
set_target_properties(Zstd::Zstd
PROPERTIES
IMPORTED_LOCATION ${Zstd_LIBRARY}
INTERFACE_INCLUDE_DIRECTORIES ${Zstd_INCLUDE_DIR})
endif()

186
CMakeModules/Findzstd.cmake Normal file
View File

@@ -0,0 +1,186 @@
# Copyright (C) 2020 Dieter Baron and Thomas Klausner
#
# The authors can be contacted at <info@libzip.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The names of the authors may not be used to endorse or promote
# products derived from this software without specific prior
# written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#[=======================================================================[.rst:
Findzstd
-------
Finds the Zstandard (zstd) library.
Imported Targets
^^^^^^^^^^^^^^^^
This module provides the following imported targets, if found:
``zstd::libzstd_shared``
The shared Zstandard library
``zstd::libzstd_static``
The shared Zstandard library
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``zstd_FOUND``
True if the system has the Zstandard library.
``zstd_VERSION``
The version of the Zstandard library which was found.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``zstd_INCLUDE_DIR``
The directory containing ``zstd.h``.
``zstd_STATIC_LIBRARY``
The path to the Zstandard static library.
``zstd_SHARED_LIBRARY``
The path to the Zstandard shared library.
``zstd_DLL``
The path to the Zstandard DLL.
#]=======================================================================]
find_package(PkgConfig)
pkg_check_modules(PC_zstd QUIET libzstd)
find_path(zstd_INCLUDE_DIR
NAMES zstd.h
HINTS ${PC_zstd_INCLUDE_DIRS}
)
find_file(zstd_DLL
NAMES libzstd.dll zstd.dll
PATH_SUFFIXES bin
HINTS ${PC_zstd_PREFIX}
)
# On Windows, we manually define the library names to avoid mistaking the
# implib for the static library
if(zstd_DLL)
set(_zstd_win_static_name zstd-static)
set(_zstd_win_shared_name zstd)
else()
# vcpkg removes the -static suffix in static builds
set(_zstd_win_static_name zstd zstd_static)
set(_zstd_win_shared_name)
endif()
set(_previous_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".dylib" ".dll.a" ".lib")
find_library(zstd_SHARED_LIBRARY
NAMES zstd ${_zstd_win_shared_name}
HINTS ${PC_zstd_LIBDIR}
)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib")
find_library(zstd_STATIC_LIBRARY
NAMES zstd ${_zstd_win_static_name}
HINTS ${PC_zstd_LIBDIR}
)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_previous_suffixes})
# Set zstd_LIBRARY to the shared library or fall back to the static library
if(zstd_SHARED_LIBRARY)
set(_zstd_LIBRARY ${zstd_SHARED_LIBRARY})
else()
set(_zstd_LIBRARY ${zstd_STATIC_LIBRARY})
endif()
# Extract version information from the header file
if(zstd_INCLUDE_DIR)
file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_major_line
REGEX "^#define ZSTD_VERSION_MAJOR *[0-9]+"
LIMIT_COUNT 1)
string(REGEX MATCH "[0-9]+"
zstd_MAJOR_VERSION "${_ver_major_line}")
file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_minor_line
REGEX "^#define ZSTD_VERSION_MINOR *[0-9]+"
LIMIT_COUNT 1)
string(REGEX MATCH "[0-9]+"
zstd_MINOR_VERSION "${_ver_minor_line}")
file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_release_line
REGEX "^#define ZSTD_VERSION_RELEASE *[0-9]+"
LIMIT_COUNT 1)
string(REGEX MATCH "[0-9]+"
zstd_RELEASE_VERSION "${_ver_release_line}")
set(Zstd_VERSION "${zstd_MAJOR_VERSION}.${zstd_MINOR_VERSION}.${zstd_RELEASE_VERSION}")
unset(_ver_major_line)
unset(_ver_minor_line)
unset(_ver_release_line)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(zstd
FOUND_VAR zstd_FOUND
REQUIRED_VARS
_zstd_LIBRARY
zstd_INCLUDE_DIR
VERSION_VAR zstd_VERSION
)
if(zstd_FOUND AND zstd_SHARED_LIBRARY AND NOT TARGET zstd::libzstd_shared)
add_library(zstd::libzstd_shared SHARED IMPORTED)
if(WIN32)
set_target_properties(zstd::libzstd_shared PROPERTIES
IMPORTED_LOCATION "${zstd_DLL}"
IMPORTED_IMPLIB "${zstd_SHARED_LIBRARY}"
)
else()
set_target_properties(zstd::libzstd_shared PROPERTIES
IMPORTED_LOCATION "${zstd_SHARED_LIBRARY}"
)
endif()
set_target_properties(zstd::libzstd_shared PROPERTIES
INTERFACE_COMPILE_OPTIONS "${PC_zstd_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
)
endif()
if(zstd_FOUND AND zstd_STATIC_LIBRARY AND NOT TARGET zstd::libzstd_static)
add_library(zstd::libzstd_static STATIC IMPORTED)
set_target_properties(zstd::libzstd_static PROPERTIES
IMPORTED_LOCATION "${zstd_STATIC_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${PC_zstd_CFLAGS_OTHER}"
INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}"
)
endif()
mark_as_advanced(
zstd_INCLUDE_DIR
zstd_DLL
zstd_SHARED_LIBRARY
zstd_STATIC_LIBRARY
)

View File

@@ -1,7 +1,8 @@
# DuckStation - PlayStation 1, aka. PSX Emulator
[Features](#features) | [Downloading and Running](#downloading-and-running) | [Building](#building) | [Disclaimers](#disclaimers)
**Latest Builds for Windows 10/11 (x64/ARM64), Linux (AppImage/Flatpak), and macOS (11.0+ Universal):** https://github.com/stenzek/duckstation/releases/tag/latest
**Latest Builds for Windows 10/11 (x64/ARM64), Linux (AppImage x64/ARM32/ARM64), and macOS (11.0+ Universal):** https://github.com/stenzek/duckstation/releases/tag/latest
**Game Compatibility List:** https://docs.google.com/spreadsheets/d/e/2PACX-1vRE0jjiK_aldpICoy5kVQlpk2f81Vo6P4p9vfg4d7YoTOoDlH4PQHoXjTD2F7SdN8SSBLoEAItaIqQo/pubhtml
@@ -23,20 +24,23 @@ DuckStation features a fully-featured frontend built using Qt, as well as a full
Other features include:
- CPU Recompiler/JIT (x86-64, armv7/AArch32, AArch64, RISC-V/RV64).
- Hardware (D3D11, D3D12, OpenGL, Vulkan, Metal) and software rendering.
- Hardware renderer supporting D3D11, D3D12, OpenGL, Vulkan and Metal APIs.
- Upscaling, texture filtering, and true colour (24-bit) in hardware renderers.
- Accurate blending via Rasterizer Order Views/Fragment Shader Interlock.
- PGXP for geometry precision, texture correction, and depth buffer emulation.
- Accurate blending via Rasterizer Order Views/Fragment Shader Interlock.
- Texture replacement system in hardware renderers.
- Vectorized and multi-threaded software renderer.
- Motion adaptive deinterlacing.
- Adaptive downsampling filter.
- Screen rotation for vertical or "TATE" shmup games.
- Post processing shader chains (GLSL and Reshade FX).
- Border overlays/bezels displayed around game content.
- "Fast boot" for skipping BIOS splash/intro.
- Save state support, with runahead and rewind.
- Windows, Linux, macOS support.
- Supports reading directly from CD, bin/cue images, raw bin/img files, MAME CHD, single-track ECM, MDS/MDF, and unencrypted PBP formats.
- Preloading of disc images to RAM to avoid disk sleeping hitches.
- Merging of multi-disc games in game list/grid with memory cards shared between discs.
- Automatic loading/applying of PPF patches.
- Direct booting of homebrew executables.
- Direct loading of Portable Sound Format (psf) files.
@@ -44,6 +48,7 @@ Other features include:
- Digital and analog controllers for input (rumble is forwarded to host).
- GunCon and Justifier lightgun support (simulated with mouse).
- NeGcon support.
- Controller presets and per-game configuration.
- Qt and "Big Picture" UI.
- Automatic updates with preview and latest channels.
- Automatic content scanning - game titles/hashes are provided by redump.org.
@@ -56,6 +61,8 @@ Other features include:
- RetroAchievements.
- Discord Rich Presence.
- Video capture with Media Foundation (Windows) and [FFmpeg](https://www.ffmpeg.org/) (All Platforms) backends.
- Free camera function.
- Parallel port cartridge emulation.
## System Requirements
- A CPU faster than a potato. But it needs to be x86_64, AArch32/armv7, AArch64/ARMv8, or RISC-V/RV64.
@@ -63,19 +70,21 @@ Other features include:
- SDL, XInput or DInput compatible game controller (e.g. XB360/XBOne/XBSeries). DualShock 3 users on Windows will need to install the official DualShock 3 drivers included as part of PlayStation Now.
## Downloading and running
Binaries of DuckStation for Windows x64/ARM64, Linux x86_64 (in AppImage/Flatpak formats), and macOS Universal Binaries are available via GitHub Releases and are automatically built with every commit/push.
Binaries of DuckStation for Windows x64/ARM64, Linux x86_64/ARM32/ARM64 (in AppImage format), and macOS Universal Binaries are available via GitHub Releases and are automatically built with every commit/push.
As per the terms of CC-BY-NC-ND, redistribution of **unmodified releases and code** is permitted. However, we would prefer if you linked to https://www.duckstation.org/ instead. Please note that pre-configured settings and packages are considered modifications.
For x86 machines (most systems), you will need a CPU that supports the SSE4.1 instruction set for the "normal" build. This includes all Intel CPUs manufactured after 2007, and AMD CPUs manufactured after 2011. If you have a CPU that is older, you will need to download the "SSE2" build from the releases page, which has lower performance but still supports these CPUs.
The main releases page is limited to the last 30 releases due to automatic updater limitations. Older releases can be downloaded from https://github.com/duckstation/old-releases/releases.
### Windows
DuckStation **requires** Windows 10/11, specifically version 1809 or newer. If you are still using Windows 7/8/8.1, DuckStation **will not run** on your operating system. Running these operating systems in 2023 should be considered a security risk, and I would recommend updating to something which receives vendor support.
If you must use an older operating system, [v0.1-5624](https://github.com/stenzek/duckstation/releases/tag/v0.1-5624) is the last version which will run. But do not expect to recieve any assistance, these builds are no longer supported.
If you must use an older operating system, [v0.1-5624](https://github.com/duckstation/old-releases/releases/tag/v0.1-5624) is the last version which will run. But do not expect to recieve any assistance, these builds are no longer supported.
To download:
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download the Windows x64 build. This is a zip archive containing the prebuilt binary.
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download the Windows x64 build. This is a zip archive containing the prebuilt binary. If you have an ARM64 Windows machine such as Snapdragon, download the Windows ARM64 build.
- Alternatively, direct download link: https://github.com/stenzek/duckstation/releases/download/latest/duckstation-windows-x64-release.zip
- Extract the archive **to a subdirectory**. The archive has no root subdirectory, so extracting to the current directory will drop a bunch of files in your download directory if you do not extract to a subdirectory.
@@ -85,7 +94,7 @@ Once downloaded and extracted, you can launch the emulator with `duckstation-qt-
### Linux
DuckStation is provided for x86_64 Linux in AppImage and Flatpak formats. The release on [Flathub](https://flathub.org/apps/org.duckstation.DuckStation) is official, and synchronized with the latest rolling/stable release on GitHub.
DuckStation is provided for x86_64/ARM32/ARM64 Linux in AppImage (recommended) and Flatpak (not recommended) formats.
#### AppImage
@@ -96,6 +105,8 @@ The AppImages require a distribution equivalent to Ubuntu 22.04 or newer to run.
#### Flatpak
Due to various Flatpak limitations and Flathub randomly breaking regularly, **the Flatpak package is not recommended**. **We recommend that you use the AppImage instead.**
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download `duckstation-x64.flatpak`.
- Run `flatpak install ./duckstation-x64.flatpak`.
@@ -103,19 +114,28 @@ or, if you have FlatHub set up:
- Run `flatpak install org.duckstation.DuckStation`.
Use `flatpak run org.duckstation.DuckStation` to start, or select `DuckStation` in the launcher of your desktop environment. Follow the Setup Wizard to get started.
**As of 2025/07/26, with the aforementioned issues and a lack of interest from users, the Flatpak package is deprecated. Future updates are not guaranteed.**
To migrate your data from the Flatpak package to the AppImage, you can run the following command:
```bash
mv ~/.var/app/org.duckstation.DuckStation/config/duckstation ~/.local/share
```
You will need to re-add your game directories after switching to the AppImage.
### macOS
Universal MacOS builds are provided for both x64 and ARM64 (Apple Silicon).
Universal macOS builds are provided for both x86_64 (Intel) and ARM64 (Apple Silicon).
MacOS Big Sir (11.0) is required, as this is also the minimum requirement for Qt.
macOS Big Sur (11.0) is required, as this is also the minimum requirement for Qt.
To download:
- Go to https://github.com/stenzek/duckstation/releases/tag/latest, and download `duckstation-mac-release.zip`.
- Extract the zip by double-clicking it.
- Open DuckStation.app, optionally moving it to your desired location first.
- Open `DuckStation.app`, optionally moving it to your desired location first.
- Depending on GateKeeper configuration, you may need to right click -> Open the first time you run it, as code signing certificates are out of the question for a project which brings in zero revenue.
### Android
You will need a device with armv7 (32-bit ARM), AArch64 (64-bit ARM), or x86_64 (64-bit x86). 64-bit is preferred, the requirements are higher for 32-bit, you'll probably want at least a 1.5GHz CPU.
@@ -156,7 +176,6 @@ Each release includes the latest version of the database, however you are free t
Requirements:
- Visual Studio 2022
1. Clone the respository: `git clone https://github.com/stenzek/duckstation.git`.
2. Download the dependencies pack from https://github.com/stenzek/duckstation-ext-qt-minimal/releases/download/latest/deps-x64.7z, and extract it to `dep\msvc`.
3. Open the Visual Studio solution `duckstation.sln` in the root, or "Open Folder" for cmake build.
@@ -197,7 +216,6 @@ Requirements:
- CMake
- Xcode
1. Clone the repository: `git clone https://github.com/stenzek/duckstation.git`.
2. Build the dependencies. This will take a while. `scripts/deps/build-dependencies-mac.sh deps`.
2. Run CMake to configure the build system: `cmake -Bbuild-release -DCMAKE_BUILD_TYPE=Release -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_PREFIX_PATH="$PWD/deps"`.
@@ -214,16 +232,14 @@ This is located in the following places depending on the platform you're using:
- Linux: `$XDG_DATA_HOME/duckstation`, or `~/.local/share/duckstation`.
- macOS: `~/Library/Application Support/DuckStation`.
So, if you were using Linux, you would place your BIOS images in `~/.local/share/duckstation/bios`. This directory will be created upon running DuckStation
for the first time.
So, if you were using Linux, you would place your BIOS images in `~/.local/share/duckstation/bios`. This directory will be created upon running DuckStation for the first time.
If you wish to use a "portable" build, where the user directory is the same as where the executable is located, create an empty file named `portable.txt`
in the same directory as the DuckStation executable.
If you wish to use a "portable" build, where the user directory is the same as where the executable is located, create an empty file named `portable.txt` in the same directory as the DuckStation executable.
## Bindings for Qt frontend
Your keyboard or game controller can be used to simulate a variety of PlayStation controllers. Controller input is supported through DInput, XInput, and SDL backends and can be changed through `Settings -> Controllers`.
To bind your input device, go to `Settings -> Controllers`, and select the virtual controller you want to map. Automatic mapping handles the majority of ocntrollers. However, if you need to manually bind a controller, click the box below the button/axis name, and press the key or button on your input device that you wish to bind to.
To bind your input device, go to `Settings -> Controllers`, and select the virtual controller you want to map. Automatic mapping handles the majority of controllers. However, if you need to manually bind a controller, click the box below the button/axis name, and press the key or button on your input device that you wish to bind to.
## SDL Game Controller Database
DuckStation releases ship with a database of game controller mappings for the SDL controller backend, courtesy of https://github.com/mdqinc/SDL_GameControllerDB. The included `gamecontrollerdb.txt` file can be found in the `resources` subdirectory of the DuckStation program directory.

View File

@@ -1,6 +1,7 @@
Tradução:
# DuckStation - Emulador de PlayStation 1, também conhecido como PSX
[Últimas Notícias](#latest-news) | [Recursos](#features) | [Download e Execução](#downloading-and-running) | [Compilação](#building) | [Avisos Legais](#disclaimers)
**Últimas Versões para Windows 10/11, Linux (AppImage/Flatpak) e macOS:** https://github.com/stenzek/duckstation/releases/tag/latest
@@ -93,19 +94,19 @@ ou, se você tiver o FlatHub configurado:
- Execute `flatpak install org.duckstation.DuckStation`.
Use `flatpak run org.duckstation.DuckStation` para iniciar, ou selecione `DuckStation` no lançador do seu ambiente de desktop. Siga o Assistente de Configuração para começar.
### macOS
São fornecidas compilações universais do MacOS para x64 e ARM64 (Apple Silicon).
São fornecidas compilações universais do macOS para x86_64 (Intel) e ARM64 (Apple Silicon).
MacOS Big Sir (11.0) é necessário, pois também é o requisito mínimo para o Qt.
macOS Big Sur (11.0) é necessário, pois também é o requisito mínimo para o Qt.
Para baixar:
- Acesse https://github.com/stenzek/duckstation/releases/tag/latest e baixe `duckstation-mac-release.zip`.
- Extraia o arquivo ZIP dando um duplo clique nele.
- Abra o DuckStation.app, opcionalmente movendo-o para a localização desejada antes.
- Abra o `DuckStation.app`, opcionalmente movendo-o para a localização desejada antes.
- Dependendo da configuração do GateKeeper, você pode precisar clicar com o botão direito -> Abrir na primeira vez que executá-lo, já que certificados de assinatura de código estão fora de questão para um projeto que não gera receita alguma.
### Android
Você precisará de um dispositivo com armv7 (32 bits ARM), AArch64 (64 bits ARM) ou x86_64 (64 bits x86). 64 bits são preferíveis, os requisitos são mais altos para 32 bits, você provavelmente vai querer pelo menos um CPU de 1,5 GHz.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#ffffff" d="M12 2C17.52 2 22 6.48 22 12C22 17.52 17.52 22 12 22C6.48 22 2 17.52 2 12C2 6.48 6.48 2 12 2ZM12 20C16.42 20 20 16.42 20 12C20 7.58 16.42 4 12 4C7.58 4 4 7.58 4 12C4 16.42 7.58 20 12 20ZM12 11H16V13H12V16L8 12L12 8V11Z"></path></svg>

After

Width:  |  Height:  |  Size: 316 B

View File

@@ -0,0 +1,9 @@
void main()
{
// Radial gradient at (0.6, 0.4), moving horizontally slowly
float r1 = length(v_tex0 - vec2(0.6, 0.4));
float r2 = length(v_tex0 - vec2(0.61, 0.41));
float r = mix(r1, r2, sin(u_time / 5.0));
vec3 bg_color = vec3(0.1, 0.1, 0.6) * (1.0f - r);
o_col0 = vec4(bg_color, 1.0);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

View File

@@ -0,0 +1,10 @@
void main()
{
vec2 uv = v_tex0 * 2.0 - 1.0;
uv.x *= u_display_size.x / u_display_size.y;
vec2 center = vec2(cos(u_time * 0.2) * 1.5, (sin(u_time * 0.2) * 0.2) * 0.5 + 1.2);
float dist = length(uv - center);
float gradient = smoothstep(0.0, 1.0, dist);
o_col0 = vec4(mix(vec3(0.5, 0.5, 0.9), vec3(0.05, 0.05, 0.2), gradient), 1.0);
}

View File

@@ -0,0 +1,30 @@
const float PI = 3.14159265359;
const float SCALE = 150.0;
const float LENGTH = 7.5;
// https://www.shadertoy.com/view/Xt23Ry
float rand(float co) {
return fract(sin(co * 91.3458) * 47453.5453);
}
vec3 background(vec2 pos) {
// Radial gradient at (0.6, 0.4).
float r = length(pos - vec2(0.6, 0.4));
return vec3(r * 0.1);
}
// Inspired by https://www.shadertoy.com/view/Wtl3D7
vec3 trails(vec2 pos, vec3 bg_color, vec3 fg_color) {
float cdist = length(pos) * SCALE;
float rv = rand(ceil(cdist));
float rotation = u_time * rv * 0.005;
float nangle = atan(pos.y, pos.x) / PI;
float intensity = smoothstep(rv, rv - 1.5, fract(nangle + rotation + rv * 0.1) * LENGTH) * step(0.1, cdist / SCALE);
return mix(bg_color, fg_color * rv, intensity);
}
void main() {
vec3 bg_color = background(v_tex0);
vec3 fg_color = vec3(0.7, 0.7, 1.5);
o_col0 = vec4(trails(v_tex0, bg_color, fg_color), 1.0);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#ffffff" d="M21 3C21.5523 3 22 3.44772 22 4V11H20V5H4V19H10V21H3C2.44772 21 2 20.5523 2 20V4C2 3.44772 2.44772 3 3 3H21ZM21 13C21.5523 13 22 13.4477 22 14V20C22 20.5523 21.5523 21 21 21H13C12.4477 21 12 20.5523 12 20V14C12 13.4477 12.4477 13 13 13H21ZM11.5 7L9.45711 9.04311L11.7071 11.2929L10.2929 12.7071L8.04311 10.4571L6 12.5V7H11.5Z"></path></svg>

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 512 512"
version="1.1"
id="svg1"
sodipodi:docname="exit.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="2.640625"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-width="2856"
inkscape:window-height="1651"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
<path
fill="#ffffff"
d="m 363.3838,123.77433 108.17663,108.17663 c 6.3426,6.3426 9.95436,15.06368 9.95436,24.04904 0,8.98535 -3.61176,17.70643 -9.95436,24.04904 L 363.3838,388.22566 c -5.63787,5.63787 -13.21376,8.72108 -21.14202,8.72108 -16.47315,0 -29.86309,-13.38994 -29.86309,-29.86309 V 312.37869 H 199.6213 c -15.59223,0 -28.18935,-12.59711 -28.18935,-28.18935 v -56.37869 c 0,-15.59223 12.59712,-28.18935 28.18935,-28.18935 h 112.75739 v -54.70496 c 0,-16.47315 13.38994,-29.86309 29.86309,-29.86309 7.92826,0 15.50415,3.1713 21.14202,8.72108 z m -191.95185,-8.72108 h -56.3787 c -15.59222,0 -28.189349,12.59712 -28.189349,28.18935 v 225.51479 c 0,15.59223 12.597119,28.18935 28.189349,28.18935 h 56.3787 c 15.59223,0 28.18935,12.59712 28.18935,28.18935 0,15.59223 -12.59712,28.18935 -28.18935,28.18935 h -56.3787 c -46.688603,0 -84.56804,-37.87944 -84.56804,-84.56805 V 143.2426 c 0,-46.688607 37.879437,-84.568041 84.56804,-84.568041 h 56.3787 c 15.59223,0 28.18935,12.597115 28.18935,28.189347 0,15.592224 -12.59712,28.189344 -28.18935,28.189344 z"
id="path1"
style="stroke-width:0.880917" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 640 640"
version="1.1"
id="svg1"
sodipodi:docname="game-list.svg"
width="640"
height="640"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#000001"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.93429246"
inkscape:cx="436.69409"
inkscape:cy="330.73156"
inkscape:window-width="2844"
inkscape:window-height="1651"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
<path
fill="#ffffff"
d="m 264.14016,286.21023 c -46.25894,0 -83.78977,37.53084 -83.78977,83.78977 0,46.25893 37.53083,83.78978 83.78977,83.78978 h 111.71968 c 46.25894,0 83.78977,-37.53085 83.78977,-83.78978 0,-46.25894 -37.53083,-83.78977 -83.78977,-83.78977 z m 132.66713,45.38613 a 17.456203,17.456203 0 1 1 0,34.91239 17.456203,17.456203 0 1 1 0,-34.91239 z m -45.38612,59.35108 a 17.456203,17.456203 0 1 1 34.91239,0 17.456203,17.456203 0 1 1 -34.91239,0 z m -97.75473,-45.38612 c 0,-5.80419 4.66954,-10.47373 10.47372,-10.47373 5.80418,0 10.47371,4.66954 10.47371,10.47373 v 13.96496 h 13.96497 c 5.80417,0 10.47373,4.66953 10.47373,10.47372 0,5.80419 -4.66954,10.47372 -10.47373,10.47372 h -13.96497 v 13.96496 c 0,5.80419 -4.66953,10.47373 -10.47371,10.47373 -5.80419,0 -10.47372,-4.66954 -10.47372,-10.47373 v -13.96496 h -13.96496 c -5.8042,0 -10.47373,-4.66953 -10.47373,-10.47372 0,-5.8042 4.66953,-10.47373 10.47373,-10.47373 h 13.96496 z"
id="path1"
style="stroke-width:0.436405" />
<path
fill="#ffffff"
d="m 89.226718,138.67812 c -9.066093,0 -16.483806,7.41772 -16.483806,16.48381 v 329.67613 c 0,9.06609 7.417713,16.4838 16.483806,16.4838 H 550.77329 c 9.06608,0 16.4838,-7.41771 16.4838,-16.4838 V 155.16193 c 0,-9.06609 -7.41772,-16.48381 -16.4838,-16.48381 z m -65.935226,16.48381 c 0,-36.36739 29.567828,-65.935223 65.935226,-65.935223 H 550.77329 c 36.36739,0 65.93522,29.567833 65.93522,65.935223 v 329.67613 c 0,36.36739 -29.56783,65.93523 -65.93522,65.93523 H 89.226718 c -36.367398,0 -65.935226,-29.56784 -65.935226,-65.93523 z m 98.902838,65.93523 c 0,-18.20753 14.76011,-32.96759 32.96761,-32.96759 18.20751,0 32.96761,14.76006 32.96761,32.96759 0,18.20752 -14.7601,32.96759 -32.96761,32.96759 -18.2075,0 -32.96761,-14.76007 -32.96761,-32.96759 z m 107.14475,0 c 0,-13.70217 11.02352,-24.72572 24.72569,-24.72572 h 230.77329 c 13.70216,0 24.72571,11.02355 24.72571,24.72572 0,13.70217 -11.02355,24.72572 -24.72571,24.72572 H 254.06477 c -13.70217,0 -24.72569,-11.02355 -24.72569,-24.72572 z"
id="path1-5"
style="stroke-width:1.03024"
sodipodi:nodetypes="ssssssssssssssssssssssssssssss" />
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="#ffffff" d="M2.13127 13.6308C1.9492 12.5349 1.95521 11.434 2.13216 10.3695C3.23337 10.3963 4.22374 9.86798 4.60865 8.93871C4.99357 8.00944 4.66685 6.93557 3.86926 6.17581C4.49685 5.29798 5.27105 4.51528 6.17471 3.86911C6.9345 4.66716 8.0087 4.99416 8.93822 4.60914C9.86774 4.22412 10.3961 3.23332 10.369 2.13176C11.4649 1.94969 12.5658 1.9557 13.6303 2.13265C13.6036 3.23385 14.1319 4.22422 15.0612 4.60914C15.9904 4.99406 17.0643 4.66733 17.8241 3.86975C18.7019 4.49734 19.4846 5.27153 20.1308 6.1752C19.3327 6.93499 19.0057 8.00919 19.3907 8.93871C19.7757 9.86823 20.7665 10.3966 21.8681 10.3695C22.0502 11.4654 22.0442 12.5663 21.8672 13.6308C20.766 13.6041 19.7756 14.1324 19.3907 15.0616C19.0058 15.9909 19.3325 17.0648 20.1301 17.8245C19.5025 18.7024 18.7283 19.4851 17.8247 20.1312C17.0649 19.3332 15.9907 19.0062 15.0612 19.3912C14.1316 19.7762 13.6033 20.767 13.6303 21.8686C12.5344 22.0507 11.4335 22.0447 10.3691 21.8677C10.3958 20.7665 9.86749 19.7761 8.93822 19.3912C8.00895 19.0063 6.93508 19.333 6.17532 20.1306C5.29749 19.503 4.51479 18.7288 3.86862 17.8252C4.66667 17.0654 4.99367 15.9912 4.60865 15.0616C4.22363 14.1321 3.23284 13.6038 2.13127 13.6308ZM11.9997 15.0002C13.6565 15.0002 14.9997 13.657 14.9997 12.0002C14.9997 10.3433 13.6565 9.00018 11.9997 9.00018C10.3428 9.00018 8.99969 10.3433 8.99969 12.0002C8.99969 13.657 10.3428 15.0002 11.9997 15.0002Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 512 512"
version="1.1"
id="svg1"
sodipodi:docname="start-bios.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="2.640625"
inkscape:cx="256"
inkscape:cy="256"
inkscape:window-width="2852"
inkscape:window-height="1651"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
<path
fill="#ffffff"
d="m 186.11835,53.343194 c 0,-11.617826 -9.34668,-20.964498 -20.9645,-20.964498 -11.61782,0 -20.9645,9.346672 -20.9645,20.964498 v 34.940832 c -30.83528,0 -55.905324,25.070044 -55.905324,55.905324 H 53.343194 c -11.617826,0 -20.964498,9.34668 -20.964498,20.9645 0,11.61782 9.346672,20.9645 20.964498,20.9645 H 88.284026 V 235.0355 H 53.343194 c -11.617826,0 -20.964498,9.34668 -20.964498,20.96449 0,11.61783 9.346672,20.96451 20.964498,20.96451 h 34.940832 v 48.91716 H 53.343194 c -11.617826,0 -20.964498,9.34666 -20.964498,20.96449 0,11.61783 9.346672,20.9645 20.964498,20.9645 h 34.940832 c 0,30.83528 25.070044,55.90533 55.905324,55.90533 v 34.94082 c 0,11.61783 9.34668,20.9645 20.9645,20.9645 11.61782,0 20.9645,-9.34667 20.9645,-20.9645 v -34.94082 h 48.91715 v 34.94082 c 0,11.61783 9.34668,20.9645 20.96449,20.9645 11.61783,0 20.96451,-9.34667 20.96451,-20.9645 v -34.94082 h 48.91716 v 34.94082 c 0,11.61783 9.34666,20.9645 20.96449,20.9645 11.61783,0 20.9645,-9.34667 20.9645,-20.9645 v -34.94082 c 30.83528,0 55.90533,-25.07005 55.90533,-55.90533 h 34.94082 c 11.61783,0 20.9645,-9.34667 20.9645,-20.9645 0,-11.61783 -9.34667,-20.96449 -20.9645,-20.96449 H 423.71598 V 276.9645 h 34.94082 c 11.61783,0 20.9645,-9.34668 20.9645,-20.96451 0,-11.61781 -9.34667,-20.96449 -20.9645,-20.96449 h -34.94082 v -48.91715 h 34.94082 c 11.61783,0 20.9645,-9.34668 20.9645,-20.9645 0,-11.61782 -9.34667,-20.9645 -20.9645,-20.9645 h -34.94082 c 0,-30.83528 -25.07005,-55.905324 -55.90533,-55.905324 V 53.343194 c 0,-11.617826 -9.34667,-20.964498 -20.9645,-20.964498 -11.61783,0 -20.96449,9.346672 -20.96449,20.964498 V 88.284026 H 276.9645 V 53.343194 c 0,-11.617826 -9.34668,-20.964498 -20.96451,-20.964498 -11.61781,0 -20.96449,9.346672 -20.96449,20.964498 v 34.940832 h -48.91715 z m -13.97634,90.846156 h 167.71598 c 15.46131,0 27.95266,12.49134 27.95266,27.95266 v 167.71598 c 0,15.46131 -12.49135,27.95266 -27.95266,27.95266 H 172.14201 c -15.46132,0 -27.95266,-12.49135 -27.95266,-27.95266 V 172.14201 c 0,-15.46132 12.49134,-27.95266 27.95266,-27.95266 z m 167.71598,27.95266 H 172.14201 v 167.71598 h 167.71598 z"
id="path1"
style="stroke-width:0.87352" />
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 512 512"
version="1.1"
id="svg1"
sodipodi:docname="start-disc.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="1.8685849"
inkscape:cx="269.72282"
inkscape:cy="294.60797"
inkscape:window-width="2856"
inkscape:window-height="1652"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
<path
fill="#ffffff"
d="m 49.005172,256 a 206.99483,206.99483 0 1 1 413.989658,0 206.99483,206.99483 0 1 1 -413.989658,0 z M 256,281.87436 a 25.874355,25.874355 0 1 1 0,-51.74871 25.874355,25.874355 0 1 1 0,51.74871 z M 178.37694,256 a 77.62306,77.62306 0 1 0 155.24612,0 77.62306,77.62306 0 1 0 -155.24612,0 z m -51.7487,-12.93717 c 0,-28.30008 14.15003,-57.48958 36.54752,-79.88707 22.39749,-22.39749 51.58699,-36.54752 79.88707,-36.54752 7.11544,0 12.93717,-5.82173 12.93717,-12.93718 0,-7.11545 -5.82173,-12.93718 -12.93717,-12.93718 -36.70924,0 -72.12476,18.03119 -98.24169,44.06726 -26.11692,26.03607 -44.06726,61.53245 -44.06726,98.24169 0,7.11544 5.82173,12.93717 12.93718,12.93717 7.11545,0 12.93718,-5.82173 12.93718,-12.93717 z"
id="path1"
style="stroke-width:0.808574" />
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 576 576"
version="1.1"
id="svg1"
sodipodi:docname="start-file.svg"
width="576"
height="576"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="2.640625"
inkscape:cx="287.81065"
inkscape:cy="225.70414"
inkscape:window-width="2852"
inkscape:window-height="1651"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.-->
<path
fill="#ffffff"
d="m 375.58614,492.32782 h 43.78453 c 10.39883,0 19.97669,-5.47306 25.17611,-14.50363 L 546.71069,302.68606 c 5.29063,-9.03055 5.29063,-20.15913 0.0912,-29.2809 -5.19941,-9.12179 -14.77728,-14.59484 -25.26731,-14.59484 H 156.66347 c -10.39883,0 -19.9767,5.47306 -25.17611,14.50363 L 69.0944,380.22117 V 142.05155 c 0,-8.02715 6.567679,-14.59484 14.594844,-14.59484 H 190.87013 c 3.83116,0 7.57108,1.55071 10.30762,4.28724 l 24.17271,24.17271 c 19.15573,19.15573 45.15279,29.91943 72.24447,29.91943 h 107.1809 c 8.02716,0 14.59484,6.56767 14.59484,14.59484 v 29.1897 h 43.78454 v -29.1897 c 0,-32.19988 -26.17951,-58.37938 -58.37938,-58.37938 h -107.1809 c -15.50702,0 -30.37551,-6.11158 -41.32164,-17.05772 L 232.10058,100.72991 C 221.15444,89.783772 206.28594,83.672181 190.77892,83.672181 H 83.689244 c -32.199876,0 -58.379378,26.179509 -58.379378,58.379369 v 291.89689 c 0,32.19988 26.179502,58.37938 58.379378,58.37938 h 21.618616 z"
id="path1"
style="stroke-width:0.912178" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,10 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 113.48 122.88">
<!-- https://uxwing.com/wp-content/themes/uxwing/download/sport-and-awards/trophy-icon.png -->
<title>trophy</title>
<path style="fill:#808080;" d="M3.21,18.74H19.86q0-4,.06-8.26V0H93.05V10.49c0,2.92,0,5.66,0,8.26h17.24a3.08,3.08,0,0,1,3.07,2.93,77.67,77.67,0,0,1-.4,13.9A34,34,0,0,1,109.11,48a21.77,21.77,0,0,1-8.8,8.6A31.91,31.91,0,0,1,86.41,60C83.14,65.43,78.78,68,73.68,72.67c-6.17,4.71-10.81,8.26-7.2,19.13h5.39a7.84,7.84,0,0,1,7.82,7.82v3.15h.77A7.69,7.69,0,0,1,85.91,105h0a7.67,7.67,0,0,1,2.26,5.45v5.23a1.77,1.77,0,0,1-1.77,1.77H26.58a1.77,1.77,0,0,1-1.77-1.77v-5.23A7.66,7.66,0,0,1,27.07,105h0a7.66,7.66,0,0,1,5.44-2.26h.77V99.62a7.75,7.75,0,0,1,2.3-5.51v0a7.81,7.81,0,0,1,5.51-2.29h6.06c3.22-10.26-1-13.58-6.83-18.17A44.47,44.47,0,0,1,27.34,60,31.87,31.87,0,0,1,13,56.54a21.47,21.47,0,0,1-8.73-8.6A34.07,34.07,0,0,1,.51,35.58,78.1,78.1,0,0,1,.13,21.9v-.08a3.08,3.08,0,0,1,3.09-3.08ZM92.71,30a121.67,121.67,0,0,1-2,18,15.17,15.17,0,0,0,5-1.9,10.49,10.49,0,0,0,3.69-3.89,18,18,0,0,0,1.93-6,45.37,45.37,0,0,0,.5-6.25H92.71ZM20.12,30H12a49.78,49.78,0,0,0,.45,6.27,18.41,18.41,0,0,0,1.8,6,10.13,10.13,0,0,0,3.57,3.88A14.57,14.57,0,0,0,22.54,48a92,92,0,0,1-2.42-18Z"/>
<path style="fill:#A0A0A0;" d="M20.08,21.82H3.21C2.75,31.1,3.34,40,7,46.43c3.43,6.11,9.7,10.15,20.62,10.46a27.9,27.9,0,0,1-3.48-5.51c-6.56-.88-10.36-3.59-12.54-7.67S8.94,34.32,8.94,28.14a1.23,1.23,0,0,1,1.23-1.23h9.91V21.82Zm72.77,5.1h10.82a1.23,1.23,0,0,1,1.23,1.22c0,6.2-.56,11.54-2.84,15.6s-6.16,6.75-12.7,7.64a25.38,25.38,0,0,1-3.69,5.52c11-.29,17.29-4.33,20.77-10.45,3.67-6.47,4.29-15.34,3.84-24.62H92.85v5.09Z"/>
<path style="fill:#222;" d="M79.69,102.76h.77A7.69,7.69,0,0,1,85.91,105h0a7.67,7.67,0,0,1,2.26,5.45v10.63a1.77,1.77,0,0,1-1.77,1.77H26.58a1.77,1.77,0,0,1-1.77-1.77V110.48A7.66,7.66,0,0,1,27.07,105h0a7.66,7.66,0,0,1,5.44-2.26H79.69Z"/>
<path style="fill:#C0C0C0;" d="M70.64,108H35.72a4.22,4.22,0,0,0-3,1.25h0a4.26,4.26,0,0,0-1.25,3v5.28H81.55v-5.28a4.26,4.26,0,0,0-1.26-3,4.31,4.31,0,0,0-3-1.26Z"/>
<path style="fill:#909090;" d="M50.71,93h6V75.21c-22.17-7.88-24.26-35-29.55-72.57H22.53V29.41C23,39.6,24.68,47.14,27,52.91a38.19,38.19,0,0,0,8.39,12.8,68.65,68.65,0,0,0,6.71,5.78C49.11,77,54.19,81,50.71,93Z"/>
<path style="fill:#B0B0B0;" d="M56.71,93H63c-3.88-12.71,1.68-17,9-22.55,8.05-6.14,18.5-14.12,18.5-40.35V2.64H27.16C30.58,26.92,32.66,46.81,39.67,60A39.14,39.14,0,0,0,49,71.13a29.3,29.3,0,0,0,5.47,3.17,19.1,19.1,0,0,0,2.21.74v.15l.07,0V93Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,13 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 113.48 122.88">
<!-- https://uxwing.com/wp-content/themes/uxwing/download/sport-and-awards/trophy-icon.png -->
<title>trophy</title>
<path style="fill:#f39d00;" d="M3.21,18.74H19.86q0-4,.06-8.26V0H93.05V10.49c0,2.92,0,5.66,0,8.26h17.24a3.08,3.08,0,0,1,3.07,2.93,77.67,77.67,0,0,1-.4,13.9A34,34,0,0,1,109.11,48a21.77,21.77,0,0,1-8.8,8.6A31.91,31.91,0,0,1,86.41,60C83.14,65.43,78.78,68,73.68,72.67c-6.17,4.71-10.81,8.26-7.2,19.13h5.39a7.84,7.84,0,0,1,7.82,7.82v3.15h.77A7.69,7.69,0,0,1,85.91,105h0a7.67,7.67,0,0,1,2.26,5.45v5.23a1.77,1.77,0,0,1-1.77,1.77H26.58a1.77,1.77,0,0,1-1.77-1.77v-5.23A7.66,7.66,0,0,1,27.07,105h0a7.66,7.66,0,0,1,5.44-2.26h.77V99.62a7.75,7.75,0,0,1,2.3-5.51v0a7.81,7.81,0,0,1,5.51-2.29h6.06c3.22-10.26-1-13.58-6.83-18.17A44.47,44.47,0,0,1,27.34,60,31.87,31.87,0,0,1,13,56.54a21.47,21.47,0,0,1-8.73-8.6A34.07,34.07,0,0,1,.51,35.58,78.1,78.1,0,0,1,.13,21.9v-.08a3.08,3.08,0,0,1,3.09-3.08ZM92.71,30a121.67,121.67,0,0,1-2,18,15.17,15.17,0,0,0,5-1.9,10.49,10.49,0,0,0,3.69-3.89,18,18,0,0,0,1.93-6,45.37,45.37,0,0,0,.5-6.25H92.71ZM20.12,30H12a49.78,49.78,0,0,0,.45,6.27,18.41,18.41,0,0,0,1.8,6,10.13,10.13,0,0,0,3.57,3.88A14.57,14.57,0,0,0,22.54,48a92,92,0,0,1-2.42-18Z"/>
<path style="fill:#f9c809;" d="M20.08,21.82H3.21C2.75,31.1,3.34,40,7,46.43c3.43,6.11,9.7,10.15,20.62,10.46a27.9,27.9,0,0,1-3.48-5.51c-6.56-.88-10.36-3.59-12.54-7.67S8.94,34.32,8.94,28.14a1.23,1.23,0,0,1,1.23-1.23h9.91V21.82Zm72.77,5.1h10.82a1.23,1.23,0,0,1,1.23,1.22c0,6.2-.56,11.54-2.84,15.6s-6.16,6.75-12.7,7.64a25.38,25.38,0,0,1-3.69,5.52c11-.29,17.29-4.33,20.77-10.45,3.67-6.47,4.29-15.34,3.84-24.62H92.85v5.09Z"/>
<path style="fill:#222;" d="M79.69,102.76h.77A7.69,7.69,0,0,1,85.91,105h0a7.67,7.67,0,0,1,2.26,5.45v10.63a1.77,1.77,0,0,1-1.77,1.77H26.58a1.77,1.77,0,0,1-1.77-1.77V110.48A7.66,7.66,0,0,1,27.07,105h0a7.66,7.66,0,0,1,5.44-2.26H79.69Z"/>
<path style="fill:#ead79e;" d="M70.64,108H35.72a4.22,4.22,0,0,0-3,1.25h0a4.26,4.26,0,0,0-1.25,3v5.28H81.55v-5.28a4.26,4.26,0,0,0-1.26-3,4.31,4.31,0,0,0-3-1.26Z"/>
<path style="fill:#f8b705;" d="M50.71,93h6V75.21c-22.17-7.88-24.26-35-29.55-72.57H22.53V29.41C23,39.6,24.68,47.14,27,52.91a38.19,38.19,0,0,0,8.39,12.8,68.65,68.65,0,0,0,6.71,5.78C49.11,77,54.19,81,50.71,93Z"/>
<path style="fill:#fac809;" d="M56.71,93H63c-3.88-12.71,1.68-17,9-22.55,8.05-6.14,18.5-14.12,18.5-40.35V2.64H27.16C30.58,26.92,32.66,46.81,39.67,60A39.14,39.14,0,0,0,49,71.13a29.3,29.3,0,0,0,5.47,3.17,19.1,19.1,0,0,0,2.21.74v.15l.07,0V93Z"/>
<path style="fill:#f39d00;" d="M58.26,20.13,61.06,27l7.39.56a1.9,1.9,0,0,1,1,3.41l-5.59,4.74,1.76,7.18a1.9,1.9,0,0,1-1.41,2.29,1.88,1.88,0,0,1-1.49-.26L56.5,41l-6.29,3.89a1.9,1.9,0,0,1-2.62-.62,1.85,1.85,0,0,1-.23-1.44l1.75-7.18-5.66-4.8a1.91,1.91,0,0,1,1.09-3.35L51.93,27l2.81-6.84a1.91,1.91,0,0,1,3.52,0Z"/>
<polygon style="fill:#fff;" points="56.5 20.86 59.75 28.78 68.31 29.43 61.76 34.98 63.79 43.3 56.5 38.79 49.21 43.3 51.24 34.98 44.69 29.43 53.24 28.78 56.5 20.86 56.5 20.86 56.5 20.86"/>
<path style="fill:#fff;" d="M76.62,47.62l-.07.1a3.79,3.79,0,0,0-5.17.83l-.1-.08a3.52,3.52,0,0,0,.62-2.75,3.57,3.57,0,0,0-1.44-2.42,26.79,26.79,0,0,0,2.82.53,3.58,3.58,0,0,0,2.42-1.45l.1.07a3.81,3.81,0,0,0,.82,5.17ZM84.27,34.8l-.07.1a3.78,3.78,0,0,0-5.17.82l-.1-.07a3.79,3.79,0,0,0-.83-5.17l.07-.1a3.8,3.8,0,0,0,5.18-.83l.09.08a3.79,3.79,0,0,0,.83,5.17Zm.06-13.56-.13.18a6.94,6.94,0,0,0-9.46,1.51l-.18-.13a6.5,6.5,0,0,0,1.14-5,6.49,6.49,0,0,0-2.65-4.43l.13-.18a6.94,6.94,0,0,0,9.46-1.51l.18.13a6.5,6.5,0,0,0-1.14,5,6.51,6.51,0,0,0,2.65,4.43Z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1,10 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 113.48 122.88">
<!-- https://uxwing.com/wp-content/themes/uxwing/download/sport-and-awards/trophy-icon.png -->
<title>trophy</title>
<path style="fill:#f39d00;" d="M3.21,18.74H19.86q0-4,.06-8.26V0H93.05V10.49c0,2.92,0,5.66,0,8.26h17.24a3.08,3.08,0,0,1,3.07,2.93,77.67,77.67,0,0,1-.4,13.9A34,34,0,0,1,109.11,48a21.77,21.77,0,0,1-8.8,8.6A31.91,31.91,0,0,1,86.41,60C83.14,65.43,78.78,68,73.68,72.67c-6.17,4.71-10.81,8.26-7.2,19.13h5.39a7.84,7.84,0,0,1,7.82,7.82v3.15h.77A7.69,7.69,0,0,1,85.91,105h0a7.67,7.67,0,0,1,2.26,5.45v5.23a1.77,1.77,0,0,1-1.77,1.77H26.58a1.77,1.77,0,0,1-1.77-1.77v-5.23A7.66,7.66,0,0,1,27.07,105h0a7.66,7.66,0,0,1,5.44-2.26h.77V99.62a7.75,7.75,0,0,1,2.3-5.51v0a7.81,7.81,0,0,1,5.51-2.29h6.06c3.22-10.26-1-13.58-6.83-18.17A44.47,44.47,0,0,1,27.34,60,31.87,31.87,0,0,1,13,56.54a21.47,21.47,0,0,1-8.73-8.6A34.07,34.07,0,0,1,.51,35.58,78.1,78.1,0,0,1,.13,21.9v-.08a3.08,3.08,0,0,1,3.09-3.08ZM92.71,30a121.67,121.67,0,0,1-2,18,15.17,15.17,0,0,0,5-1.9,10.49,10.49,0,0,0,3.69-3.89,18,18,0,0,0,1.93-6,45.37,45.37,0,0,0,.5-6.25H92.71ZM20.12,30H12a49.78,49.78,0,0,0,.45,6.27,18.41,18.41,0,0,0,1.8,6,10.13,10.13,0,0,0,3.57,3.88A14.57,14.57,0,0,0,22.54,48a92,92,0,0,1-2.42-18Z"/>
<path style="fill:#f9c809;" d="M20.08,21.82H3.21C2.75,31.1,3.34,40,7,46.43c3.43,6.11,9.7,10.15,20.62,10.46a27.9,27.9,0,0,1-3.48-5.51c-6.56-.88-10.36-3.59-12.54-7.67S8.94,34.32,8.94,28.14a1.23,1.23,0,0,1,1.23-1.23h9.91V21.82Zm72.77,5.1h10.82a1.23,1.23,0,0,1,1.23,1.22c0,6.2-.56,11.54-2.84,15.6s-6.16,6.75-12.7,7.64a25.38,25.38,0,0,1-3.69,5.52c11-.29,17.29-4.33,20.77-10.45,3.67-6.47,4.29-15.34,3.84-24.62H92.85v5.09Z"/>
<path style="fill:#222;" d="M79.69,102.76h.77A7.69,7.69,0,0,1,85.91,105h0a7.67,7.67,0,0,1,2.26,5.45v10.63a1.77,1.77,0,0,1-1.77,1.77H26.58a1.77,1.77,0,0,1-1.77-1.77V110.48A7.66,7.66,0,0,1,27.07,105h0a7.66,7.66,0,0,1,5.44-2.26H79.69Z"/>
<path style="fill:#ead79e;" d="M70.64,108H35.72a4.22,4.22,0,0,0-3,1.25h0a4.26,4.26,0,0,0-1.25,3v5.28H81.55v-5.28a4.26,4.26,0,0,0-1.26-3,4.31,4.31,0,0,0-3-1.26Z"/>
<path style="fill:#f8b705;" d="M50.71,93h6V75.21c-22.17-7.88-24.26-35-29.55-72.57H22.53V29.41C23,39.6,24.68,47.14,27,52.91a38.19,38.19,0,0,0,8.39,12.8,68.65,68.65,0,0,0,6.71,5.78C49.11,77,54.19,81,50.71,93Z"/>
<path style="fill:#fac809;" d="M56.71,93H63c-3.88-12.71,1.68-17,9-22.55,8.05-6.14,18.5-14.12,18.5-40.35V2.64H27.16C30.58,26.92,32.66,46.81,39.67,60A39.14,39.14,0,0,0,49,71.13a29.3,29.3,0,0,0,5.47,3.17,19.1,19.1,0,0,0,2.21.74v.15l.07,0V93Z"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,6 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 111.24">
<title>risk</title>
<path d="M2.5,85l43-74.41h0a22.59,22.59,0,0,1,8-8.35,15.72,15.72,0,0,1,16,0,22.52,22.52,0,0,1,7.93,8.38l.23.44,42.08,73.07a20.91,20.91,0,0,1,3,10.84A16.44,16.44,0,0,1,121,102.4a15.45,15.45,0,0,1-5.74,6,21,21,0,0,1-11.35,2.78v0H17.7c-.21,0-.43,0-.64,0a19,19,0,0,1-7.83-1.74,15.83,15.83,0,0,1-6.65-5.72A16.26,16.26,0,0,1,0,95.18a21.66,21.66,0,0,1,2.2-9.62c.1-.2.2-.4.31-.59Z"/>
<path style="fill:#fec901;fill-rule:evenodd;" d="M9.09,88.78l43-74.38c5.22-8.94,13.49-9.2,18.81,0l42.32,73.49c4.12,6.79,2.41,15.9-9.31,15.72H17.7C9.78,103.79,5,97.44,9.09,88.78Z"/>
<path style="fill:#010101;" d="M57.55,83.15a5.47,5.47,0,0,1,5.85-1.22,5.65,5.65,0,0,1,2,1.3A5.49,5.49,0,0,1,67,86.77a5.12,5.12,0,0,1-.08,1.4,5.22,5.22,0,0,1-.42,1.34,5.51,5.51,0,0,1-5.2,3.25,5.63,5.63,0,0,1-2.26-.53,5.51,5.51,0,0,1-2.81-2.92A6,6,0,0,1,55.9,88a5.28,5.28,0,0,1,0-1.31h0a6,6,0,0,1,.56-2,4.6,4.6,0,0,1,1.14-1.56Zm8.12-10.21c-.19,4.78-8.28,4.78-8.46,0-.82-8.19-2.92-27.63-2.85-35.32.07-2.37,2-3.78,4.55-4.31a11.65,11.65,0,0,1,2.48-.25,12.54,12.54,0,0,1,2.5.25c2.59.56,4.63,2,4.63,4.43V38l-2.84,35Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,11 @@
# Psx.jpg Credits
To the Author: SOQUEROEU.
The "psx.jpg" background was edited from the one obtained from "Soqueroeu TV Backgrounds 2.0" repository: https://github.com/soqueroeu/Soqueroeu-TV-Backgrounds_V2.0/tree/main.
The material is free to use according to the agreement below:
## AGREEMENT
This pack is free. You should not pay for anything related to this graphics pack and shader preset. You may distribute and reproduce part from this content, as long as you give credit to the authors involved. You may not profit from the sale of products that contain material in this package without the author's prior permission.

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

View File

@@ -0,0 +1,7 @@
image: "psx.webp"
displayStartX: 990
displayStartY: 260
displayEndX: 2850
displayEndY: 1655
alphaBlend: false
destinationAlphaBlend: false

View File

@@ -1,2 +0,0 @@
lbsubmit.wav: https://freesound.org/people/Eponn/sounds/636656/
unlock.wav and message.wav are from https://github.com/RetroAchievements/RAInterface

View File

@@ -0,0 +1,3 @@
lbsubmit.wav: https://pixabay.com/sound-effects/notification-sound-7062/
unlock.wav: https://pixabay.com/sound-effects/notification-pluck-on-269288/
message.wav: https://pixabay.com/sound-effects/system-notification-199277/

View File

@@ -874,11 +874,11 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
</pre>
<h3>lunasvg - <a href="https://github.com/sammycage/lunasvg">https://github.com/sammycage/lunasvg</a></h3>
<h3>plutosvg - <a href="https://github.com/sammycage/plutosvg">https://github.com/sammycage/plutosvg</a></h3>
<pre>
MIT License
Copyright (c) 2020-2024 Samuel Ugochukwu <sammycageagle@gmail.com>
Copyright (c) 2020-2025 Samuel Ugochukwu <sammycageagle@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,3 +1,6 @@
set(_saved_CMAKE_MESSAGE_LOG_LEVEL ${CMAKE_MESSAGE_LOG_LEVEL})
set(CMAKE_MESSAGE_LOG_LEVEL NOTICE)
set(FMT_INSTALL OFF CACHE BOOL "")
add_subdirectory(fmt EXCLUDE_FROM_ALL)
disable_compiler_warnings_for_target(fmt)
@@ -55,3 +58,4 @@ if(WIN32)
add_subdirectory(winpixeventruntime EXCLUDE_FROM_ALL)
endif()
set(CMAKE_MESSAGE_LOG_LEVEL ${_saved_CMAKE_MESSAGE_LOG_LEVEL})

View File

@@ -419,6 +419,12 @@ typedef struct RcOverride{
*/
#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3)
/**
* Decoding only.
* Do not apply picture enhancement layers, export them instead.
*/
#define AV_CODEC_EXPORT_DATA_ENHANCEMENTS (1 << 4)
/**
* The decoder will keep a reference to the frame and may reuse it later.
*/
@@ -1175,6 +1181,10 @@ typedef struct AVCodecContext {
* this callback and filled with the extra buffers if there are more
* buffers than buf[] can hold. extended_buf will be freed in
* av_frame_unref().
* Decoders will generally initialize the whole buffer before it is output
* but it can in rare error conditions happen that uninitialized data is passed
* through. \important The buffers returned by get_buffer* should thus not contain sensitive
* data.
*
* If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call
* avcodec_default_get_buffer2() instead of providing buffers allocated by
@@ -1538,6 +1548,7 @@ typedef struct AVCodecContext {
#define FF_DCT_MMX 3
#define FF_DCT_ALTIVEC 5
#define FF_DCT_FAAN 6
#define FF_DCT_NEON 7
/**
* IDCT algorithm, see FF_IDCT_* below.
@@ -2071,7 +2082,7 @@ typedef struct AVCodecContext {
* - encoding: may be set by user before calling avcodec_open2() for
* encoder configuration. Afterwards owned and freed by the
* encoder.
* - decoding: unused
* - decoding: may be set by libavcodec in avcodec_open2().
*/
AVFrameSideData **decoded_side_data;
int nb_decoded_side_data;
@@ -2690,6 +2701,36 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
enum AVPixelFormat hw_pix_fmt,
AVBufferRef **out_frames_ref);
enum AVCodecConfig {
AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE
AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0}
AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0
AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE
AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0}
AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED
AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED
};
/**
* Retrieve a list of all supported values for a given configuration type.
*
* @param avctx An optional context to use. Values such as
* `strict_std_compliance` may affect the result. If NULL,
* default values are used.
* @param codec The codec to query, or NULL to use avctx->codec.
* @param config The configuration to query.
* @param flags Currently unused; should be set to zero.
* @param out_configs On success, set to a list of configurations, terminated
* by a config-specific terminator, or NULL if all
* possible values are supported.
* @param out_num_configs On success, set to the number of elements in
*out_configs, excluding the terminator. Optional.
*/
int avcodec_get_supported_config(const AVCodecContext *avctx,
const AVCodec *codec, enum AVCodecConfig config,
unsigned flags, const void **out_configs,
int *out_num_configs);
/**

View File

@@ -205,10 +205,19 @@ typedef struct AVCodec {
*/
int capabilities;
uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
/**
* Deprecated codec capabilities.
*/
attribute_deprecated
const AVRational *supported_framerates; ///< @deprecated use avcodec_get_supported_config()
attribute_deprecated
const enum AVPixelFormat *pix_fmts; ///< @deprecated use avcodec_get_supported_config()
attribute_deprecated
const int *supported_samplerates; ///< @deprecated use avcodec_get_supported_config()
attribute_deprecated
const enum AVSampleFormat *sample_fmts; ///< @deprecated use avcodec_get_supported_config()
const AVClass *priv_class; ///< AVClass for the private context
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN}
@@ -226,7 +235,9 @@ typedef struct AVCodec {
/**
* Array of supported channel layouts, terminated with a zeroed layout.
* @deprecated use avcodec_get_supported_config()
*/
attribute_deprecated
const AVChannelLayout *ch_layouts;
} AVCodec;

View File

@@ -543,6 +543,7 @@ enum AVCodecID {
AV_CODEC_ID_AC4,
AV_CODEC_ID_OSQ,
AV_CODEC_ID_QOA,
AV_CODEC_ID_LC3,
/* subtitle codecs */
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
@@ -588,6 +589,7 @@ enum AVCodecID {
AV_CODEC_ID_TIMED_ID3,
AV_CODEC_ID_BIN_DATA,
AV_CODEC_ID_SMPTE_2038,
AV_CODEC_ID_LCEVC,
AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it

View File

@@ -73,6 +73,7 @@
#define AV_PROFILE_AAC_HE_V2 28
#define AV_PROFILE_AAC_LD 22
#define AV_PROFILE_AAC_ELD 38
#define AV_PROFILE_AAC_USAC 41
#define AV_PROFILE_MPEG2_AAC_LOW 128
#define AV_PROFILE_MPEG2_AAC_HE 131
@@ -159,6 +160,7 @@
#define AV_PROFILE_HEVC_MAIN_10 2
#define AV_PROFILE_HEVC_MAIN_STILL_PICTURE 3
#define AV_PROFILE_HEVC_REXT 4
#define AV_PROFILE_HEVC_MULTIVIEW_MAIN 6
#define AV_PROFILE_HEVC_SCC 9
#define AV_PROFILE_VVC_MAIN_10 1

View File

@@ -59,10 +59,6 @@ enum AVPacketSideDataType {
* An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
* @code
* u32le param_flags
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
* s32le channel_count
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
* u64le channel_layout
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
* s32le sample_rate
* if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
@@ -330,6 +326,25 @@ enum AVPacketSideDataType {
*/
AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,
/**
* The number of pixels to discard from the top/bottom/left/right border of the
* decoded frame to obtain the sub-rectangle intended for presentation.
*
* @code
* u32le crop_top
* u32le crop_bottom
* u32le crop_left
* u32le crop_right
* @endcode
*/
AV_PKT_DATA_FRAME_CROPPING,
/**
* Raw LCEVC payload data, as a uint8_t array, with NAL emulation
* bytes intact.
*/
AV_PKT_DATA_LCEVC,
/**
* The number of side data types.
* This is not part of the public API/ABI in the sense that it may
@@ -341,7 +356,9 @@ enum AVPacketSideDataType {
AV_PKT_DATA_NB
};
#if FF_API_QUALITY_FACTOR
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
#endif
/**
* This structure stores auxiliary information for decoding, presenting, or

View File

@@ -29,8 +29,8 @@
#include "version_major.h"
#define LIBAVCODEC_VERSION_MINOR 3
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_MINOR 19
#define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \

View File

@@ -47,5 +47,6 @@
#define FF_API_AVCODEC_CLOSE (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_BUFFER_MIN_SIZE (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_VDPAU_ALLOC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 62)
#define FF_API_QUALITY_FACTOR (LIBAVCODEC_VERSION_MAJOR < 62)
#endif /* AVCODEC_VERSION_MAJOR_H */

View File

@@ -29,7 +29,7 @@
#include "version_major.h"
#define LIBAVDEVICE_VERSION_MINOR 1
#define LIBAVDEVICE_VERSION_MINOR 3
#define LIBAVDEVICE_VERSION_MICRO 100
#define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \

View File

@@ -98,6 +98,41 @@ const char *avfilter_pad_get_name(const AVFilterPad *pads, int pad_idx);
*/
enum AVMediaType avfilter_pad_get_type(const AVFilterPad *pads, int pad_idx);
/**
* Lists of formats / etc. supported by an end of a link.
*
* This structure is directly part of AVFilterLink, in two copies:
* one for the source filter, one for the destination filter.
* These lists are used for negotiating the format to actually be used,
* which will be loaded into the format and channel_layout members of
* AVFilterLink, when chosen.
*/
typedef struct AVFilterFormatsConfig {
/**
* List of supported formats (pixel or sample).
*/
AVFilterFormats *formats;
/**
* Lists of supported sample rates, only for audio.
*/
AVFilterFormats *samplerates;
/**
* Lists of supported channel layouts, only for audio.
*/
AVFilterChannelLayouts *channel_layouts;
/**
* Lists of supported YUV color metadata, only for YUV video.
*/
AVFilterFormats *color_spaces; ///< AVColorSpace
AVFilterFormats *color_ranges; ///< AVColorRange
} AVFilterFormatsConfig;
/**
* The number of the filter inputs is not determined just by AVFilter.inputs.
* The filter might add additional inputs during initialization depending on the
@@ -324,6 +359,21 @@ typedef struct AVFilter {
* AVERROR code otherwise
*/
int (*query_func)(AVFilterContext *);
/**
* Same as query_func(), except this function writes the results into
* provided arrays.
*
* @param cfg_in array of input format configurations with as many
* members as the filters has inputs (NULL when there are
* no inputs);
* @param cfg_out array of output format configurations with as many
* members as the filters has outputs (NULL when there
* are no outputs);
*/
int (*query_func2)(const AVFilterContext *,
struct AVFilterFormatsConfig **cfg_in,
struct AVFilterFormatsConfig **cfg_out);
/**
* A pointer to an array of admissible pixel formats delimited
* by AV_PIX_FMT_NONE. The generic code will use this list
@@ -492,41 +542,6 @@ struct AVFilterContext {
int extra_hw_frames;
};
/**
* Lists of formats / etc. supported by an end of a link.
*
* This structure is directly part of AVFilterLink, in two copies:
* one for the source filter, one for the destination filter.
* These lists are used for negotiating the format to actually be used,
* which will be loaded into the format and channel_layout members of
* AVFilterLink, when chosen.
*/
typedef struct AVFilterFormatsConfig {
/**
* List of supported formats (pixel or sample).
*/
AVFilterFormats *formats;
/**
* Lists of supported sample rates, only for audio.
*/
AVFilterFormats *samplerates;
/**
* Lists of supported channel layouts, only for audio.
*/
AVFilterChannelLayouts *channel_layouts;
/**
* Lists of supported YUV color metadata, only for YUV video.
*/
AVFilterFormats *color_spaces; ///< AVColorSpace
AVFilterFormats *color_ranges; ///< AVColorRange
} AVFilterFormatsConfig;
/**
* A link between two filters. This contains pointers to the source and
* destination filters between which this link exists, and the indexes of
@@ -594,74 +609,6 @@ struct AVFilterLink {
* Lists of supported formats / etc. supported by the output filter.
*/
AVFilterFormatsConfig outcfg;
/**
* Graph the filter belongs to.
*/
struct AVFilterGraph *graph;
/**
* Current timestamp of the link, as defined by the most recent
* frame(s), in link time_base units.
*/
int64_t current_pts;
/**
* Current timestamp of the link, as defined by the most recent
* frame(s), in AV_TIME_BASE units.
*/
int64_t current_pts_us;
/**
* Frame rate of the stream on the link, or 1/0 if unknown or variable;
* if left to 0/0, will be automatically copied from the first input
* of the source filter if it exists.
*
* Sources should set it to the best estimation of the real frame rate.
* If the source frame rate is unknown or variable, set this to 1/0.
* Filters should update it if necessary depending on their function.
* Sinks can use it to set a default output frame rate.
* It is similar to the r_frame_rate field in AVStream.
*/
AVRational frame_rate;
/**
* Minimum number of samples to filter at once. If filter_frame() is
* called with fewer samples, it will accumulate them in fifo.
* This field and the related ones must not be changed after filtering
* has started.
* If 0, all related fields are ignored.
*/
int min_samples;
/**
* Maximum number of samples to filter at once. If filter_frame() is
* called with more samples, it will split them.
*/
int max_samples;
/**
* Number of past frames sent through the link.
*/
int64_t frame_count_in, frame_count_out;
/**
* Number of past samples sent through the link.
*/
int64_t sample_count_in, sample_count_out;
/**
* True if a frame is currently wanted on the output of this filter.
* Set when ff_request_frame() is called by the output,
* cleared when a frame is filtered.
*/
int frame_wanted_out;
/**
* For hwaccel pixel formats, this should be a reference to the
* AVHWFramesContext describing the frames.
*/
AVBufferRef *hw_frames_ctx;
};
/**

View File

@@ -31,7 +31,7 @@
#include "version_major.h"
#define LIBAVFILTER_VERSION_MINOR 1
#define LIBAVFILTER_VERSION_MINOR 4
#define LIBAVFILTER_VERSION_MICRO 100

View File

@@ -713,6 +713,11 @@ typedef struct AVIndexEntry {
* The video stream contains still images.
*/
#define AV_DISPOSITION_STILL_IMAGE (1 << 20)
/**
* The video stream contains multiple layers, e.g. stereoscopic views (cf. H.264
* Annex G/H, or HEVC Annex F).
*/
#define AV_DISPOSITION_MULTILAYER (1 << 21)
/**
* @return The AV_DISPOSITION_* flag corresponding to disp or a negative error
@@ -1079,11 +1084,37 @@ typedef struct AVStreamGroupTileGrid {
int height;
} AVStreamGroupTileGrid;
/**
* AVStreamGroupLCEVC is meant to define the relation between video streams
* and a data stream containing LCEVC enhancement layer NALUs.
*
* No more than one stream of @ref AVCodecParameters.codec_type "codec_type"
* AVMEDIA_TYPE_DATA shall be present, and it must be of
* @ref AVCodecParameters.codec_id "codec_id" AV_CODEC_ID_LCEVC.
*/
typedef struct AVStreamGroupLCEVC {
const AVClass *av_class;
/**
* Index of the LCEVC data stream in AVStreamGroup.
*/
unsigned int lcevc_index;
/**
* Width of the final stream for presentation.
*/
int width;
/**
* Height of the final image for presentation.
*/
int height;
} AVStreamGroupLCEVC;
enum AVStreamGroupParamsType {
AV_STREAM_GROUP_PARAMS_NONE,
AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT,
AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION,
AV_STREAM_GROUP_PARAMS_TILE_GRID,
AV_STREAM_GROUP_PARAMS_LCEVC,
};
struct AVIAMFAudioElement;
@@ -1125,6 +1156,7 @@ typedef struct AVStreamGroup {
struct AVIAMFAudioElement *iamf_audio_element;
struct AVIAMFMixPresentation *iamf_mix_presentation;
struct AVStreamGroupTileGrid *tile_grid;
struct AVStreamGroupLCEVC *lcevc;
} params;
/**
@@ -1439,7 +1471,7 @@ typedef struct AVFormatContext {
*
* @note this is \e not used for determining the \ref AVInputFormat
* "input format"
* @sa format_probesize
* @see format_probesize
*/
int64_t probesize;
@@ -1667,6 +1699,8 @@ typedef struct AVFormatContext {
* Skip duration calcuation in estimate_timings_from_pts.
* - encoding: unused
* - decoding: set by user
*
* @see duration_probesize
*/
int skip_estimate_duration_from_pts;
@@ -1729,7 +1763,7 @@ typedef struct AVFormatContext {
*
* Demuxing only, set by the caller before avformat_open_input().
*
* @sa probesize
* @see probesize
*/
int format_probesize;
@@ -1870,6 +1904,16 @@ typedef struct AVFormatContext {
* @return 0 on success, a negative AVERROR code on failure
*/
int (*io_close2)(struct AVFormatContext *s, AVIOContext *pb);
/**
* Maximum number of bytes read from input in order to determine stream durations
* when using estimate_timings_from_pts in avformat_find_stream_info().
* Demuxing only, set by the caller before avformat_find_stream_info().
* Can be set to 0 to let avformat choose using a heuristic.
*
* @see skip_estimate_duration_from_pts
*/
int64_t duration_probesize;
} AVFormatContext;
/**
@@ -3030,6 +3074,7 @@ int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st,
int avformat_queue_attached_pictures(AVFormatContext *s);
#if FF_API_INTERNAL_TIMING
enum AVTimebaseSource {
AVFMT_TBCF_AUTO = -1,
AVFMT_TBCF_DECODER,
@@ -3040,25 +3085,20 @@ enum AVTimebaseSource {
};
/**
* Transfer internal timing information from one stream to another.
*
* This function is useful when doing stream copy.
*
* @param ofmt target output format for ost
* @param ost output stream which needs timings copy and adjustments
* @param ist reference input stream to copy timings from
* @param copy_tb define from where the stream codec timebase needs to be imported
* @deprecated do not call this function
*/
attribute_deprecated
int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt,
AVStream *ost, const AVStream *ist,
enum AVTimebaseSource copy_tb);
/**
* Get the internal codec timebase from a stream.
*
* @param st input stream to extract the timebase from
* @deprecated do not call this function
*/
attribute_deprecated
AVRational av_stream_get_codec_timebase(const AVStream *st);
#endif
/**
* @}

View File

@@ -31,7 +31,7 @@
#include "version_major.h"
#define LIBAVFORMAT_VERSION_MINOR 1
#define LIBAVFORMAT_VERSION_MINOR 7
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \

View File

@@ -47,6 +47,7 @@
#define FF_API_AVSTREAM_SIDE_DATA (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_GET_DUR_ESTIMATE_METHOD (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_INTERNAL_TIMING (LIBAVFORMAT_VERSION_MAJOR < 62)
#define FF_API_R_FRAME_RATE 1

View File

@@ -34,16 +34,10 @@
#include "config.h"
#if ARCH_AARCH64
# include "aarch64/bswap.h"
#elif ARCH_ARM
#if ARCH_ARM
# include "arm/bswap.h"
#elif ARCH_AVR32
# include "avr32/bswap.h"
#elif ARCH_RISCV
# include "riscv/bswap.h"
#elif ARCH_SH4
# include "sh4/bswap.h"
#elif ARCH_X86
# include "x86/bswap.h"
#endif

View File

@@ -79,6 +79,10 @@ enum AVChannel {
AV_CHAN_BOTTOM_FRONT_CENTER,
AV_CHAN_BOTTOM_FRONT_LEFT,
AV_CHAN_BOTTOM_FRONT_RIGHT,
AV_CHAN_SIDE_SURROUND_LEFT, ///< +90 degrees, Lss, SiL
AV_CHAN_SIDE_SURROUND_RIGHT, ///< -90 degrees, Rss, SiR
AV_CHAN_TOP_SURROUND_LEFT, ///< +110 degrees, Lvs, TpLS
AV_CHAN_TOP_SURROUND_RIGHT, ///< -110 degrees, Rvs, TpRS
/** Channel is empty can be safely skipped. */
AV_CHAN_UNUSED = 0x200,
@@ -195,6 +199,10 @@ enum AVChannelOrder {
#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER )
#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT )
#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT )
#define AV_CH_SIDE_SURROUND_LEFT (1ULL << AV_CHAN_SIDE_SURROUND_LEFT )
#define AV_CH_SIDE_SURROUND_RIGHT (1ULL << AV_CHAN_SIDE_SURROUND_RIGHT )
#define AV_CH_TOP_SURROUND_LEFT (1ULL << AV_CHAN_TOP_SURROUND_LEFT )
#define AV_CH_TOP_SURROUND_RIGHT (1ULL << AV_CHAN_TOP_SURROUND_RIGHT )
/**
* @}
@@ -679,6 +687,16 @@ int av_channel_layout_check(const AVChannelLayout *channel_layout);
*/
int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1);
/**
* Return the order if the layout is n-th order standard-order ambisonic.
* The presence of optional extra non-diegetic channels at the end is not taken
* into account.
*
* @param channel_layout input channel layout
* @return the order of the layout, a negative error code otherwise.
*/
int av_channel_layout_ambisonic_order(const AVChannelLayout *channel_layout);
/**
* The conversion must be lossless.
*/

View File

@@ -42,12 +42,14 @@
#include "attributes.h"
#include "error.h"
#include "macros.h"
#include "mem.h"
#include "version.h"
#ifdef HAVE_AV_CONFIG_H
# include "config.h"
# include "intmath.h"
# include "internal.h"
#else
# include "mem.h"
#endif /* HAVE_AV_CONFIG_H */
//rounded division & shift
@@ -121,9 +123,6 @@
#ifndef av_clip_uintp2
# define av_clip_uintp2 av_clip_uintp2_c
#endif
#ifndef av_mod_uintp2
# define av_mod_uintp2 av_mod_uintp2_c
#endif
#ifndef av_sat_add32
# define av_sat_add32 av_sat_add32_c
#endif
@@ -148,6 +147,9 @@
#ifndef av_clipd
# define av_clipd av_clipd_c
#endif
#ifndef av_zero_extend
# define av_zero_extend av_zero_extend_c
#endif
#ifndef av_popcount
# define av_popcount av_popcount_c
#endif
@@ -251,8 +253,8 @@ static av_always_inline av_const int16_t av_clip_int16_c(int a)
*/
static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
{
if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
else return (int32_t)a;
if ((a+UINT64_C(0x80000000)) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
else return (int32_t)a;
}
/**
@@ -263,7 +265,7 @@ static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
*/
static av_always_inline av_const int av_clip_intp2_c(int a, int p)
{
if (((unsigned)a + (1 << p)) & ~((2 << p) - 1))
if (((unsigned)a + (1U << p)) & ~((2U << p) - 1))
return (a >> 31) ^ ((1 << p) - 1);
else
return a;
@@ -277,21 +279,35 @@ static av_always_inline av_const int av_clip_intp2_c(int a, int p)
*/
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
{
if (a & ~((1<<p) - 1)) return (~a) >> 31 & ((1<<p) - 1);
else return a;
if (a & ~((1U<<p) - 1)) return (~a) >> 31 & ((1U<<p) - 1);
else return a;
}
/**
* Clear high bits from an unsigned integer starting with specific bit position
* @param a value to clip
* @param p bit position to clip at
* @param p bit position to clip at. Must be between 0 and 31.
* @return clipped value
*/
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
static av_always_inline av_const unsigned av_zero_extend_c(unsigned a, unsigned p)
{
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
if (p > 31) abort();
#endif
return a & ((1U << p) - 1);
}
#if FF_API_MOD_UINTP2
#ifndef av_mod_uintp2
# define av_mod_uintp2 av_mod_uintp2_c
#endif
attribute_deprecated
static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
{
return av_zero_extend_c(a, p);
}
#endif
/**
* Add two signed 32-bit values with saturation.
*

View File

@@ -22,6 +22,7 @@
#define AVUTIL_CPU_H
#include <stddef.h>
#include "version.h"
#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
@@ -82,14 +83,21 @@
// RISC-V extensions
#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank)
#if FF_API_RISCV_FD_ZBA
#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP)
#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP)
#endif
#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */
#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */
#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */
#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's
#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations
#if FF_API_RISCV_FD_ZBA
#define AV_CPU_FLAG_RVB_ADDR (1 << 8) ///< Address bit-manipulations
#endif
#define AV_CPU_FLAG_RV_ZVBB (1 << 9) ///< Vector basic bit-manipulations
#define AV_CPU_FLAG_RV_MISALIGNED (1 <<10) ///< Fast misaligned accesses
#define AV_CPU_FLAG_RVB (1 <<11) ///< B (bit manipulations)
/**
* Return the flags which specify extensions supported by the CPU.

View File

@@ -29,7 +29,9 @@
#include <stdint.h>
#include <stddef.h>
#include "rational.h"
#include "csp.h"
/*
* DOVI configuration
@@ -44,6 +46,7 @@
* uint8_t el_present_flag
* uint8_t bl_present_flag
* uint8_t dv_bl_signal_compatibility_id
* uint8_t dv_md_compression, the compression method in use
* @endcode
*
* @note The struct must be allocated with av_dovi_alloc() and
@@ -58,8 +61,16 @@ typedef struct AVDOVIDecoderConfigurationRecord {
uint8_t el_present_flag;
uint8_t bl_present_flag;
uint8_t dv_bl_signal_compatibility_id;
uint8_t dv_md_compression;
} AVDOVIDecoderConfigurationRecord;
enum AVDOVICompression {
AV_DOVI_COMPRESSION_NONE = 0,
AV_DOVI_COMPRESSION_LIMITED = 1,
AV_DOVI_COMPRESSION_RESERVED = 2,
AV_DOVI_COMPRESSION_EXTENDED = 3,
};
/**
* Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its
* fields to default values.
@@ -89,6 +100,8 @@ typedef struct AVDOVIRpuDataHeader {
uint8_t spatial_resampling_filter_flag;
uint8_t el_spatial_resampling_filter_flag;
uint8_t disable_residual_flag;
uint8_t ext_mapping_idc_0_4; /* extended base layer inverse mapping indicator */
uint8_t ext_mapping_idc_5_7; /* reserved */
} AVDOVIRpuDataHeader;
enum AVDOVIMappingMethod {
@@ -147,6 +160,7 @@ typedef struct AVDOVIDataMapping {
uint32_t num_x_partitions;
uint32_t num_y_partitions;
AVDOVINLQParams nlq[3]; /* per component */
uint16_t nlq_pivots[2];
} AVDOVIDataMapping;
/**
@@ -186,6 +200,132 @@ typedef struct AVDOVIColorMetadata {
uint16_t source_diagonal;
} AVDOVIColorMetadata;
typedef struct AVDOVIDmLevel1 {
/* Per-frame brightness metadata */
uint16_t min_pq;
uint16_t max_pq;
uint16_t avg_pq;
} AVDOVIDmLevel1;
typedef struct AVDOVIDmLevel2 {
/* Usually derived from level 8 (at different levels) */
uint16_t target_max_pq;
uint16_t trim_slope;
uint16_t trim_offset;
uint16_t trim_power;
uint16_t trim_chroma_weight;
uint16_t trim_saturation_gain;
int16_t ms_weight;
} AVDOVIDmLevel2;
typedef struct AVDOVIDmLevel3 {
uint16_t min_pq_offset;
uint16_t max_pq_offset;
uint16_t avg_pq_offset;
} AVDOVIDmLevel3;
typedef struct AVDOVIDmLevel4 {
uint16_t anchor_pq;
uint16_t anchor_power;
} AVDOVIDmLevel4;
typedef struct AVDOVIDmLevel5 {
/* Active area definition */
uint16_t left_offset;
uint16_t right_offset;
uint16_t top_offset;
uint16_t bottom_offset;
} AVDOVIDmLevel5;
typedef struct AVDOVIDmLevel6 {
/* Static HDR10 metadata */
uint16_t max_luminance;
uint16_t min_luminance;
uint16_t max_cll;
uint16_t max_fall;
} AVDOVIDmLevel6;
typedef struct AVDOVIDmLevel8 {
/* Extended version of level 2 */
uint8_t target_display_index;
uint16_t trim_slope;
uint16_t trim_offset;
uint16_t trim_power;
uint16_t trim_chroma_weight;
uint16_t trim_saturation_gain;
uint16_t ms_weight;
uint16_t target_mid_contrast;
uint16_t clip_trim;
uint8_t saturation_vector_field[6];
uint8_t hue_vector_field[6];
} AVDOVIDmLevel8;
typedef struct AVDOVIDmLevel9 {
/* Source display characteristics */
uint8_t source_primary_index;
AVColorPrimariesDesc source_display_primaries;
} AVDOVIDmLevel9;
typedef struct AVDOVIDmLevel10 {
/* Target display characteristics */
uint8_t target_display_index;
uint16_t target_max_pq;
uint16_t target_min_pq;
uint8_t target_primary_index;
AVColorPrimariesDesc target_display_primaries;
} AVDOVIDmLevel10;
typedef struct AVDOVIDmLevel11 {
uint8_t content_type;
uint8_t whitepoint;
uint8_t reference_mode_flag;
uint8_t sharpness;
uint8_t noise_reduction;
uint8_t mpeg_noise_reduction;
uint8_t frame_rate_conversion;
uint8_t brightness;
uint8_t color;
} AVDOVIDmLevel11;
typedef struct AVDOVIDmLevel254 {
/* DMv2 info block, always present in samples with DMv2 metadata */
uint8_t dm_mode;
uint8_t dm_version_index;
} AVDOVIDmLevel254;
typedef struct AVDOVIDmLevel255 {
/* Debug block, not really used in samples */
uint8_t dm_run_mode;
uint8_t dm_run_version;
uint8_t dm_debug[4];
} AVDOVIDmLevel255;
/**
* Dolby Vision metadata extension block. Dynamic extension blocks may change
* from frame to frame, while static blocks are constant throughout the entire
* sequence.
*
* @note sizeof(AVDOVIDmData) is not part of the public API.
*/
typedef struct AVDOVIDmData {
uint8_t level; /* [1, 255] */
union {
AVDOVIDmLevel1 l1; /* dynamic */
AVDOVIDmLevel2 l2; /* dynamic, may appear multiple times */
AVDOVIDmLevel3 l3; /* dynamic */
AVDOVIDmLevel4 l4; /* dynamic */
AVDOVIDmLevel5 l5; /* dynamic */
AVDOVIDmLevel6 l6; /* static */
/* level 7 is currently unused */
AVDOVIDmLevel8 l8; /* dynamic, may appear multiple times */
AVDOVIDmLevel9 l9; /* dynamic */
AVDOVIDmLevel10 l10; /* static, may appear multiple times */
AVDOVIDmLevel11 l11; /* dynamic */
AVDOVIDmLevel254 l254; /* static */
AVDOVIDmLevel255 l255; /* static */
};
} AVDOVIDmData;
/**
* Combined struct representing a combination of header, mapping and color
* metadata, for attaching to frames as side data.
@@ -202,6 +342,13 @@ typedef struct AVDOVIMetadata {
size_t header_offset; /* AVDOVIRpuDataHeader */
size_t mapping_offset; /* AVDOVIDataMapping */
size_t color_offset; /* AVDOVIColorMetadata */
size_t ext_block_offset; /* offset to start of ext blocks array */
size_t ext_block_size; /* size per element */
int num_ext_blocks; /* number of extension blocks */
/* static limit on num_ext_blocks, derived from bitstream limitations */
#define AV_DOVI_MAX_EXT_BLOCKS 32
} AVDOVIMetadata;
static av_always_inline AVDOVIRpuDataHeader *
@@ -222,6 +369,19 @@ av_dovi_get_color(const AVDOVIMetadata *data)
return (AVDOVIColorMetadata *)((uint8_t *) data + data->color_offset);
}
static av_always_inline AVDOVIDmData *
av_dovi_get_ext(const AVDOVIMetadata *data, int index)
{
return (AVDOVIDmData *)((uint8_t *) data + data->ext_block_offset +
data->ext_block_size * index);
}
/**
* Find an extension block with a given level, or NULL. In the case of
* multiple extension blocks, only the first is returned.
*/
AVDOVIDmData *av_dovi_find_level(const AVDOVIMetadata *data, uint8_t level);
/**
* Allocate an AVDOVIMetadata structure and initialize its
* fields to default values.

View File

@@ -79,6 +79,7 @@
#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8,'4','0','1')
#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8,'4','0','3')
#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8,'4','0','4')
#define AVERROR_HTTP_TOO_MANY_REQUESTS FFERRTAG(0xF8,'4','2','9')
#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8,'4','X','X')
#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8,'5','X','X')

View File

@@ -46,7 +46,7 @@ typedef struct AVTaskCallbacks {
/**
* Alloc executor
* @param callbacks callback structure for executor
* @param thread_count worker thread number
* @param thread_count worker thread number, 0 for run on caller's thread directly
* @return return the executor
*/
AVExecutor* av_executor_alloc(const AVTaskCallbacks *callbacks, int thread_count);

View File

@@ -1,5 +1,5 @@
/* Automatically generated by version.sh, do not manually edit! */
#ifndef AVUTIL_FFVERSION_H
#define AVUTIL_FFVERSION_H
#define FFMPEG_VERSION "7.0.2"
#define FFMPEG_VERSION "7.1.1"
#endif /* AVUTIL_FFVERSION_H */

View File

@@ -26,10 +26,6 @@
#define AVUTIL_FIFO_H
#include <stddef.h>
#include <stdint.h>
#include "attributes.h"
#include "version.h"
/**
* @defgroup lavu_fifo AVFifo

View File

@@ -22,7 +22,6 @@
#include <stddef.h>
#include <stdint.h>
#include "version.h"
#include "attributes.h"
/**

View File

@@ -228,6 +228,21 @@ enum AVFrameSideDataType {
* encoding.
*/
AV_FRAME_DATA_VIDEO_HINT,
/**
* Raw LCEVC payload data, as a uint8_t array, with NAL emulation
* bytes intact.
*/
AV_FRAME_DATA_LCEVC,
/**
* This side data must be associated with a video frame.
* The presence of this side data indicates that the video stream is
* composed of multiple views (e.g. stereoscopic 3D content,
* cf. H.264 Annex H or H.265 Annex G).
* The data is an int storing the view ID.
*/
AV_FRAME_DATA_VIEW_ID,
};
enum AVActiveFormatDescription {
@@ -255,6 +270,37 @@ typedef struct AVFrameSideData {
AVBufferRef *buf;
} AVFrameSideData;
enum AVSideDataProps {
/**
* The side data type can be used in stream-global structures.
* Side data types without this property are only meaningful on per-frame
* basis.
*/
AV_SIDE_DATA_PROP_GLOBAL = (1 << 0),
/**
* Multiple instances of this side data type can be meaningfully present in
* a single side data array.
*/
AV_SIDE_DATA_PROP_MULTI = (1 << 1),
};
/**
* This struct describes the properties of a side data type. Its instance
* corresponding to a given type can be obtained from av_frame_side_data_desc().
*/
typedef struct AVSideDataDescriptor {
/**
* Human-readable side data description.
*/
const char *name;
/**
* Side data property flags, a combination of AVSideDataProps values.
*/
unsigned props;
} AVSideDataDescriptor;
/**
* Structure describing a single Region Of Interest.
*
@@ -338,8 +384,7 @@ typedef struct AVRegionOfInterest {
* to the end with a minor bump.
*
* Fields can be accessed through AVOptions, the name string used, matches the
* C structure field name for fields accessible through AVOptions. The AVClass
* for AVFrame can be obtained from avcodec_get_frame_class()
* C structure field name for fields accessible through AVOptions.
*/
typedef struct AVFrame {
#define AV_NUM_DATA_POINTERS 8
@@ -992,6 +1037,12 @@ int av_frame_apply_cropping(AVFrame *frame, int flags);
*/
const char *av_frame_side_data_name(enum AVFrameSideDataType type);
/**
* @return side data descriptor corresponding to a given side data type, NULL
* when not available.
*/
const AVSideDataDescriptor *av_frame_side_data_desc(enum AVFrameSideDataType type);
/**
* Free all side data entries and their contents, then zeroes out the
* values which the pointers are pointing to.
@@ -1003,7 +1054,15 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type);
*/
void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd);
/**
* Remove existing entries before adding new ones.
*/
#define AV_FRAME_SIDE_DATA_FLAG_UNIQUE (1 << 0)
/**
* Don't add a new entry if another of the same type exists.
* Applies only for side data types without the AV_SIDE_DATA_PROP_MULTI prop.
*/
#define AV_FRAME_SIDE_DATA_FLAG_REPLACE (1 << 1)
/**
* Add new side data entry to an array.
@@ -1016,15 +1075,43 @@ void av_frame_side_data_free(AVFrameSideData ***sd, int *nb_sd);
* @param size size of the side data
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
*
* @return newly added side data on success, NULL on error. In case of
* AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of matching
* AVFrameSideDataType will be removed before the addition is
* attempted.
* @return newly added side data on success, NULL on error.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
* matching AVFrameSideDataType will be removed before the addition
* is attempted.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
* entry of the same type already exists, it will be replaced instead.
*/
AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type,
size_t size, unsigned int flags);
/**
* Add a new side data entry to an array from an existing AVBufferRef.
*
* @param sd pointer to array of side data to which to add another entry,
* or to NULL in order to start a new array.
* @param nb_sd pointer to an integer containing the number of entries in
* the array.
* @param type type of the added side data
* @param buf Pointer to AVBufferRef to add to the array. On success,
* the function takes ownership of the AVBufferRef and *buf is
* set to NULL, unless AV_FRAME_SIDE_DATA_FLAG_NEW_REF is set
* in which case the ownership will remain with the caller.
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
*
* @return newly added side data on success, NULL on error.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
* matching AVFrameSideDataType will be removed before the addition
* is attempted.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
* entry of the same type already exists, it will be replaced instead.
*
*/
AVFrameSideData *av_frame_side_data_add(AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type,
AVBufferRef **buf, unsigned int flags);
/**
* Add a new side data entry to an array based on existing side data, taking
* a reference towards the contained AVBufferRef.
@@ -1037,10 +1124,12 @@ AVFrameSideData *av_frame_side_data_new(AVFrameSideData ***sd, int *nb_sd,
* for the buffer.
* @param flags Some combination of AV_FRAME_SIDE_DATA_FLAG_* flags, or 0.
*
* @return negative error code on failure, >=0 on success. In case of
* AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of matching
* AVFrameSideDataType will be removed before the addition is
* attempted.
* @return negative error code on failure, >=0 on success.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_UNIQUE being set, entries of
* matching AVFrameSideDataType will be removed before the addition
* is attempted.
* @note In case of AV_FRAME_SIDE_DATA_FLAG_REPLACE being set, if an
* entry of the same type already exists, it will be replaced instead.
*/
int av_frame_side_data_clone(AVFrameSideData ***sd, int *nb_sd,
const AVFrameSideData *src, unsigned int flags);
@@ -1074,6 +1163,11 @@ const AVFrameSideData *av_frame_side_data_get(AVFrameSideData * const *sd,
nb_sd, type);
}
/**
* Remove and free all side data instances of the given type from an array.
*/
void av_frame_side_data_remove(AVFrameSideData ***sd, int *nb_sd,
enum AVFrameSideDataType type);
/**
* @}
*/

View File

@@ -129,6 +129,14 @@ typedef struct AVD3D12VAFramesContext {
* If unset, will be automatically set.
*/
DXGI_FORMAT format;
/**
* Options for working with resources.
* If unset, this will be D3D12_RESOURCE_FLAG_NONE.
*
* @see https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12-d3d12_resource_flags
*/
D3D12_RESOURCE_FLAGS flags;
} AVD3D12VAFramesContext;
#endif /* AVUTIL_HWCONTEXT_D3D12VA_H */

View File

@@ -25,8 +25,8 @@
* @file
* An API-specific header for AV_HWDEVICE_TYPE_QSV.
*
* This API does not support dynamic frame pools. AVHWFramesContext.pool must
* contain AVBufferRefs whose data pointer points to an mfxFrameSurface1 struct.
* AVHWFramesContext.pool must contain AVBufferRefs whose data pointer points
* to a mfxFrameSurface1 struct.
*/
/**
@@ -51,13 +51,36 @@ typedef struct AVQSVDeviceContext {
* This struct is allocated as AVHWFramesContext.hwctx
*/
typedef struct AVQSVFramesContext {
/**
* A pointer to a mfxFrameSurface1 struct
*
* It is available when nb_surfaces is non-zero.
*/
mfxFrameSurface1 *surfaces;
/**
* Number of frames in the pool
*
* It is 0 for dynamic frame pools or AVHWFramesContext.initial_pool_size
* for fixed frame pools.
*
* Note only oneVPL GPU runtime 2.9+ can support dynamic frame pools
* on d3d11va or vaapi
*/
int nb_surfaces;
/**
* A combination of MFX_MEMTYPE_* describing the frame pool.
*/
int frame_type;
/**
* A pointer to a mfxFrameInfo struct
*
* It is available when nb_surfaces is 0, all buffers allocated from the
* pool have the same mfxFrameInfo.
*/
mfxFrameInfo *info;
} AVQSVFramesContext;
#endif /* AVUTIL_HWCONTEXT_QSV_H */

View File

@@ -90,8 +90,15 @@ CFStringRef av_map_videotoolbox_color_primaries_from_av(enum AVColorPrimaries pr
CFStringRef av_map_videotoolbox_color_trc_from_av(enum AVColorTransferCharacteristic trc);
/**
* Update a CVPixelBufferRef's metadata to based on an AVFrame.
* Returns 0 if no known equivalent was found.
* Set CVPixelBufferRef's metadata based on an AVFrame.
*
* Sets/unsets the CVPixelBuffer attachments to match as closely as possible the
* AVFrame metadata. To prevent inconsistent attachments, the attachments for properties
* that could not be matched or are unspecified in the given AVFrame are unset. So if
* any attachments already covered by AVFrame metadata need to be set to a specific
* value, this should happen after calling this function.
*
* Returns < 0 in case of an error.
*/
int av_vt_pixbuf_set_attachments(void *log_ctx,
CVPixelBufferRef pixbuf, const struct AVFrame *src);

View File

@@ -26,9 +26,24 @@
#include "pixfmt.h"
#include "frame.h"
#include "hwcontext.h"
typedef struct AVVkFrame AVVkFrame;
typedef struct AVVulkanDeviceQueueFamily {
/* Queue family index */
int idx;
/* Number of queues in the queue family in use */
int num;
/* Queue family capabilities. Must be non-zero.
* Flags may be removed to indicate the queue family may not be used
* for a given purpose. */
VkQueueFlagBits flags;
/* Vulkan implementations are allowed to list multiple video queues
* which differ in what they can encode or decode. */
VkVideoCodecOperationFlagBitsKHR video_caps;
} AVVulkanDeviceQueueFamily;
/**
* @file
* API-specific header for AV_HWDEVICE_TYPE_VULKAN.
@@ -48,9 +63,8 @@ typedef struct AVVulkanDeviceContext {
const VkAllocationCallbacks *alloc;
/**
* Pointer to the instance-provided vkGetInstanceProcAddr loading function.
* If NULL, will pick either libvulkan or libvolk, depending on libavutil's
* compilation settings, and set this field.
* Pointer to a vkGetInstanceProcAddr loading function.
* If unset, will dynamically load and use libvulkan.
*/
PFN_vkGetInstanceProcAddr get_proc_addr;
@@ -98,6 +112,7 @@ typedef struct AVVulkanDeviceContext {
const char * const *enabled_dev_extensions;
int nb_enabled_dev_extensions;
#if FF_API_VULKAN_FIXED_QUEUES
/**
* Queue family index for graphics operations, and the number of queues
* enabled for it. If unavaiable, will be set to -1. Not required.
@@ -105,21 +120,27 @@ typedef struct AVVulkanDeviceContext {
* queue family, or pick the one with the least unrelated flags set.
* Queue indices here may overlap if a queue has to share capabilities.
*/
attribute_deprecated
int queue_family_index;
attribute_deprecated
int nb_graphics_queues;
/**
* Queue family index for transfer operations and the number of queues
* enabled. Required.
*/
attribute_deprecated
int queue_family_tx_index;
attribute_deprecated
int nb_tx_queues;
/**
* Queue family index for compute operations and the number of queues
* enabled. Required.
*/
attribute_deprecated
int queue_family_comp_index;
attribute_deprecated
int nb_comp_queues;
/**
@@ -127,7 +148,9 @@ typedef struct AVVulkanDeviceContext {
* If the device doesn't support such, queue_family_encode_index will be -1.
* Not required.
*/
attribute_deprecated
int queue_family_encode_index;
attribute_deprecated
int nb_encode_queues;
/**
@@ -135,8 +158,11 @@ typedef struct AVVulkanDeviceContext {
* If the device doesn't support such, queue_family_decode_index will be -1.
* Not required.
*/
attribute_deprecated
int queue_family_decode_index;
attribute_deprecated
int nb_decode_queues;
#endif
/**
* Locks a queue, preventing other threads from submitting any command
@@ -150,6 +176,17 @@ typedef struct AVVulkanDeviceContext {
* Similar to lock_queue(), unlocks a queue. Must only be called after locking.
*/
void (*unlock_queue)(struct AVHWDeviceContext *ctx, uint32_t queue_family, uint32_t index);
/**
* Queue families used. Must be preferentially ordered. List may contain
* duplicates.
*
* For compatibility reasons, all the enabled queue families listed above
* (queue_family_(tx/comp/encode/decode)_index) must also be included in
* this list until they're removed after deprecation.
*/
AVVulkanDeviceQueueFamily qf[64];
int nb_qf;
} AVVulkanDeviceContext;
/**

Some files were not shown because too many files have changed in this diff Show More