sysclk: fix VRR issues

This commit is contained in:
souldbminersmwc
2026-03-21 10:58:35 -04:00
parent 610bf9ad82
commit aabff0e948

View File

@@ -529,30 +529,32 @@ void ClockManager::VRRThread(void* arg) {
if(targetHz) { if(targetHz) {
maxDisplay = targetHz; maxDisplay = targetHz;
} else { } else {
if(Board::GetConsoleType() == HorizonOCConsoleType_Aula) { maxDisplay = 60;
maxDisplay = mgr->config->GetConfigValue(HorizonOCConfigValue_EnableUnsafeDisplayFreqs) ? 65 : 60;
} else {
maxDisplay = mgr->config->GetConfigValue(HorizonOCConfigValue_EnableUnsafeDisplayFreqs) ? 72 : 60;
}
} }
u8 minDisplay = Board::GetConsoleType() == HorizonOCConsoleType_Aula ? 45 : 40; u8 minDisplay = Board::GetConsoleType() == HorizonOCConsoleType_Aula ? 45 : 40;
if(maxDisplay == minDisplay) if(maxDisplay == minDisplay)
continue; continue;
if(fps >= minDisplay && fps <= maxDisplay) if(fps >= minDisplay && fps <= maxDisplay) {
Board::SetHz(HorizonOCModule_Display, fps); Board::SetHz(HorizonOCModule_Display, fps);
else { mgr->context->freqs[HorizonOCModule_Display] = fps;
mgr->context->realFreqs[HorizonOCModule_Display] = fps;
} else {
for(u32 i = 0; i < 10; i++) { for(u32 i = 0; i < 10; i++) {
u32 compareHz = fps * i; u32 compareHz = fps * i;
if(compareHz >= minDisplay && compareHz <= maxDisplay) { if(compareHz >= minDisplay && compareHz <= maxDisplay) {
Board::SetHz(HorizonOCModule_Display, compareHz); Board::SetHz(HorizonOCModule_Display, compareHz);
mgr->context->freqs[HorizonOCModule_Display] = compareHz;
mgr->context->realFreqs[HorizonOCModule_Display] = compareHz;
break; break;
} }
} }
} }
if(++tick > 50) { if(++tick > 50) {
Board::ResetToStockDisplay(); Board::SetHz(HorizonOCModule_Display, maxDisplay);
tick = 0; tick = 0;
svcSleepThread(25'000'000); svcSleepThread(25'000'000);
} }
@@ -777,8 +779,12 @@ void ClockManager::SetClocks(bool isBoost) {
continue; continue;
if(module == HorizonOCModule_Display && this->config->GetConfigValue(HorizonOCConfigValue_OverwriteRefreshRate) && !noDisp) { if(module == HorizonOCModule_Display && this->config->GetConfigValue(HorizonOCConfigValue_OverwriteRefreshRate) && !noDisp) {
if(targetHz) if(targetHz) {
Board::SetHz(HorizonOCModule_Display, targetHz); Board::SetHz(HorizonOCModule_Display, targetHz);
this->context->freqs[HorizonOCModule_Display] = targetHz;
this->context->realFreqs[HorizonOCModule_Display] = targetHz;
}
} }
// Skip GPU and CPU if governors handle them // Skip GPU and CPU if governors handle them