MangoHud/src/gpu.cpp

99 lines
2.6 KiB
C++
Raw Normal View History

2020-03-10 05:19:18 +00:00
#include "memory.h"
#include "gpu.h"
struct gpuInfo gpu_info;
amdgpu_files amdgpu {};
2020-03-10 05:19:18 +00:00
2020-05-01 21:55:21 +00:00
void getNvidiaGpuInfo(){
2020-06-09 10:44:41 +00:00
#ifdef HAVE_NVML
2020-03-10 05:19:18 +00:00
if (nvmlSuccess){
getNVMLInfo();
2020-03-10 05:19:18 +00:00
gpu_info.load = nvidiaUtilization.gpu;
gpu_info.temp = nvidiaTemp;
gpu_info.memoryUsed = nvidiaMemory.used / (1024.f * 1024.f * 1024.f);
gpu_info.CoreClock = nvidiaCoreClock;
2020-03-20 11:54:54 +00:00
gpu_info.MemClock = nvidiaMemClock;
gpu_info.powerUsage = nvidiaPowerUsage / 1000;
2020-06-09 10:44:41 +00:00
return;
}
2020-06-09 10:44:41 +00:00
#endif
#ifdef HAVE_XNVCTRL
2020-06-09 10:44:41 +00:00
if (nvctrlSuccess) {
2020-03-20 11:54:54 +00:00
getNvctrlInfo();
gpu_info.load = nvctrl_info.load;
gpu_info.temp = nvctrl_info.temp;
gpu_info.memoryUsed = nvctrl_info.memoryUsed / (1024.f);
gpu_info.CoreClock = nvctrl_info.CoreClock;
gpu_info.MemClock = nvctrl_info.MemClock;
gpu_info.powerUsage = 0;
2020-06-09 10:44:41 +00:00
return;
2020-03-10 05:19:18 +00:00
}
#endif
2020-09-07 02:38:55 +00:00
#ifdef _WIN32
nvapi_util();
#endif
2020-03-10 05:19:18 +00:00
}
void getAmdGpuInfo(){
2020-03-10 05:19:18 +00:00
int64_t value = 0;
if (amdgpu.busy) {
rewind(amdgpu.busy);
fflush(amdgpu.busy);
if (fscanf(amdgpu.busy, "%d", &gpu_info.load) != 1)
gpu_info.load = 0;
gpu_info.load = gpu_info.load;
2020-03-10 05:19:18 +00:00
}
if (amdgpu.temp) {
rewind(amdgpu.temp);
fflush(amdgpu.temp);
if (fscanf(amdgpu.temp, "%d", &gpu_info.temp) != 1)
gpu_info.temp = 0;
gpu_info.temp /= 1000;
2020-03-10 05:19:18 +00:00
}
if (amdgpu.vram_total) {
rewind(amdgpu.vram_total);
fflush(amdgpu.vram_total);
if (fscanf(amdgpu.vram_total, "%" PRId64, &value) != 1)
2020-03-10 05:19:18 +00:00
value = 0;
gpu_info.memoryTotal = float(value) / (1024 * 1024 * 1024);
2020-03-10 05:19:18 +00:00
}
if (amdgpu.vram_used) {
rewind(amdgpu.vram_used);
fflush(amdgpu.vram_used);
if (fscanf(amdgpu.vram_used, "%" PRId64, &value) != 1)
2020-03-10 05:19:18 +00:00
value = 0;
gpu_info.memoryUsed = float(value) / (1024 * 1024 * 1024);
2020-03-10 05:19:18 +00:00
}
if (amdgpu.core_clock) {
rewind(amdgpu.core_clock);
fflush(amdgpu.core_clock);
if (fscanf(amdgpu.core_clock, "%" PRId64, &value) != 1)
2020-03-10 05:19:18 +00:00
value = 0;
gpu_info.CoreClock = value / 1000000;
2020-03-10 05:19:18 +00:00
}
if (amdgpu.memory_clock) {
rewind(amdgpu.memory_clock);
fflush(amdgpu.memory_clock);
if (fscanf(amdgpu.memory_clock, "%" PRId64, &value) != 1)
2020-03-10 05:19:18 +00:00
value = 0;
gpu_info.MemClock = value / 1000000;
}
if (amdgpu.power_usage) {
rewind(amdgpu.power_usage);
fflush(amdgpu.power_usage);
if (fscanf(amdgpu.power_usage, "%" PRId64, &value) != 1)
value = 0;
gpu_info.powerUsage = value / 1000000;
2020-03-10 05:19:18 +00:00
}
2020-05-10 12:11:56 +00:00
}