add resolution

This commit is contained in:
souldbminersmwc
2026-03-19 19:44:33 -04:00
parent 4e0b54c1a8
commit 52894e4c93
5 changed files with 50 additions and 2 deletions

View File

@@ -50,6 +50,7 @@ typedef struct
u8 dramID;
bool isDram8GB;
u8 fps;
u16 resolutionHeight;
} SysClkContext;
typedef struct

View File

@@ -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()

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -90,4 +90,5 @@ public:
void LoadSharedMemory();
void searchSharedMemoryBlock(uintptr_t base);
u8 GetFPS();
u16 GetResolutionHeight();
};