From 8ba2caf58a21ad2f2d8b5ce1904bf9f7f3ea2b04 Mon Sep 17 00:00:00 2001 From: Senaxx Date: Wed, 30 Sep 2026 03:56:00 +0530 Subject: [PATCH] videoout: WQHD detection and VRR peg/unpeg --- src/graphics/presentation/videoOut.cpp | 32 ++++++++++++++++++++++++++ src/graphics/presentation/videoOut.h | 3 +++ src/libs/libVideoOut.cpp | 3 +++ 3 files changed, 38 insertions(+) diff --git a/src/graphics/presentation/videoOut.cpp b/src/graphics/presentation/videoOut.cpp index a73ba6e6c..51052333e 100644 --- a/src/graphics/presentation/videoOut.cpp +++ b/src/graphics/presentation/videoOut.cpp @@ -1814,6 +1814,38 @@ KYTY_SYSV_ABI int VideoOutGetOutputStatus(int handle, VideoOutOutputStatus* stat return OK; } +KYTY_SYSV_ABI int VideoOutAllowOutputResolutionWqhdDetection(int handle) { + if (!DriverState().IsOpened(handle)) { + return VIDEO_OUT_ERROR_INVALID_HANDLE; + } + return OK; +} + +KYTY_SYSV_ABI int VideoOutVrrPegToFixedRate(int handle, uint64_t arg1, uint64_t arg2) { + PRINT_NAME(); + + static std::atomic_bool logged {false}; + if (!logged.exchange(true, std::memory_order_relaxed)) { + LOGF("\t handle = %d\n" + "\t arg1 = 0x%016" PRIx64 "\n" + "\t arg2 = 0x%016" PRIx64 "\n", + handle, arg1, arg2); + } + + return OK; +} + +KYTY_SYSV_ABI int VideoOutVrrUnpegFromFixedRate(int handle) { + PRINT_NAME(); + + static std::atomic_bool logged {false}; + if (!logged.exchange(true, std::memory_order_relaxed)) { + LOGF("\t handle = %d\n", handle); + } + + return OK; +} + static int ValidateOutputConfig(int handle, uint64_t mode, const VideoOutOutputOptions* options, void* reserved_ptr, uint64_t reserved) { if (!DriverState().IsOpened(handle)) { diff --git a/src/graphics/presentation/videoOut.h b/src/graphics/presentation/videoOut.h index 06f995067..dad4aaeb2 100644 --- a/src/graphics/presentation/videoOut.h +++ b/src/graphics/presentation/videoOut.h @@ -90,6 +90,9 @@ KYTY_SYSV_ABI int VideoOutGetEventData(const LibKernel::EventQueue::KernelEvent* KYTY_SYSV_ABI int VideoOutGetEventCount(const LibKernel::EventQueue::KernelEvent* ev); KYTY_SYSV_ABI int VideoOutWaitVblank(int handle); KYTY_SYSV_ABI int VideoOutGetOutputStatus(int handle, VideoOutOutputStatus* status); +KYTY_SYSV_ABI int VideoOutAllowOutputResolutionWqhdDetection(int handle); +KYTY_SYSV_ABI int VideoOutVrrPegToFixedRate(int handle, uint64_t arg1, uint64_t arg2); +KYTY_SYSV_ABI int VideoOutVrrUnpegFromFixedRate(int handle); KYTY_SYSV_ABI int VideoOutInitializeOutputOptions(VideoOutOutputOptions* options); KYTY_SYSV_ABI int VideoOutIsOutputSupported(int handle, uint64_t mode, const VideoOutOutputOptions* options, diff --git a/src/libs/libVideoOut.cpp b/src/libs/libVideoOut.cpp index 3c18c9a14..25457863a 100644 --- a/src/libs/libVideoOut.cpp +++ b/src/libs/libVideoOut.cpp @@ -39,6 +39,8 @@ LIB_DEFINE(InitVideoOut_1) { LIB_FUNC("Mt4QHHkxkOc", VideoOut::VideoOutGetEventCount); LIB_FUNC("j6RaAUlaLv0", VideoOut::VideoOutWaitVblank); LIB_FUNC("utPrVdxio-8", VideoOut::VideoOutGetOutputStatus); + LIB_FUNC("5tRaBjtdTzY", VideoOut::VideoOutVrrPegToFixedRate); + LIB_FUNC("T4ucGB8CsnM", VideoOut::VideoOutVrrUnpegFromFixedRate); LIB_FUNC("+I4K03i3EL0", VideoOut::VideoOutInitializeOutputOptions); LIB_FUNC("Nv8c-Kb+DUM", VideoOut::VideoOutIsOutputSupported); LIB_FUNC("w0hLuNarQxY", VideoOut::VideoOutConfigureOutput); @@ -46,6 +48,7 @@ LIB_DEFINE(InitVideoOut_1) { LIB_FUNC("MCJ8SkzsQxY", VideoOut::VideoOutLatencyMeasureSetStartPoint); LIB_FUNC("DYhhWbJSeRg", VideoOut::VideoOutColorSettingsSetGamma); LIB_FUNC("pv9CI5VC+R0", VideoOut::VideoOutAdjustColor); + LIB_FUNC("w7Ipp9Xl7hg", VideoOut::VideoOutAllowOutputResolutionWqhdDetection); } } // namespace LibGen5