Merge branch 'nvml_headers'

pull/20/head
telans 4 years ago
commit dacfe111cc
No known key found for this signature in database
GPG Key ID: 195444EE92DBCB20

3
.gitmodules vendored

@ -7,3 +7,6 @@
[submodule "modules/ImGui/src"]
path = modules/ImGui/src
url = https://github.com/flightlessmango/ImGui.git
[submodule "modules/Vulkan-Headers"]
path = modules/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git

File diff suppressed because it is too large Load Diff

@ -28,6 +28,7 @@ project('mangohud',
cc = meson.get_compiler('c')
cpp = meson.get_compiler('cpp')
prog_python = import('python').find_installation('python3')
null_dep = dependency('', required : false)
pre_args = [
'-D__STDC_CONSTANT_MACROS',
@ -103,6 +104,7 @@ endif
inc_common = [
include_directories('include'),
include_directories('modules/Vulkan-Headers/include'),
]
# Check for generic C arguments
@ -171,7 +173,6 @@ endforeach
# check for dl support
if cc.has_function('dlopen')
null_dep = dependency('', required : false)
dep_dl = null_dep
else
dep_dl = cc.find_library('dl')

@ -0,0 +1 @@
Subproject commit 7264358702061d3ed819d62d3d6fd66ab1da33c3

@ -13,6 +13,10 @@
#include <string>
#include <sstream>
#include <regex>
extern "C"
{
#include "nvidia_info.h"
}
using namespace std;
int gpuLoad, gpuTemp, cpuTemp;
@ -186,17 +190,18 @@ void *cpuInfo(void *){
return NULL;
}
void *queryNvidiaSmi(void *){
vector<string> smiArray;
string nvidiaSmi = exec("nvidia-smi --query-gpu=utilization.gpu,temperature.gpu --format=csv,noheader | tr -d ' ' | head -n1 | tr -d '%'");
istringstream f(nvidiaSmi);
string s;
while (getline(f, s, ',')) {
smiArray.push_back(s);
}
gpuLoadDisplay = smiArray[0];
gpuLoad = stoi(smiArray[0]);
gpuTemp = stoi(smiArray[1]);
void *getNvidiaGpuInfo(void *){
#ifdef HAVE_NVML
if (!nvmlSuccess)
checkNvidia();
if (nvmlSuccess){
getNvidiaInfo();
gpuLoad = nvidiaUtilization.gpu;
gpuLoadDisplay = gpuLoad;
gpuTemp = nvidiaTemp;
}
#endif
pthread_detach(nvidiaSmiThread);
return NULL;

@ -37,6 +37,12 @@ vklayer_files = files(
'font_unispace.c',
)
dep_nvml = cc.find_library('nvidia-ml', required: false)
if dep_nvml.found()
vklayer_files += 'nvml.c'
pre_args += '-DHAVE_NVML'
endif
vklayer_mesa_overlay = shared_library(
'MangoHud',
util_files,
@ -59,7 +65,8 @@ vklayer_mesa_overlay = shared_library(
vulkan_wsi_deps,
libimgui_core_dep,
dep_dl,
dep_pthread],
dep_pthread,
dep_nvml],
include_directories : inc_common,
link_args : cc.get_supported_link_arguments(['-Wl,-Bsymbolic-functions', '-Wl,-z,relro']),
install : true

@ -0,0 +1,13 @@
#include <stdbool.h>
#include <stdio.h>
#include <nvml.h>
nvmlReturn_t result;
unsigned int nvidiaTemp, processSamplesCount, lastSeenTimeStamp, *vgpuInstanceSamplesCount;
nvmlValueType_t *sampleValType;
nvmlDevice_t nvidiaDevice;
struct nvmlUtilization_st nvidiaUtilization;
bool nvmlSuccess;
void checkNvidia(void);
void getNvidiaInfo(void);

@ -0,0 +1,17 @@
#include "nvidia_info.h"
#include <nvml.h>
void checkNvidia(){
result = nvmlInit();
if (NVML_SUCCESS != result) {
printf("MANGOHUD: Nvidia module not loaded\n");
} else {
nvmlSuccess = true;
}
}
void getNvidiaInfo(){
nvmlDeviceGetHandleByIndex(0, &nvidiaDevice);
nvmlDeviceGetUtilizationRates(nvidiaDevice, &nvidiaUtilization);
nvmlDeviceGetTemperature(nvidiaDevice, NVML_TEMPERATURE_GPU, &nvidiaTemp);
}

@ -914,7 +914,7 @@ static void snapshot_swapchain_frame(struct swapchain_data *data)
// get gpu usage
if (deviceName.find("GeForce") != std::string::npos)
pthread_create(&nvidiaSmiThread, NULL, &queryNvidiaSmi, NULL);
pthread_create(&nvidiaSmiThread, NULL, &getNvidiaGpuInfo, NULL);
if (deviceName.find("Radeon") != std::string::npos || deviceName.find("AMD") != std::string::npos)
pthread_create(&gpuThread, NULL, &getAmdGpuUsage, NULL);
@ -1071,7 +1071,7 @@ static void compute_swapchain_display(struct swapchain_data *data)
if (deviceName.find("GeForce") != std::string::npos || deviceName.find("Radeon") != std::string::npos || deviceName.find("AMD") != std::string::npos){
ImGui::TextColored(ImVec4(0.0, 0.502, 0.25, 1.00f), "GPU");
ImGui::SameLine(hudFirstRow);
ImGui::Text("%s%%", gpuLoadDisplay.c_str());
ImGui::Text("%i%%", gpuLoad);
// ImGui::SameLine(150);
// ImGui::Text("%s", "%");
if (instance_data->params.enabled[OVERLAY_PARAM_ENABLED_gpu_temp]){

Loading…
Cancel
Save