MangoHud/src/nvml.cpp

62 lines
2.2 KiB
C++
Raw Permalink Normal View History

2021-07-16 00:28:46 +00:00
#include <spdlog/spdlog.h>
2020-02-01 01:28:31 +00:00
#include "loaders/loader_nvml.h"
#include "nvidia_info.h"
#include <iostream>
2020-05-09 23:36:09 +00:00
#include "overlay.h"
2020-02-01 01:28:31 +00:00
nvmlReturn_t result;
nvmlDevice_t nvidiaDevice;
2020-05-09 23:36:09 +00:00
nvmlPciInfo_t nvidiaPciInfo;
2020-02-01 01:47:25 +00:00
bool nvmlSuccess = false;
unsigned int nvidiaTemp = 0, nvidiaCoreClock = 0, nvidiaMemClock = 0, nvidiaPowerUsage = 0;
2020-02-01 01:28:31 +00:00
struct nvmlUtilization_st nvidiaUtilization;
struct nvmlMemory_st nvidiaMemory {};
2020-02-01 01:28:31 +00:00
bool checkNVML(const char* pciBusId){
auto& nvml = get_libnvml_loader();
2020-02-01 01:28:31 +00:00
if (nvml.IsLoaded()){
result = nvml.nvmlInit();
if (NVML_SUCCESS != result) {
SPDLOG_ERROR("Nvidia module not loaded");
2020-02-01 01:28:31 +00:00
} else {
nvmlReturn_t ret = NVML_ERROR_UNKNOWN;
if (pciBusId && ((ret = nvml.nvmlDeviceGetHandleByPciBusId(pciBusId, &nvidiaDevice)) != NVML_SUCCESS)) {
SPDLOG_ERROR("Getting device handle by PCI bus ID failed: {}", nvml.nvmlErrorString(ret));
SPDLOG_ERROR("Using index 0.");
}
if (ret != NVML_SUCCESS)
ret = nvml.nvmlDeviceGetHandleByIndex(0, &nvidiaDevice);
2020-04-10 22:01:37 +00:00
if (ret != NVML_SUCCESS)
SPDLOG_ERROR("Getting device handle failed: {}", nvml.nvmlErrorString(ret));
2020-04-10 22:01:37 +00:00
nvmlSuccess = (ret == NVML_SUCCESS);
2020-08-15 14:35:04 +00:00
if (ret == NVML_SUCCESS)
nvml.nvmlDeviceGetPciInfo_v3(nvidiaDevice, &nvidiaPciInfo);
2021-07-16 00:28:46 +00:00
return nvmlSuccess;
2020-02-01 01:28:31 +00:00
}
} else {
SPDLOG_ERROR("Failed to load NVML");
2020-02-01 01:28:31 +00:00
}
2021-07-16 00:28:46 +00:00
2020-02-04 07:48:42 +00:00
return false;
2020-05-10 12:11:56 +00:00
}
2020-02-01 01:28:31 +00:00
bool getNVMLInfo(){
nvmlReturn_t response;
auto& nvml = get_libnvml_loader();
response = nvml.nvmlDeviceGetUtilizationRates(nvidiaDevice, &nvidiaUtilization);
2020-02-01 01:28:31 +00:00
nvml.nvmlDeviceGetTemperature(nvidiaDevice, NVML_TEMPERATURE_GPU, &nvidiaTemp);
nvml.nvmlDeviceGetMemoryInfo(nvidiaDevice, &nvidiaMemory);
2020-03-01 21:01:59 +00:00
nvml.nvmlDeviceGetClockInfo(nvidiaDevice, NVML_CLOCK_GRAPHICS, &nvidiaCoreClock);
nvml.nvmlDeviceGetClockInfo(nvidiaDevice, NVML_CLOCK_MEM, &nvidiaMemClock);
nvml.nvmlDeviceGetPowerUsage(nvidiaDevice, &nvidiaPowerUsage);
2020-05-09 23:36:09 +00:00
deviceID = nvidiaPciInfo.pciDeviceId >> 16;
2020-05-10 12:11:56 +00:00
if (response == NVML_ERROR_NOT_SUPPORTED)
nvmlSuccess = false;
return nvmlSuccess;
2020-05-10 12:11:56 +00:00
}