Commit Graph
133 Commits
Author SHA1 Message Date
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
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
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
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 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 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 8cf4d1ebf0 Merge pull request #14974 from xXPBSXx/docs-videoout-change-attr2
docs(debt): say that sceVideoOutSubmitChangeBufferAttribute2 throws for a bad set index or option
2026-11-02 23:30:44 +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
xXPBSXxandClaude Sonnet 5.5 c0703637ba docs(debt): say that sceVideoOutSubmitChangeBufferAttribute2 throws for a bad set index or option
A set index outside 0 to 3, a set that is not registered and an option
other than null throw. The new entry says so and what the titles
checked pass for the two arguments.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-11-02 06:44:29 +01:00
xXPBSXxandClaude Opus 5.5 0413746515 docs(debt): name the flip mode above 6 that one title passes
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-02 04:22:18 +01:00
Dean 198e13c75e Merge pull request #14395 from xXPBSXx/docs/vrr-peg-constant-args
docs(debt): say that titles pass zeros to the VRR peg call
2026-11-02 11:45:48 +13:00
Dean 9c6962c323 Merge pull request #8452 from thuanquang/docs/debt-mouse-to-stick-relative-mode
docs(videoout): say that mouse-to-stick keeps SDL relative mode on
2026-11-02 11:44:35 +13:00
Dean d097bfb93d Merge pull request #12721 from JJenkx/windows/docs-videoout-flip-rate-debt
docs(debt): list sceVideoOutSetFlipRate under unknown function info
2026-11-02 11:14:09 +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
thuanquangandClaude 400fa6066c Merge main (f2d874c1fd) into docs/debt-mouse-to-stick-relative-mode
#11854 rewrote the HDR output entry next to this PR's line in docs/dev/debt/libSceVideoOut.md. Main's entry is kept; this PR still changes only the mouse capture entry's release clause.

Co-Authored-By: Claude <[email protected]>
2026-11-02 00:50:49 +07: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
xXPBSXxandClaude Opus 5.5 b179e53c8d docs(debt): say that titles pass zeros to the VRR peg call
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-01 10:20:29 +01: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
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 fd07d1c8d8 docs(libSceVideoOut): record the SDL text editing limits of the IME forwarder 2026-11-01 00:29:12 +00:00
MarcZX10 773ceee535 docs(debt): record the untested interaction with the DualSense haptics path 2026-11-01 00:04:38 +01:00
MarcZX10 fc64a6f872 docs(debt): record that the identification pulse has no on-request trigger 2026-11-01 00:04:38 +01:00
MarcZX10 f3cf65d9ad docs(debt): record the unmeasured identification pulse timing and strength 2026-11-01 00:04:38 +01:00
Adrià 3197f0ad06 Merge pull request #13705 from MarcZX10/fix/pad-port0-connected-state
feat(libScePad): report port 0 as connected only while its controller is present, opt-in with ANYPS5_PAD_PORT0_STATE
2026-10-31 20:50:35 +01:00
Kyon b0d9058d42 feat(libSceVideoOut): declare configuration mode export 2026-10-30 21:05:16 +00:00
Kyon 9aa490f583 feat(libSceVideoOut): declare older callable exports 2026-10-30 20:21:35 +00:00
JJenkxandClaude Opus 5.5 9614f3a030 docs(debt): record the PS4 Pro result for sceVideoOutSetFlipRate
ntamas94 measured sceVideoOutSetFlipRate on a PS4 Pro (firmware
10.71): rate 60 returns VIDEO_OUT_ERROR_INVALID_VALUE, only 0, 1 and
2 are accepted, an unopened handle returns
VIDEO_OUT_ERROR_INVALID_HANDLE, and the range check is in the display
driver the call forwards to. Record it in the entry; the PS5 result
and the effect on queued flips stay unverified.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 16:11:51 -04:00
MarcZX10 be824022ad docs(debt): record the hold and the keyboard rule as AnyPS5 choices
The 500 ms hold and the rule that keyboard and mouse need a bound controller
in controller mode are AnyPS5 choices; the console's reaction to a removed
pad is not measured.
2026-10-30 14:03:58 +00:00
Savvanis SpyrosandClaude Opus 5.5 fb1551442b Merge main into perf/agc-stores-without-drains
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 14:18:23 +02:00
Adrià 63970eded4 Merge pull request #13123 from kyon-eth/feat/video-out-320-exports
feat(libSceVideoOut): declare 182 callable exports
2026-10-30 12:46:18 +01:00
Savvanis SpyrosandClaude Opus 5.5 70d8cce27d fix(libSceVideoOut): wait for GPU work before replacing a closed port's configuration
A label into a port's bufferLabels can be a GPU store in flight, and only
its import is kept with the batch, not the VideoOutConfig that holds the
memory. processFlip releases a request on a closed port without waiting
for the GPU, and Open on the same bus replaces contexts[handle], so a
close and reopen with a flip in flight could free the configuration
before the store ran.

Open now waits for the driver (AgcDriverWaitIdle) before it replaces a
previous configuration. The wait runs without the driver mutex, and Open
checks the port again afterwards, since another Open may have run
meanwhile. video_out_flip_reopen reopens on a second thread with a flip
and a label store gated behind the queue, and checks that Open has not
returned before the gate opens and that the store landed before it did.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 12:34:29 +02:00
Adrià 65df5a3630 Merge pull request #13008 from relativespace2K/feat/videoout-cursor-set2x-magnify
feat(libSceVideoOut): export sceVideoOutCursorSet2xMagnify
2026-10-30 10:42:00 +01:00
Adrià 7d4006607a Merge pull request #11196 from p3n1cillin/claude/videoout-unregister-busy
fix(libSceVideoOut): refuse to unregister the buffer set on screen as the console does
2026-10-30 06:21:30 +01:00
Kyon 9c74b6d890 docs(libSceVideoOut): clarify image provenance 2026-10-30 02:57:56 +00:00
Kyon 28e6ef73d2 docs(libSceVideoOut): record export identities 2026-10-30 02:46:36 +00:00
Kyon a19a8b5501 refactor(libSceVideoOut): exclude overlapping export 2026-10-30 02:46:03 +00:00
Kyon d1c779a8a3 refactor(libSceVideoOut): defer mismatched identity 2026-10-30 02:45:33 +00:00
Kyon a5c690355b Merge remote-tracking branch 'origin/main' into feat/video-out-320-exports 2026-10-30 02:43:38 +00:00
Adrià 086adee5e3 Merge pull request #12379 from MarcZX10/feat/msgdialog-overlay
feat(overlay): show PS5 system dialogs as real PC dialogs
2026-10-30 02:04:23 +01:00
ThomasandClaude Opus 5.5 3f7f79adce docs(libSceVideoOut): record the unmeasured delete result on ports that are not open
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 00:31:11 +01:00
mrph28 6a2c3e7d99 feat(libSceVideoOut): export sceVideoOutCursorSet2xMagnify
PC5 (PPSA11018) imports the NID and the library did not export it, so the converted executable stopped at load with error 127. The call validates the handle and index like the other cursor calls and returns 0: no cursor image is drawn, so the magnification has no observable effect. The unmeasured behaviour is recorded under Silent stubs.
2026-10-29 17:54:07 -03:00
Kyon 38715d5610 feat(libSceVideoOut): declare 184 callable exports 2026-10-29 18:15:41 +00:00
xXPBSXxandClaude Opus 5.5 b03fa1a977 docs(debt): name what the emulators do when a video bus is opened twice
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 15:29:17 +01:00
MarcZX10 eb3c77d921 docs(libSceVideoOut): record the bound on a dialog that no flip draws
The entry said a title that stops flipping never gets an answer. A dialog that
was never drawn is now dropped after three seconds with the automatic answer;
the bound is a host choice.
2026-10-29 14:06:18 +00:00
MarcZX10 faa571d15e docs(libSceVideoOut): record when the overlay dialog is drawn and who gets the input
The dialog needs a window and a title that keeps flipping, the IME keyboard has
priority over it, and the title's input is withheld while it is shown.
2026-10-29 14:06:16 +00:00
MarcZX10 c6aaf7f1b4 docs(libSceVideoOut): record the unmeasured inputs of the overlay dialog
The key, mouse and pad inputs that drive the message dialog are a host choice.
The mouse has no hit test, and Cross confirms whatever the confirm-button
setting of the console.
2026-10-29 14:06:14 +00:00
Dean ca6987de8a Merge pull request #11414 from p3n1cillin/claude/videoout-register-past-last-buffer
fix(libSceVideoOut): return INVALID_VALUE for a registration past the last buffer as the console does
2026-10-30 03:00:15 +13:00