sysclk: add display unsafe freq option
This commit is contained in:
@@ -63,7 +63,7 @@ typedef enum {
|
|||||||
HorizonOCConfigValue_BatteryChargeCurrent,
|
HorizonOCConfigValue_BatteryChargeCurrent,
|
||||||
|
|
||||||
HorizonOCConfigValue_OverwriteRefreshRate,
|
HorizonOCConfigValue_OverwriteRefreshRate,
|
||||||
|
HorizonOCConfigValue_EnableUnsafeDisplayFreqs,
|
||||||
HocClkConfigValue_FixCpuVoltBug,
|
HocClkConfigValue_FixCpuVoltBug,
|
||||||
|
|
||||||
KipConfigValue_custRev,
|
KipConfigValue_custRev,
|
||||||
@@ -239,6 +239,9 @@ static inline const char* sysclkFormatConfigValue(SysClkConfigValue val, bool pr
|
|||||||
case HocClkConfigValue_FixCpuVoltBug:
|
case HocClkConfigValue_FixCpuVoltBug:
|
||||||
return pretty ? "Fix CPU Volt Bug" : "cpu_volt_bugfix";
|
return pretty ? "Fix CPU Volt Bug" : "cpu_volt_bugfix";
|
||||||
|
|
||||||
|
case HorizonOCConfigValue_EnableUnsafeDisplayFreqs:
|
||||||
|
return pretty ? "Enable Unsafe Display Frequencies" : "drr_unsafe";
|
||||||
|
|
||||||
// KIP config values
|
// KIP config values
|
||||||
case KipConfigValue_custRev:
|
case KipConfigValue_custRev:
|
||||||
return pretty ? "Custom Revision" : "kip_cust_rev";
|
return pretty ? "Custom Revision" : "kip_cust_rev";
|
||||||
@@ -407,6 +410,7 @@ static inline uint64_t sysclkDefaultConfigValue(SysClkConfigValue val)
|
|||||||
case HocClkConfigValue_KipFileName:
|
case HocClkConfigValue_KipFileName:
|
||||||
case HorizonOCConfigValue_BatteryChargeCurrent:
|
case HorizonOCConfigValue_BatteryChargeCurrent:
|
||||||
case HorizonOCConfigValue_OverwriteRefreshRate:
|
case HorizonOCConfigValue_OverwriteRefreshRate:
|
||||||
|
case HorizonOCConfigValue_EnableUnsafeDisplayFreqs:
|
||||||
return 0ULL;
|
return 0ULL;
|
||||||
case HocClkConfigValue_EristaMaxCpuClock:
|
case HocClkConfigValue_EristaMaxCpuClock:
|
||||||
return 1785ULL;
|
return 1785ULL;
|
||||||
@@ -468,6 +472,7 @@ static inline uint64_t sysclkValidConfigValue(SysClkConfigValue val, uint64_t in
|
|||||||
case HocClkConfigValue_KipFileName:
|
case HocClkConfigValue_KipFileName:
|
||||||
case HorizonOCConfigValue_OverwriteRefreshRate:
|
case HorizonOCConfigValue_OverwriteRefreshRate:
|
||||||
case HocClkConfigValue_FixCpuVoltBug:
|
case HocClkConfigValue_FixCpuVoltBug:
|
||||||
|
case HorizonOCConfigValue_EnableUnsafeDisplayFreqs:
|
||||||
return (input & 0x1) == input;
|
return (input & 0x1) == input;
|
||||||
|
|
||||||
case KipConfigValue_custRev:
|
case KipConfigValue_custRev:
|
||||||
|
|||||||
@@ -269,15 +269,20 @@ void AppProfileGui::addModuleListItemValue(
|
|||||||
|
|
||||||
void AppProfileGui::addProfileUI(SysClkProfile profile)
|
void AppProfileGui::addProfileUI(SysClkProfile profile)
|
||||||
{
|
{
|
||||||
|
Result rc = sysclkIpcGetConfigValues(&configList); // idk why this is needed, probably some refreshing issue
|
||||||
|
if (R_FAILED(rc)) [[unlikely]] {
|
||||||
|
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
this->listElement->addItem(new tsl::elm::CategoryHeader(sysclkFormatProfile(profile, true) + std::string(" ") + ult::DIVIDER_SYMBOL + " Reset"));
|
this->listElement->addItem(new tsl::elm::CategoryHeader(sysclkFormatProfile(profile, true) + std::string(" ") + ult::DIVIDER_SYMBOL + " Reset"));
|
||||||
this->addModuleListItem(profile, SysClkModule_CPU);
|
this->addModuleListItem(profile, SysClkModule_CPU);
|
||||||
this->addModuleListItem(profile, SysClkModule_GPU);
|
this->addModuleListItem(profile, SysClkModule_GPU);
|
||||||
this->addModuleListItem(profile, SysClkModule_MEM);
|
this->addModuleListItem(profile, SysClkModule_MEM);
|
||||||
#if IS_MINIMAL == 0
|
#if IS_MINIMAL == 0
|
||||||
ValueThresholds lcdThresholds(60, 65);
|
ValueThresholds lcdThresholds(60, 65);
|
||||||
if(!IsHoag()) {
|
if(!IsHoag() && configList.values[HorizonOCConfigValue_OverwriteRefreshRate]) {
|
||||||
if(profile != SysClkProfile_Docked)
|
if(profile != SysClkProfile_Docked)
|
||||||
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 40, 72, 1, " Hz", 1, 0, lcdThresholds);
|
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 40, configList.values[HorizonOCConfigValue_EnableUnsafeDisplayFreqs] ? 72 : 60, 1, " Hz", 1, 0, lcdThresholds);
|
||||||
else
|
else
|
||||||
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 50, 120, 5, " Hz", 1, 0);
|
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 50, 120, 5, " Hz", 1, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -195,6 +195,12 @@ void BaseMenuGui::refresh()
|
|||||||
FatalGui::openWithResultCode("sysclkIpcGetCurrentContext", rc);
|
FatalGui::openWithResultCode("sysclkIpcGetCurrentContext", rc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc = sysclkIpcGetConfigValues(&configList);
|
||||||
|
if (R_FAILED(rc)) [[unlikely]] {
|
||||||
|
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// dockedHighestAllowedRefreshRate = this->context->maxDisplayFreq;
|
// dockedHighestAllowedRefreshRate = this->context->maxDisplayFreq;
|
||||||
|
|
||||||
// === FORMAT ALL DISPLAY STRINGS (once per second) ===
|
// === FORMAT ALL DISPLAY STRINGS (once per second) ===
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class BaseMenuGui : public BaseGui
|
|||||||
// u8 dockedHighestAllowedRefreshRate = 60;
|
// u8 dockedHighestAllowedRefreshRate = 60;
|
||||||
SysClkContext* context;
|
SysClkContext* context;
|
||||||
std::uint64_t lastContextUpdate;
|
std::uint64_t lastContextUpdate;
|
||||||
SysClkConfigValueList* configList;
|
SysClkConfigValueList configList;
|
||||||
bool g_hardwareModelCached = false;
|
bool g_hardwareModelCached = false;
|
||||||
bool g_isMariko = false;
|
bool g_isMariko = false;
|
||||||
bool g_isAula = false;
|
bool g_isAula = false;
|
||||||
|
|||||||
@@ -269,6 +269,12 @@ void GlobalOverrideGui::addModuleToggleItem(SysClkModule module)
|
|||||||
|
|
||||||
void GlobalOverrideGui::listUI()
|
void GlobalOverrideGui::listUI()
|
||||||
{
|
{
|
||||||
|
Result rc = sysclkIpcGetConfigValues(&configList); // idk why this is needed, probably some refreshing issue
|
||||||
|
if (R_FAILED(rc)) [[unlikely]] {
|
||||||
|
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this->listElement->addItem(new tsl::elm::CategoryHeader(
|
this->listElement->addItem(new tsl::elm::CategoryHeader(
|
||||||
"Temporary Overrides " + ult::DIVIDER_SYMBOL + " Reset"));
|
"Temporary Overrides " + ult::DIVIDER_SYMBOL + " Reset"));
|
||||||
this->addModuleListItem(SysClkModule_CPU);
|
this->addModuleListItem(SysClkModule_CPU);
|
||||||
@@ -276,8 +282,8 @@ void GlobalOverrideGui::listUI()
|
|||||||
this->addModuleListItem(SysClkModule_MEM);
|
this->addModuleListItem(SysClkModule_MEM);
|
||||||
#if IS_MINIMAL == 0
|
#if IS_MINIMAL == 0
|
||||||
ValueThresholds lcdThresholds(60, 65);
|
ValueThresholds lcdThresholds(60, 65);
|
||||||
if(!IsHoag())
|
if(!IsHoag() && configList.values[HorizonOCConfigValue_OverwriteRefreshRate])
|
||||||
this->addModuleListItemValue(HorizonOCModule_Display, "Display", 40, 72, 1, " Hz", 1, 0, lcdThresholds);
|
this->addModuleListItemValue(HorizonOCModule_Display, "Display", 40, configList.values[HorizonOCConfigValue_EnableUnsafeDisplayFreqs] ? 72 : 60, 1, " Hz", 1, 0, lcdThresholds);
|
||||||
#endif
|
#endif
|
||||||
this->addModuleToggleItem(HorizonOCModule_Governor);
|
this->addModuleToggleItem(HorizonOCModule_Governor);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -406,6 +406,15 @@ void MiscGui::listUI()
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
addConfigToggle(HorizonOCConfigValue_OverwriteRefreshRate, nullptr);
|
addConfigToggle(HorizonOCConfigValue_OverwriteRefreshRate, nullptr);
|
||||||
|
tsl::elm::CustomDrawer* warningText = new tsl::elm::CustomDrawer([](tsl::gfx::Renderer *renderer, s32 x, s32 y, s32 w, s32 h) {
|
||||||
|
renderer->drawString("\uE150 Enabling unsafe display", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
|
||||||
|
renderer->drawString("refresh rates may cause stress", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
|
||||||
|
renderer->drawString("or damage to your display! ", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
|
||||||
|
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
|
||||||
|
});
|
||||||
|
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 110);
|
||||||
|
this->listElement->addItem(warningText);
|
||||||
|
addConfigToggle(HorizonOCConfigValue_EnableUnsafeDisplayFreqs, nullptr);
|
||||||
} else {
|
} else {
|
||||||
std::vector<NamedValue> chargerCurrents = {
|
std::vector<NamedValue> chargerCurrents = {
|
||||||
NamedValue("Disabled", 0),
|
NamedValue("Disabled", 0),
|
||||||
@@ -675,7 +684,7 @@ protected:
|
|||||||
renderer->drawString("\uE150 This feature is EXPERIMENTAL", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
|
renderer->drawString("\uE150 This feature is EXPERIMENTAL", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
|
||||||
renderer->drawString("and should only be used for testing!", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
|
renderer->drawString("and should only be used for testing!", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
|
||||||
});
|
});
|
||||||
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 150);
|
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 70);
|
||||||
this->listElement->addItem(warningText);
|
this->listElement->addItem(warningText);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -817,7 +826,10 @@ protected:
|
|||||||
);
|
);
|
||||||
|
|
||||||
std::vector<NamedValue> maxClkOptions = {
|
std::vector<NamedValue> maxClkOptions = {
|
||||||
// NamedValue("1963MHz", 1963000),
|
NamedValue("1963MHz", 1963000),
|
||||||
|
NamedValue("2091MHz", 2091000),
|
||||||
|
NamedValue("2193MHz", 2193000),
|
||||||
|
NamedValue("2295MHz", 2295000),
|
||||||
NamedValue("2397MHz", 2397000),
|
NamedValue("2397MHz", 2397000),
|
||||||
NamedValue("2499MHz", 2499000),
|
NamedValue("2499MHz", 2499000),
|
||||||
NamedValue("2601MHz", 2601000),
|
NamedValue("2601MHz", 2601000),
|
||||||
@@ -1139,10 +1151,10 @@ protected:
|
|||||||
renderer->drawString("\uE150 Setting GPU Clocks past", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
|
renderer->drawString("\uE150 Setting GPU Clocks past", false, x + 20, y + 30, 18, tsl::style::color::ColorText);
|
||||||
renderer->drawString("1075MHz without UV, 1152MHz on SLT", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
|
renderer->drawString("1075MHz without UV, 1152MHz on SLT", false, x + 20, y + 50, 18, tsl::style::color::ColorText);
|
||||||
renderer->drawString("or 1228MHz on HiOPT can cause ", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
|
renderer->drawString("or 1228MHz on HiOPT can cause ", false, x + 20, y + 70, 18, tsl::style::color::ColorText);
|
||||||
renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 900, 18, tsl::style::color::ColorText);
|
renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
|
||||||
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText);
|
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText);
|
||||||
});
|
});
|
||||||
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 150);
|
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 130);
|
||||||
this->listElement->addItem(warningText);
|
this->listElement->addItem(warningText);
|
||||||
|
|
||||||
addConfigButton(KipConfigValue_g_volt_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
|
addConfigButton(KipConfigValue_g_volt_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &MgpuVmaxThresholds, {}, mGpuVolts, false);
|
||||||
@@ -1178,7 +1190,7 @@ protected:
|
|||||||
renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
|
renderer->drawString("permanent damage to your Switch!", false, x + 20, y + 90, 18, tsl::style::color::ColorText);
|
||||||
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText);
|
renderer->drawString("Proceed at your own risk!", false, x + 20, y + 110, 18, tsl::style::color::ColorText);
|
||||||
});
|
});
|
||||||
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 150);
|
warningText->setBoundaries(0, 0, tsl::cfg::FramebufferWidth, 130);
|
||||||
this->listElement->addItem(warningText);
|
this->listElement->addItem(warningText);
|
||||||
|
|
||||||
addConfigButton(KipConfigValue_g_volt_e_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
|
addConfigButton(KipConfigValue_g_volt_e_76800, "76.8MHz", ValueRange(0, 0, 0, "0", 1), "Voltage", &EgpuVmaxThresholds, {}, eGpuVolts, false);
|
||||||
|
|||||||
Reference in New Issue
Block a user