Commit Graph
471 Commits
Author SHA1 Message Date
Dean be9b38d939 Merge pull request #9880 from ntamas94/fix/ps4-videoout-device-capability
feat(libSceVideoOut): add the PS4 device capability and ModeSetAny exports
2026-11-06 00:03:50 +13:00
Dean 2238042b81 Merge pull request #15705 from oneandonlydean/rr/pr3-gpu
feat(run-report): count milestones, frames, GPU and shader diagnostics
2026-11-05 21:24:14 +13:00
Dean 436c14263e Merge pull request #9154 from LeandroLP23/feat/pad-dualsense-bluetooth-haptics
feat(pad): stream vibration ports to a Bluetooth DualSense as haptics reports
2026-11-05 16:59:18 +13:00
Dean c42e3a000c Merge pull request #11948 from 00xDisaster/feat/video-out-host-policy-current
feat(libSceVideoOut): limit the guest display to the host resolution
2026-11-05 13:00:08 +13:00
LeandroLP23andClaude Opus 5.5 3c949c1dd4 fix(pad): scale the Bluetooth DualSense haptics stream by ANYPS5_RUMBLE
The controller sound card path already scales its samples by ANYPS5_RUMBLE, but
the Bluetooth haptics stream took the vibration port samples before that, so
ANYPS5_RUMBLE=0 still left a Bluetooth DualSense vibrating.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 21:47:03 +01:00
LeandroLP23andClaude Opus 5.5 d7fb2a3ec3 fix(pad): restore the DualSense haptics configuration after a rumble stops
SDL sends scePadSetVibration rumble as report 0x31 with audio haptics
turned off. Once the rumble stopped, the stream's haptics came back at a
different strength than before it. The stream thread now sends its
configuration report 0x31 again 100 ms after slot 0's rumble stops, which
brought the haptics back to their level before the rumble.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 21:47:03 +01:00
LeandroLP23andClaude Opus 5.5 986ae87c8a fix(pad): pace Bluetooth DualSense haptics reports and keep a failed stream silent
The worker sent a backlog of buffered blocks back to back. It now sends at
most one report 0x32 per 10.67 ms, the length of one 32-frame block at
3 kHz, without a catch-up burst after a pause.

A failed report write cleared the stream-open flag, which sent the vibration
ports to motor rumble. The flag now stays set until the controller
disconnects, so the ports stay silent while the stream is stopped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 21:47:03 +01:00
e0b0f2b91d fix(pad): send a DualSense haptics report once two blocks are buffered
The 10.672 ms timer took a block only when it fired, so audio arriving in
blocks smaller than 32 haptic frames (16 from a 256-frame legacy port)
regularly found fewer than 32 frames and the report was skipped; catching
up after falling behind sent two reports back to back and left a ~21 ms
hole. The controller, asked to queue only 16 frames, then ran dry, and
the haptics dropped out about once per second on hardware.

The stream thread now waits on a condition variable until two blocks are
buffered and sends one, so reports follow the audio clock, and report
0x32 asks the controller to queue 64 frames (21 ms) to absorb Bluetooth
jitter and the difference between the title's rate and the controller's
crystal. Closing the stream wakes the waiting thread before the join.

Co-authored-by: seradavid <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 21:46:45 +01:00
115c187398 feat(pad): stream vibration ports to a Bluetooth DualSense as haptics reports
Co-Authored-By: beecrepaldi-afk <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 21:46:30 +01:00
Dean 08f19f9dbe Merge pull request #14313 from oneandonlydean/carry-7499
feat(libScePad): read per-title input profiles beside the shared input file
2026-11-05 08:20:08 +13:00
Dean 9ab6a281ea Merge pull request #11860 from rooklz/fix/input-mapper-settings-roundtrip
fix(tools): round-trip input mapping settings in the input mapper
2026-11-05 06:36:17 +13:00
Dean Galvin 0003ec72c7 Merge rr/pr2-writer into rr/pr3-gpu 2026-11-04 20:21:16 +13:00
ntamas94 0ee4601bf6 fix(libSceVideoOut): merge main and remove obsolete flip-master debt 2026-11-03 21:41:02 +01:00
Dean Galvin 7ceffb3974 Merge main 086c0686c8 into #7978 (04f9490487) 2026-11-04 08:19:39 +13:00
Savvanis SpyrosandClaude Opus 5.5 f160886325 Merge main into perf/agc-stores-without-drains
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 17:37:34 +02:00
fma-rc 04f9490487 test(videoout): hold the deferred flip behind a GPU wait instead of an output callback the title releases 2026-11-03 12:59:28 +01:00
Savvanis SpyrosandClaude Opus 5.5 f070b16201 Merge main into perf/agc-stores-without-drains
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-03 09:18:32 +02:00
rooklz 36b213d86b fix(tools): accept a signed zero stick deadzone like the native parser 2026-11-03 06:44:55 +00:00
B-HowellandClaude Opus 5.5 fbd82632e4 feat(libSceVideoOut): declare later callable exports
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 20:03:55 -05:00
Dean d67a40f692 Merge pull request #14438 from xXPBSXx/fix/q-padidentify-quit-order
fix(tests): destroy the pad input before the pad identify test quits SDL
2026-11-03 11:36:22 +13:00
Dean f6b6491c08 Merge pull request #13041 from wrocketdev/fix/videoout-delete-event-handle
fix(libSceVideoOut): return INVALID_HANDLE when deleting events on ports that are not open
2026-11-03 06:26:20 +13:00
Dean c47ee4e034 Merge pull request #12958 from zaryabzip/feat/mouse-absolute-position
feat(libSceMouse): implement the absolute position calls as firmware 13.42 does
2026-11-03 06:25:57 +13:00
Dean 8c581d2926 Merge pull request #12596 from MarcZX10/feat/ime-composition-clipboard
feat(ime): show host IME composition in the dialog and paste the clipboard
2026-11-03 02:38:26 +13:00
Dean aec75fb2bf Merge pull request #11987 from dantdmdarealguy/test/videoout-timing-log-ordered-cpu-flips
test(videoout): expect ordered CPU flips in timing log builds
2026-11-03 01:28:48 +13:00
Dean 504d1217be Merge pull request #11220 from p3n1cillin/claude/videoout-register-slot-occupied
fix(libSceVideoOut): return SLOT_OCCUPIED for a registration over registered buffers as the console does
2026-11-02 23:27:18 +13:00
Dean bc83f86239 Merge pull request #6729 from fogydes/fix/mouse-button-mapping
test(libSceVideoOut): cover the guest mouse button bits
2026-11-02 20:55:41 +13:00
Dean Galvin 9528d7dc9e fix(libSceVideoOut): skip the per-title input profile when no title is mounted
PadInput() asked for the title ID while constructing, and
GetAppTitleId_nid_postfix throws when there is no param.json or
param.sfo, so pad tests and tools that mount no title failed. Return no
title ID when neither file exists and let any other metadata error
propagate.
2026-11-02 11:33:49 +13:00
Dean b2a4784765 Merge pull request #11345 from NerfEko/fix/system-deps-sdl-test-link
fix(build): link SDL2 tests against SDL2 under system deps
2026-11-02 10:19:52 +13:00
Savvanis SpyrosandClaude Opus 5.5 a814af06ee Merge main into perf/agc-stores-without-drains
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-01 21:06:53 +02:00
xXPBSXxandClaude Sonnet 5.5 185adf1624 fix(tests): destroy the pad input before the pad identify test quits SDL
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-11-01 12:54:03 +01:00
Dean d5ec8e6575 Merge pull request #11854 from ionut27001/fix/wf-videoout-outputstatus-hdr-flags-zero
fix(videoout): report output status flags 0 with HDR output
2026-11-01 23:35:45 +13:00
Dean Galvin 0e3bb2c125 Merge rr/pr2-writer into rr/pr3-gpu
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/Draw.cpp
#	core/shader/recompiler/Recompiler.cpp
#	docs/dev/debt/libc.md
2026-11-01 22:52:36 +13:00
Dean Galvin 4b4e398ca0 Merge main into fix/mouse-button-mapping
# Conflicts:
#	core/libs/prx/libSceVideoOut/tests/MouseInput.cpp
2026-11-01 21:04:04 +13:00
Dean Galvin 6e6d28c588 docs(input): use a fictional title ID in profile examples 2026-11-01 20:59:05 +13:00
Dean Galvin 4d0d546853 Merge main into pr/input-profiles
# Conflicts:
#	core/libs/prx/libSceVideoOut/src/PadInput.cpp
#	docs/user/INPUT_MAPPING.md
2026-11-01 20:58:59 +13:00
Savvanis SpyrosandClaude Opus 5.5 87e6918b69 Merge main into perf/agc-stores-without-drains
Recorder keeps both this branch's LookupStoredBytes and main's UnlandedOwnLabel, with both test groups in --completion-labels-only and the full recorder run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-01 09:16:31 +02:00
Dean 5123e463e8 Merge pull request #14215 from angrysandhill/fix/14149-shutdown-regression
fix(tests): exercise no-Vulkan shutdown during DLL teardown
2026-11-01 18:50:58 +13:00
Dean Galvin fd4f6c74d9 feat(run-report): count milestones, frames, GPU and shader diagnostics
The run report now records how far a run got (loaded, started, first draw,
first present), the frames presented and the average frame rate, the selected
GPU, the number of shaders compiled, failed and served from the cache, the
instructions the shader recompiler could not translate, the guest image
formats looked up or rejected, and the descriptor kinds that shaders bind.
The counters are relaxed atomics and are only touched while a report is being
collected. The window system's request to quit is recorded as the reason a run
ended.
2026-11-01 17:15:09 +13:00
MarcZX10 9421867f14 test(videoout): register the frame limit flip test as video_out_flip_fps_limit
Runs the fps_limit mode with ANYPS5_FPS_LIMIT=20 in its environment, with
the same timeout, skip code and resource lock as the other flip tests.
2026-11-01 01:49:57 +00:00
MarcZX10 858d2c886e test(videoout): pin that ANYPS5_FPS_LIMIT holds the window's flips
Six flips under ANYPS5_FPS_LIMIT=20 may not complete in under five periods
of 50 ms. The check is a lower bound only, so a loaded host cannot fail it;
without the hook the six flips complete in about 100 ms at the output's
rate.
2026-11-01 01:49:57 +00:00
MarcZX10 97a5564fd4 feat(videoout): time the frame-limit wait as its own flip phase
The wait shows as frame_limit in the VideoOut.Flip timing, so a title held
by ANYPS5_FPS_LIMIT is told apart from one held by the vblank wait in the
trace and in the phases of the performance overlay's second page.
2026-11-01 01:49:43 +00:00
MarcZX10 66615554c3 feat(videoout): hold each flip of the window until its frame-limit deadline
With ANYPS5_FPS_LIMIT set, processFlip waits for the pacer's deadline after
the flip's vblank wait and before the frame is presented, so the delay
falls on the presentation and on the flip's completion event, which is
what paces the title. The wait takes no lock, sleeps with PreciseSleepUs in
slices of 20 ms and re-checks between slices whether the output was closed
or failed. The limit is read at the first flip, where an invalid value
stops the title with the error that names it. Without the variable the
pacer does not exist and processFlip does what it did. Flips of the overlay
bus are not paced.
2026-11-01 01:49:43 +00:00
Savvanis SpyrosandClaude Opus 5.5 bebaf6e59d Merge main into perf/agc-stores-without-drains
main moved the AGC test registrations into tests/cmake; tools/agc_test_split.py resolve moved this branch's lines to their fragments.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-01 02:33:42 +02:00
MarcZX10 e72ecbaeec feat(videoout): read the SDL clipboard for the IME paste
Install the SDL clipboard as the provider of the window's IME text input
on the main thread.
2026-11-01 00:29:12 +00:00
MarcZX10 8c15f4921d feat(videoout): paste the clipboard with Ctrl+V or Shift+Insert
While an IME dialog or session captures the keyboard, Ctrl+V (Command+V
on macOS, Ctrl+Shift+V too) and Shift+Insert read the clipboard through a
provider the window installs and hand it to the IME as one paste. Key
repeat, Alt combinations and any press while nothing captures the
keyboard do nothing, and the clipboard is not read in those cases. With
no provider installed nothing is pasted.
2026-11-01 00:29:12 +00:00
MarcZX10 95ab3fe024 feat(videoout): forward SDL text editing events as a preedit
SDL reports the text an input method is still composing as
SDL_TEXTEDITING with the cursor and selection in characters. Forward it
to the IME as a Preedit input, from the game window only. SDL starts text
input when video starts, so the events already arrive while an IME is
active.
2026-11-01 00:29:12 +00:00
AngrySandhill a568bd9d04 fix(tests): exercise no-Vulkan shutdown during DLL teardown 2026-10-31 20:15:35 -04:00
MarcZX10 a1c1c41ad8 fix(libSceVideoOut): set ANYPS5_PAD_IDENTIFY with _putenv_s on Windows
setenv is not part of the MinGW Windows CRT. The test sets the variable
for the process, which PadIdentify.hpp reads with std::getenv. SDL_setenv
calls SetEnvironmentVariableA on Windows, which does not update the CRT
table that std::getenv reads, so _putenv_s is used there. Linux keeps
setenv.
2026-11-01 00:04:38 +01:00
MarcZX10 d2278b2e37 fix(libSceVideoOut): set the Windows PATH for the identify pad-input tests
Give the four pad_identify_{connect,off,rumble,invalid} entries the same
PATH setup on Windows that pad_sdl has, so the DLLs they link resolve.
2026-11-01 00:04:38 +01:00
MarcZX10 134dfaf410 fix(libSceVideoOut): give the identify pad-input test its own target name
The libScePad scheduler test already defines a target called
pad_identify_tests, so configuring the tree failed with 'another target
with the same name already exists'. The VideoOut test target is renamed
to pad_identify_pad_input_tests; its ctest names are unchanged.
2026-11-01 00:04:38 +01:00