fix(libSceVideoOut): take 64-bit VRR peg arguments and test peg and unpeg

This commit is contained in:
XairRrR 2026-10-11 01:55:16 +02:00
parent 9021735022
commit da642e807b
3 changed files with 12 additions and 1 deletions

View File

@ -26,6 +26,8 @@ int APS5_VABI sceVideoOutLatencyControlWaitBeforeInput(int handle);
int APS5_VABI sceVideoOutLatencyMeasureSetStartPoint(int handle, uint32_t point);
int APS5_VABI sceVideoOutColorSettingsSetGamma(VideoOutColorSettings* settings, float gamma);
int APS5_VABI sceVideoOutAdjustColor(int handle, const VideoOutColorSettings* settings);
int APS5_VABI sceVideoOutVrrPegToFixedRate(int handle, uint64_t arg1, uint64_t arg2);
int APS5_VABI sceVideoOutVrrUnpegFromFixedRate(int handle);
}

View File

@ -8,6 +8,7 @@
#include <cmath>
#include "SceTypes.hpp"
#include "prx/libSceVideoOut/include/Output.hpp"
#include "prx/libc/include/General.hpp"
#include "prx/libSceVideoOut/include/VideoOutDriver.hpp"
@ -310,7 +311,7 @@ int APS5_VABI sceVideoOutVrrUnpegFromFixedRate(int handle) try {
LibcAwaitExit_nid_postfix();
}
int APS5_VABI sceVideoOutVrrPegToFixedRate(int handle, int32_t arg1, int32_t arg2) try {
int APS5_VABI sceVideoOutVrrPegToFixedRate(int handle, uint64_t arg1, uint64_t arg2) try {
if (VideoOutDriver::Get().GetConfig(handle) == nullptr) {
throw std::runtime_error(std::string(__func__) + ": VIDEO_OUT_ERROR_INVALID_HANDLE");
}

View File

@ -340,7 +340,15 @@ void testControls() {
vrrStatus.ident = VIDEO_OUT_EVENT_VRR_STATUS;
vrrStatus.filter = EVFILT_VIDEO_OUT;
check(sceVideoOutGetEventId(&vrrStatus) == VIDEO_OUT_EVENT_VRR_STATUS, "VRR status event id rejected");
check(sceVideoOutVrrPegToFixedRate(handle, 0, 0) == 0, "VRR peg on an open handle failed");
check(sceVideoOutVrrUnpegFromFixedRate(handle) == 0, "VRR unpeg on an open handle failed");
expectFailure([&] { sceVideoOutVrrPegToFixedRate(handle, 1, 0); });
expectFailure([&] { sceVideoOutVrrPegToFixedRate(handle, 0, 1); });
expectFailure([&] { sceVideoOutVrrPegToFixedRate(handle, 0x100000000ull, 0); });
expectFailure([&] { sceVideoOutVrrPegToFixedRate(handle, 0, 0x100000000ull); });
sceVideoOutClose(handle);
expectFailure([&] { sceVideoOutVrrPegToFixedRate(handle, 0, 0); });
expectFailure([&] { sceVideoOutVrrUnpegFromFixedRate(handle); });
check(owner->GetTriggeredEvents(&event, 1) == 0, "closed port retained pending events");
check(sceKernelDeleteEqueue(queue) == 0, "event queue deletion failed");
LibcRunShutdown_nid_postfix();