From 52894e4c93033f20d496cd8bc6f157a343eded84 Mon Sep 17 00:00:00 2001 From: souldbminersmwc Date: Thu, 19 Mar 2026 19:44:33 -0400 Subject: [PATCH] add resolution --- .../common/include/sysclk/clock_manager.h | 1 + .../overlay/src/ui/gui/base_menu_gui.cpp | 17 +++++++++++- .../sys-clk/sysmodule/src/clock_manager.cpp | 7 ++++- Source/sys-clk/sysmodule/src/integrations.cpp | 26 +++++++++++++++++++ Source/sys-clk/sysmodule/src/integrations.h | 1 + 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Source/sys-clk/common/include/sysclk/clock_manager.h b/Source/sys-clk/common/include/sysclk/clock_manager.h index 351ca76a..917b3701 100644 --- a/Source/sys-clk/common/include/sysclk/clock_manager.h +++ b/Source/sys-clk/common/include/sysclk/clock_manager.h @@ -50,6 +50,7 @@ typedef struct u8 dramID; bool isDram8GB; u8 fps; + u16 resolutionHeight; } SysClkContext; typedef struct diff --git a/Source/sys-clk/overlay/src/ui/gui/base_menu_gui.cpp b/Source/sys-clk/overlay/src/ui/gui/base_menu_gui.cpp index 2e017ac1..2e9e5723 100644 --- a/Source/sys-clk/overlay/src/ui/gui/base_menu_gui.cpp +++ b/Source/sys-clk/overlay/src/ui/gui/base_menu_gui.cpp @@ -58,7 +58,7 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) { // All constants pre-calculated and cached static constexpr const char* const labels[] = { - "App ID", "Profile", "CPU", "GPU", "MEM", "SoC", "Board", "Skin", "Now", "Avg", "BAT", "PMIC", "FAN", "DISP", "FPS" + "App ID", "Profile", "CPU", "GPU", "MEM", "SoC", "Board", "Skin", "Now", "Avg", "BAT", "PMIC", "FAN", "DISP", "FPS", "RES" }; static constexpr u32 dataPositions[6] = {63-3+3, 200-1, 344-1-3, 200-1, 342-1, 321-1}; @@ -169,8 +169,13 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) { renderer->drawString(displayStrings[23], false, positions[2] - 2, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Bat Age if(this->context->isSaltyNXInstalled) { + + renderer->drawString(labels[15], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // RES label + renderer->drawString(displayStrings[27], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RES + renderer->drawString(labels[14], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // FPS label renderer->drawString(displayStrings[26], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // FPS + } y+=20; @@ -295,6 +300,16 @@ void BaseMenuGui::refresh() sprintf(displayStrings[26], "%u", context->fps); } } + + if(this->context->isSaltyNXInstalled) { + if(context->resolutionHeight == 0) { + strcpy(displayStrings[27], "N/A"); + } else { + memset(displayStrings[27], 0, sizeof(displayStrings[27])); + sprintf(displayStrings[27], "%up", context->resolutionHeight); + } + } + } tsl::elm::Element* BaseMenuGui::baseUI() diff --git a/Source/sys-clk/sysmodule/src/clock_manager.cpp b/Source/sys-clk/sysmodule/src/clock_manager.cpp index b3e16b1b..6378736a 100644 --- a/Source/sys-clk/sysmodule/src/clock_manager.cpp +++ b/Source/sys-clk/sysmodule/src/clock_manager.cpp @@ -621,7 +621,7 @@ void ClockManager::HandleGovernor(uint32_t targetHz) { isCpuGovernorEnabled = newCpuGovernorState; isGpuGovernorEnabled = newGpuGovernorState; isVRREnabled = newVrrGovernorState; - + if(newCpuGovernorState == false && lastCpuGovernorState == true) { svcSleepThread(50'000'000); // thread syncing. probably a cleaner way to do this but hey, it works! Board::ResetToStockCpu(); @@ -1010,6 +1010,11 @@ bool ClockManager::RefreshContext() else this->context->fps = 254; // N/A + if(this->context->isSaltyNXInstalled) + this->context->resolutionHeight = saltyNXIntegration->GetResolutionHeight(); + else + this->context->resolutionHeight = 0; // N/A + return hasChanged; } diff --git a/Source/sys-clk/sysmodule/src/integrations.cpp b/Source/sys-clk/sysmodule/src/integrations.cpp index bd53423c..91a39caa 100644 --- a/Source/sys-clk/sysmodule/src/integrations.cpp +++ b/Source/sys-clk/sysmodule/src/integrations.cpp @@ -88,6 +88,7 @@ void SaltyNXIntegration::searchSharedMemoryBlock(uintptr_t base) { } u64 prevTid = 0; + u8 SaltyNXIntegration::GetFPS() { if (!SharedMemoryUsed) return 254; @@ -107,4 +108,29 @@ u8 SaltyNXIntegration::GetFPS() { } return NxFps ? NxFps->FPS : 254; +} + +u16 SaltyNXIntegration::GetResolutionHeight() { + if (!SharedMemoryUsed) + return 0; + + u64 tid = ProcessManagement::GetCurrentApplicationId(); + if (tid == 0) + return 0; + + if (prevTid != tid) { + NxFps = 0; + prevTid = tid; + } + + if (!NxFps) { + uintptr_t base = (uintptr_t)shmemGetAddr(&_sharedmemory); + searchSharedMemoryBlock(base); + } + if(NxFps) { + NxFps -> renderCalls[0].calls = 0xFFFF; + svcSleepThread(10*1000); + return NxFps->viewportCalls[0].height; + } + return 0; } \ No newline at end of file diff --git a/Source/sys-clk/sysmodule/src/integrations.h b/Source/sys-clk/sysmodule/src/integrations.h index 0146bc36..466e2f7d 100644 --- a/Source/sys-clk/sysmodule/src/integrations.h +++ b/Source/sys-clk/sysmodule/src/integrations.h @@ -90,4 +90,5 @@ public: void LoadSharedMemory(); void searchSharedMemoryBlock(uintptr_t base); u8 GetFPS(); + u16 GetResolutionHeight(); }; \ No newline at end of file