20284 Commits
Author SHA1 Message Date
Yahfz 7f2e02671e Add option to emulate PS3 HDD read speed (#19593)
Fixes crashes in Armored Core Verdict and Armored Core V. 

RPCS3 HDD reads were finishing much faster than on PS3, so emulating
their timing gives the audio worker time to free old sound banks before
the new ones exhaust the heap.
2026-09-29 16:52:19 +00:00
FlexBy420 3e9d881aa6 Minor fixes to old steam theme (#19560) 2026-09-29 14:24:56 +00:00
schm1dtmac 615f529e65 [Mac OS X] Force enable LSE2 on Apple AArch64 as a workaround for missing macros.
AppleClang defines the macros noted in types.hpp, but not LLVM clang for some obnoxious reason.
2026-09-29 15:01:34 +02:00
Ani d9a72d6ca7 gui: General UX pass on the Settings Dialog (#19604)
### Remove 
- gui: Remove Debug "Approximate PPU Vector NaN Handling"
- gui: Remove I/O "Load SDL GameController Mappings"
- gui: Remove Advanced "VBlank NTSC Fixup", enable by default
- gui: Remove Debug "Accurate DFMA"

### Move
- gui: Move Advanced "Enable SPU Events Busy Loop" to Debug
- gui: Move Advanced "Set DAZ and FTZ" to Debug
- gui: Move Audio Device to the left column in Audio

### Group
- gui: Add "Savestates" section in Advanced

### Order
- gui: Alphabetically order the Advanced Tab
- gui: Alphabetically order the I/O tab

### Visibility
- gui: Hide formats list when Audio Format is not Manual
- gui: Hide 3D settings if GPU "Enable 3D Support" is disabled
- gui: Hide RCAS if GPU "Output Scaling" is not FSR1
2026-09-29 10:25:30 +00:00
Megamouse 56fabd9760 Update libpng to 1.6.59 2026-09-29 11:26:43 +02:00
Antonino Di GuardoandClaude Opus 5.5 58b3505593 Qt: Keep the game window fullscreen when it is shown again (#19541)
Fixes #18381

### Bug:
`gs_frame::show()` went through `QWindow::show()`. On desktop platforms
`QPlatformIntegration::defaultWindowState()` is `Qt::WindowNoState`, so
that always routes through `showNormal()`, which pushes
`Qt::WindowNoState` to the native window before the startup visibility
is applied. On a window that is already fullscreen this is a real "leave
fullscreen" request immediately followed by an "enter fullscreen" one,
and a window manager is free to resolve that pair as windowed.
`QXcbWindow::setWindowState()` returns early when the requested state
matches the current one, so the first call of a session is a no-op, but
a later one on a fullscreen window is not, and
`QWaylandWindow::setWindowState()` forwards unconditionally.

Only the OpenGL frame runs into this. `gl_gs_frame` shows itself from
its constructor so that wayland-egl has a mapped surface before the
context is created (c7b2a21f), so by the time `gs_frame::flip()` shows
the frame again on the first flip, the window is already fullscreen.
Vulkan and Null only ever show the frame on that first flip, which is
why they are fine. It also explains why this never reproduced on
Windows: `ShowWindow()` applies both states synchronously and the second
one wins.

### TO BE TESTED ON LINUX
Not runtime tested yet: it needs a run on X11 and on Wayland with an
OpenGL game and "Start games in fullscreen mode" enabled.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-09-29 08:32:23 +00:00
Antonino Di Guardo 52616e0f10 Display ISO key mismatch (#19471)
Display an error message when booting a game from an encrypted ISO file
/ BD Drive in case:
- no decryption key file found
- wrong decryption key file provided (e.g. with key of another game)

Further, code improved to skip a key file for an ISO file recognized as
decrypted (avoid to decrypt (to corrupt) the ISO file with a wrongly
provided key).
2026-09-29 09:52:55 +02:00
kd-11 6fc79f7ccf Revert "rsx: keep depth buffers for zpass queries"
This reverts commit 2d293d8e5a.
2026-09-29 07:55:59 +03:00
digant73 1707d7fc88 remove unnecessary #ifdef 2026-09-28 22:18:44 +02:00
digant73 5c1ce9cbef cellVdec: Report the userdata of the AU each picture was decoded from 2026-09-28 22:18:44 +02:00
Yahfzandkd-11 2d293d8e5a rsx: keep depth buffers for zpass queries
ZPASS_COUNT is an observable side-effect of Z-buffer access, despite Z-TEST and Z-WRITE being disabled. Technically, this is a pure Z-READ operation.

Co-authored-by: kd-11 <[email protected]>
2026-09-28 17:20:17 +00:00
Megamouse 105c4988f0 mic: fix some warnings 2026-09-28 12:27:27 +02:00
Megamouse 9a8a66a29c Update wolfssl to 5.9.4 2026-09-28 12:27:27 +02:00
Ani 1f080485b9 ci: Bump FreeBSD to 14.5 2026-09-28 03:48:48 +02:00
Antonino Di Guardo c405227129 CPUThread: Fix deadlock when a CPU thread terminates abnormally 2026-09-27 23:54:51 +03:00
kd-11 3fa07db78b rsx/qt: Move the "disable blit engine upscaling" option to the advanced tab 2026-09-27 18:17:26 +03:00
digant73 205a4481f3 Fix ISO device paths 2026-09-27 15:10:08 +03:00
digant73 dad97b9a96 cellVdec: Output the pictures still held by the decoder on EndSeq 2026-09-27 02:53:16 +03:00
digant73 8e2d700fab Fix BD Drive read speed 2026-09-27 02:29:27 +03:00
Antonino Di Guardo 77cb9423db LV2: Wait for new PPU threads to start in sys_ppu_thread_start 2026-09-26 15:33:22 +00:00
Antonino Di Guardo a1c317a8c4 cellVdec: Postpone Context Destruction 2026-09-26 14:37:31 +00:00
Elad 3aab4c5d59 VM/sys_mmapper: Fix sys_mmapper error checking 2026-09-26 14:35:38 +03:00
Elad 063586ea81 Utilities\cfmt.h: Add binary formatting to fmt::format 2026-09-26 14:35:38 +03:00
Elad 6d22e2165d Fix vm::page_protect 2026-09-26 13:17:00 +03:00
Elad a70f698569 vm: Fix confusing enum flags naming 2026-09-26 13:17:00 +03:00
Elad 13eaa2b03c rsx/vm: Do not pause RSX on non-RSX allocations 2026-09-26 13:17:00 +03:00
Elad 4514ad6216 Fix PPU start delay accumulation 2026-09-26 00:01:32 +03:00
digant73 6e6ffc5058 Fix thread affinity on Linux for thread scheduler different than OS 2026-09-25 23:34:58 +03:00
digant73 9f696db955 Fix slow audio 2026-09-25 21:03:26 +03:00
kd-11 7f5f8c4a70 vk: Use all available threads for shader compilation during bootup 2026-09-25 20:33:15 +03:00
Megamouse e447511a67 CI: try to split msvc build and unit test build 2026-09-25 15:22:49 +02:00
ShadelessFox 38eba804f4 gdb: fix address check in the memory read routine 2026-09-25 08:37:02 +03:00
RipleyTom ef65627338 fix: fix build with LLVM 23.1 2026-09-25 05:57:53 +03:00
Megamouse a106fb0ee7 qt: don't treat empty savestates folder as error 2026-09-24 21:22:24 +02:00
MananSharma12 fadced35a5 gui: Display warning for corrupted items in Savestate and Trophy managers 2026-09-24 18:48:11 +02:00
Megamouse 3660716e4f Build/CI: Stop overriding '/W0' with '/W4' spam 2026-09-24 17:34:00 +02:00
YahfzandElad 712ab24775 Update rpcs3/rpcs3qt/tooltips.h
Co-authored-by: Elad <[email protected]>
2026-09-24 16:34:25 +03:00
yahfz 083859b94c putllc 2026-09-24 16:34:25 +03:00
Antonino Di GuardoandClaude Opus 5 0c382f4fc9 patch_engine: don't emit path-typed patch addresses as hex
save_patches always emitted the address element as fmt::format("0x%.8x"),
but for move_file and hide_file that element is a VFS path: load() keeps the
text in original_offset and skips u32 validation for those two types.
Round-tripping such a patch through save_patches replaced the source path
with 0x00000000.

The entry stays syntactically valid and keeps loading, so the patch is still
listed and can still be toggled in the Patch Manager while silently matching
no file. Re-downloading does not repair it either, since append_patches
discards an incoming patch whose Patch Version is not strictly greater.

Gate the emit on patch_type_uses_hex_offset, the predicate that already
existed for this and was used only on the load side. The numeric branch
keeps using offset rather than original_offset on purpose: an address
modifier is folded into offset at load time and the flat form emitted here
has nowhere to put it.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-24 13:45:26 +02:00
Antonino Di GuardoandClaude Opus 5 dc3c7327d8 patch_engine: make save_patches write atomically
save_patches opened the target with fs::rewrite (write + create + trunc),
then discarded the result of file.write() and returned true unconditionally.
A write that fails part way leaves a truncated file, load() rejects the
whole file on a parse error, and import_patches refuses to write when
load() fails, so every later import returns -1 with no in-app recovery.

75e66ab5e made the patch config and the pad config atomic but missed this
function; save_config, 70 lines up in the same file, already writes through
fs::pending_file and checks the result. Do the same here.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-24 13:45:26 +02:00
Megamouse c82221f292 cellGem: Allow custom camera_frame buffers
TV superstars demo passes its own buffer.
If we early out here we never increase the frame count and tracking
does not work properly.
2026-09-24 07:52:39 +02:00
Elad b5a174e933 LV2: Wait for an observable PPU schedular change from new threads 2026-09-23 23:13:17 +03:00
Elad f9b4d121ea Make sys_cond_signal_to permissive to CPU cycle errors 2026-09-23 23:13:17 +03:00
EladandAntonino Di Guardo c82e598950 LV2: Increase HW PPU Thread Signal Delay
Co-Authored-By: Antonino Di Guardo <[email protected]>
2026-09-23 23:13:17 +03:00
Elad 1e0e352f95 Util/stack_trace.cpp: Clean duplicate functions in CallStack dump 2026-09-23 23:13:17 +03:00
kd-11 56237b6858 rsx/lv2: Add a timeout to the queue drain logic
- Also adds an optimization to skip draining the queue if the command arg is the same.
2026-09-23 17:54:33 +03:00
kd-11 99a926d278 rsx: Force a full pipeline stall before invoking USER_COMMAND callback
- Proven with hardware tests
2026-09-23 17:54:33 +03:00
kd-11 ff40118b94 rsx/lv2: Fix back-to-back USER_COMMAND method invocation cloberring the callback argument 2026-09-23 17:54:33 +03:00
jpolo1224 fe9281f44a vk: run the conversion kernels 64-wide on Adreno
Adreno waves are 64 lanes, and a workgroup narrower than the wave does not pack
together with its neighbours -- it occupies a whole wave and masks the surplus
lanes off. At 32 that idled half of every wave on every dispatch, and these
kernels run on every texture upload of a kilobyte or more, plus every deswizzle
and detile.

Nothing argues the other way here. The kernels carry no shared memory and no
barriers, so group size is a scheduling hint with no LDS or synchronisation
cost to trade against.
2026-09-23 13:20:53 +03:00
Val Packett fdffb7d5f9 vk: Recognize Qualcomm Adreno drivers (blob and Mesa Turnip) 2026-09-23 13:20:53 +03:00