Commit Graph
313 Commits
Author SHA1 Message Date
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
Adrià 7a225bb303 Merge pull request #12686 from MarcZX10/feat/pad-rumble-intensity
feat(libSceVideoOut): add ANYPS5_RUMBLE to scale or turn off host controller vibration
2026-10-29 23:46:17 +01:00
MarcZX10 e1dd271db6 test(libSceVideoOut): cover the mouse button reset and the dropped releases
video_out_mouse_tests holds a button, opens a dialog and releases it: the title
receives one reset instead of the release, later presses and releases are
dropped, and both reach the title again once the dialog closed.
2026-10-29 14:06:13 +00:00
MarcZX10 0e32c5a792 feat(libSceVideoOut): release the title's mouse buttons once when a dialog starts taking clicks
When the first button event arrives while a modal dialog captures input, MouseInput
publishes a button reset instead of it and drops every press and release until
the dialog is gone, so a button the title saw pressed before the dialog opened
does not stay pressed when its release is dropped.
2026-10-29 14:06:13 +00:00
MarcZX10 f1bd41962d test(libSceVideoOut): cover mouse button presses while a dialog is shown
video_out_mouse_tests checks that a button press made while a dialog is shown
produces no mouse data, and that presses and releases reach the title once the
dialog closed.
2026-10-29 14:06:13 +00:00
MarcZX10 8c0fda8ce1 feat(libSceVideoOut): keep mouse button presses from the title while a dialog is shown
MouseInput drops a button press while a modal dialog captures input, so the click
that answers the dialog is not also delivered to the title. Releases still reach
it in this commit.
2026-10-29 14:06:13 +00:00
MarcZX10 f27176100f test(libSceVideoOut): cover mouse motion and wheel while a dialog is shown
video_out_mouse_tests checks that the wheel reaches the title without a dialog,
that motion and wheel produce no mouse data while a dialog is shown, and that
motion is delivered again once it closed.
2026-10-29 14:06:13 +00:00
MarcZX10 e4034b2f89 feat(libSceVideoOut): keep mouse motion and wheel from the title while a dialog is shown
MouseInput drops relative motion and wheel steps while a modal dialog captures
input, so moving or scrolling to answer the dialog does not also move the title's
cursor. Button events are unchanged by this commit. video_out_mouse_tests links
libSceIme for the dialog tests that follow.
2026-10-29 14:06:13 +00:00
MarcZX10 73e6580767 feat(libSceVideoOut): release the title's keys once when a dialog starts taking keys
When the first key event arrives while a modal dialog captures input, KeyboardInput
publishes a key reset instead of it and then drops every key press and release
until the dialog is gone, so a key the title saw pressed before the dialog opened
does not stay pressed when its release is dropped.
2026-10-29 14:06:13 +00:00
MarcZX10 35599e971d feat(libSceVideoOut): keep key presses from the title's keyboard while a dialog is shown
KeyboardInput no longer publishes a key press to libSceKeyboard while a modal dialog
captures input, so the keys that answer the dialog are not also typed into the
title. Key releases still reach it. keyboard_tests links libSceIme because it
builds KeyboardInput.cpp itself.
2026-10-29 14:06:13 +00:00
MarcZX10 3ba1c9510f test(libSceVideoOut): cover the pad hand-off to a modal dialog
pad_sdl_tests opens a two-button dialog with a virtual controller: the title reads
only the neutral intercepted state while it is shown, a Cross press answers it
with the focused button, the same press stays hidden from the title until it is
released, and the next press reaches the title.
2026-10-29 14:06:13 +00:00
MarcZX10 a30f2a2fc8 feat(libSceVideoOut): keep pad and key presses from the title while a dialog is shown
While a modal dialog captures input, the controller hand-off that already serves
an IME keyboard publishes slot 0's buttons and left stick to the dialog and
returns the neutral intercepted state to the title, and the button held when the
dialog closes stays hidden until it is released. Key presses, mouse button
presses, wheel steps and motion no longer reach the keyboard-to-pad mapping while
the dialog is shown; releases still do, so no mapped button stays pressed.
2026-10-29 14:06:13 +00:00
MarcZX10 22f89eecae test(libSceVideoOut): cover the modal dialog keyboard and mouse input
video_out_dialog_input_tests feeds synthetic SDL events to DialogInput with a
three-button dialog open: every focus key and the wheel, the confirming and
cancelling keys and buttons, repeats, events for another window, unmapped keys
and buttons, and events while no dialog is open.
2026-10-29 14:06:13 +00:00
MarcZX10 71cd480ce2 feat(libSceVideoOut): drive a modal dialog from the keyboard and the mouse
DialogInput turns window events into modal dialog inputs: Left, Up, Right, Down,
Tab and Shift+Tab and the mouse wheel move the focus, Enter, the keypad Enter and
Space and a left click confirm, Escape and a right click cancel. Repeats of the
confirming and cancelling keys, other windows' events and other keys are
ignored. The presentation thread feeds it with the events it already polls for
the IME text input.
2026-10-29 14:06:13 +00:00
MarcZX10 e77ad1da30 feat(libSceVideoOut): hand the pending modal dialog to the presenter
The presentation thread registers itself as a modal dialog presenter while its
window exists and withdraws on exit, so a dialog opened with no window to show
it is refused and keeps its caller's own answer. Before each flip it reads the
pending dialog and passes it to the driver, or clears it. The IME keyboard keeps
the overlay: while it is shown or captures the keyboard or the pad, the dialog
is not read.
2026-10-29 14:06:13 +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
Adrià b9246db364 Merge pull request #11853 from ionut27001/fix/wf-videoout-flipmaster-measured-codes
fix(libSceVideoOut): answer the flip-master calls as measured on a PS5
2026-10-29 12:57:56 +01:00
Adrià 2a90fb105b Merge pull request #9431 from Get-fix/ps4/agc-gcn
feat(libSceAgcDriver): draw PS4 (GCN) command buffers
2026-10-29 09:31:13 +01:00
MarcZX10 10a6d9bb0e feat(libSceVideoOut): scale host controller rumble by ANYPS5_RUMBLE
The motor rumble and the trigger rumble of non-DualSense controllers reach SDL with the amplitude a title asked for and no host-side way to reduce or disable it. Build both commands through the rumble intensity helper: at the default of 100 the command is the one built before, and at 0 the host only ever receives a stop. The variable is read when the pad input starts, so an invalid value stops the game there. Vibration that a title plays as audio and that falls back to motor rumble goes through the same path and is scaled with it. DualSense adaptive trigger effects are left untouched.
2026-10-29 02:06:36 +00:00
p3nicillinandClaude Opus 5.5 cce9311f34 fix(libSceVideoOut): answer 0 and UNAVAILABLE_OUTPUT_MODE when the output has no 120 Hz
PS5_Vulkan measured on a base PS5 set to 1080p output that
sceVideoOutIsOutputSupported(15) answers 0, neither 1 nor an error, and
that sceVideoOutConfigureOutput(15) then returns 0x80290019, in a title
declaring high-frame-rate output. A host display below 120 Hz answered
0x80290016 to both instead. Titles that branch on the answer being 1
are unchanged; the undeclared-title answer stays 0x80290016.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 13:48:19 +00:00
p3nicillinandClaude Opus 5.5 60c8b94725 test(libSceVideoOut): move the past-last-buffer check away from the slot check
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 13:48:16 +00:00
p3nicillinandClaude Opus 5.5 338ea713f2 fix(libSceVideoOut): return INVALID_VALUE for a registration past the last buffer
PS5_Vulkan measured on a PS5 (firmware 13.40) that
sceVideoOutRegisterBuffers2 refuses a set at buffers 15 to 19 with
0x80290001. The call threw instead. The other out-of-range arguments
keep throwing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 13:48:15 +00:00
Get-fix d64ae425c2 test(libSceVideoOut): expect the PS4 alignment message in the PS4 flip test
The 4 KiB display buffer alignment check now names linear and PS4
buffers, because PS4 tiled display buffers may be 4 KiB aligned too.
video_out_flip_ps4 still looked for the old text when a PS4 buffer set
is changed to the PS5 tiled layout, so it failed although the change is
still refused.
2026-10-28 13:01:27 +01:00
Dean 2227f13661 Merge pull request #11516 from Lindamea1/fix/videoout-event-getters-invalid-event
fix(libSceVideoOut): return INVALID_EVENT from the event getters for an event of another filter
2026-10-29 00:35:41 +13:00
Adrià a37797da92 Merge pull request #11637 from B-Howell/codex/videoout-display-index-current-main
feat(libSceVideoOut): allow selecting the initial display
2026-10-28 03:49:48 +01:00
ionut27001 7af0c1dc60 fix(libSceVideoOut): answer flip-master calls only on a handle that never had buffers 2026-10-27 14:40:31 +02:00
ionut27001 5b1ddb48e3 fix(libSceVideoOut): answer the flip-master calls as measured on a PS5 2026-10-27 14:40:31 +02:00
Adrià d410ce253f Merge pull request #11207 from EagleBearerYS/feat/imedialog-pad-keyboard
feat(libSceImeDialog): type with the controller on an on-screen keyboard
2026-10-27 12:00:58 +01:00
B-Howell be358dc3f7 feat(libSceVideoOut): allow selecting the initial display 2026-10-27 11:50:06 +01:00
Adrià d768fb5df3 Merge pull request #10513 from thuanquang/perf/frame-dump-writer-cpu
perf(agc): write CPU-path frame dumps through the frame dump writer
2026-10-27 09:21:55 +01:00
Adrià 5c356f41c3 Merge pull request #11048 from imellag/feat/libkernel-macos-main-thread
feat(libkernel): start the guest off the main thread on macOS
2026-10-27 08:27:20 +01:00
Yunus Shaikh 30d2ca3492 fix(libScePad): keep presses from before a capture out of the intercepted reads
A press published before the keyboard captured the pad stayed in the
read latch and in the sample queue. The first ReadState after the
handoff returned it beside the Intercepted bit, and Read drained the
queued samples from before the capture unmasked. Clear both when a
sample starts the capture, so every read while it lasts holds only the
Intercepted bit.

Found by MarcZX10's review.
2026-10-27 05:20:10 +01:00
Yunus Shaikh dc209521ed feat(agc): draw the system keyboard over the presented frame 2026-10-27 05:20:10 +01:00
Yunus Shaikh 2a3cd39882 feat(libSceVideoOut): hand the pad to an open keyboard and hold back the game's reads 2026-10-27 05:19:49 +01:00
Dean e55c69f1fd Merge pull request #8927 from ionut27001/fix/videoout-cursor-flip-status
fix(libSceVideoOut): answer the cursor, flip status and pending-flip calls as measured on a PS5
2026-10-27 14:57:01 +13:00
Dean b7cfbf0115 Merge pull request #9346 from Techx3/feat/fullscreen-env
feat(libSceVideoOut): open the display window fullscreen with ANYPS5_FULLSCREEN
2026-10-27 10:29:49 +13:00
Adrià afc780e681 Merge pull request #10507 from orezraey/feat/videoout-composite-overlay
feat(videoout): composite the overlay bus over the main output
2026-10-26 20:00:54 +01:00
Lindamea1andClaude Opus 5.5 0f871ec673 fix(libSceVideoOut): return INVALID_EVENT from the event getters for an event of another filter
sceVideoOutGetEventId, sceVideoOutGetEventData and sceVideoOutGetEventCount
threw for an event whose filter is not EVFILT_VIDEO_OUT, and
sceVideoOutGetEventId also threw for a VideoOut id this library never
registers. A title that asks for the id of each event in a queue that
also holds other events stopped there. PPSA28180 compares the result
with VIDEO_OUT_ERROR_INVALID_EVENT, as reported in #11376 (item 6).

They return VIDEO_OUT_ERROR_INVALID_EVENT (0x8029000D) instead, before
sceVideoOutGetEventData writes its output, as the PS4 libraries of
shadPS4 and fpPS4 do. The id is compared in full, so an id above 32
bits is no longer read as a registered one. A null pointer still
throws. The PS5 result is unverified and recorded in the libSceVideoOut
debt.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 17:42:26 +00:00
Dean ca6e29e836 Merge pull request #10924 from Jishnuraj07/fix/pad-sdl-host-controllers
test(pad): skip pad_sdl when host controllers are connected
2026-10-27 05:32:38 +13:00
Dean Galvin 649e73c2bc fix(videoout): declare the cursor exports only in VideoOut.hpp
Main declares sceVideoOutCursorEnable, Disable, SetImageAddress and
SetPosition in the library's public header; the second declarations in
Output.hpp made the header audit fail on duplicates.
2026-10-27 04:20:52 +13:00
Dean Galvin 231bbbce92 Merge branch 'main' into fix/videoout-cursor-flip-status 2026-10-27 04:20:52 +13:00
Dean Galvin 96f404d73d test(videoout): stop pinning results for unimplemented cursor and flip status calls
The removed checks asserted the exact failure text of cursor image, image
address and index calls and of a null flip status output. Those calls are
still not implemented and still refuse explicitly; the tests no longer pin
what they answer.
2026-10-27 04:20:52 +13:00
Emanuele b05ca4e4bf fix(libSceVideoOut): read the window size after a flip on the main thread on macOS 2026-10-26 12:07:59 +01:00
orezraeyandClaude Opus 5.5 f34c280578 Merge main into feat/videoout-composite-overlay
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 03:06:04 -03:00
Jishnuraj07andClaude Opus 5.5 2b884749fa fix(pad): fail pad_sdl when SDL_NumJoysticks reports an error
SDL_NumJoysticks returns a negative value on error, which the host
controller check turned into exit code 77 and CTest reported as a
skip. A negative count now fails the test with SDL_GetError, and only
a positive count skips it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 11:26:25 +05:30
Dean 9f386f3a29 Merge pull request #9157 from shanu337/videoout-color-space-wrappers
refactor(libSceVideoOut): consolidate color space wrappers and add Flip tests
2026-10-26 15:32:59 +13:00
orezraeyandClaude Opus 5.5 655d0f3f32 Merge main into feat/videoout-composite-overlay
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-25 21:51:50 -03:00
Dean 487a08e600 Merge pull request #8654 from xXPBSXx/test/video-out-telemetry-windows
test(libSceVideoOut): run the telemetry tests on Windows
2026-10-26 11:03:02 +13:00
Dean Galvin b7c91d3372 fix(libSceVideoOut): declare the sized color wrappers once in VideoOut.hpp 2026-10-26 10:31:23 +13:00
Dean Galvin 0a52fdf083 Merge branch 'main' into videoout-color-space-wrappers 2026-10-26 10:30:44 +13:00