From 5054f6ceffeac7f13a01daef85f9770997591bd8 Mon Sep 17 00:00:00 2001 From: "andrefsagh@gmail.com" Date: Wed, 19 Jul 2023 20:06:02 -0300 Subject: [PATCH] Show amdgpu voltage from hwmon Added config parameter 'gpu_voltage' --- README.md | 1 + data/MangoHud.conf | 1 + src/gpu.cpp | 8 ++++++++ src/gpu.h | 2 ++ src/hud_elements.cpp | 9 +++++++++ src/overlay.cpp | 2 ++ src/overlay_params.cpp | 1 + src/overlay_params.h | 1 + 8 files changed, 25 insertions(+) diff --git a/README.md b/README.md index 75db5579..73748939 100644 --- a/README.md +++ b/README.md @@ -364,6 +364,7 @@ Parameters that are enabled by default have to be explicitly disabled. These (cu | `gpu_load_color` | Set the colors for the gpu load change low,medium and high. e.g `gpu_load_color=0000FF,00FFFF,FF00FF` | | `gpu_load_value` | Set the values for medium and high load e.g `gpu_load_value=50,90` | | `gpu_name` | Display GPU name from pci.ids | +| `gpu_voltage` | Display GPU voltage (only works on AMD GPUs) | | `hide_fsr_sharpness` | Hides the sharpness info for the `fsr` option (only available in gamescope) | | `histogram` | Change FPS graph to histogram | | `horizontal` | Display Mangohud in a horizontal position | diff --git a/data/MangoHud.conf b/data/MangoHud.conf index dc029bde..dd301b79 100644 --- a/data/MangoHud.conf +++ b/data/MangoHud.conf @@ -87,6 +87,7 @@ gpu_stats # gpu_load_color=39F900,FDFD09,B22222 ## GPU fan in rpm (only works on AMD GPUs) # gpu_fan +# gpu_voltage (only works on AMD GPUs) ### Display the current CPU information cpu_stats diff --git a/src/gpu.cpp b/src/gpu.cpp index 13684d92..d88d29d0 100644 --- a/src/gpu.cpp +++ b/src/gpu.cpp @@ -182,5 +182,13 @@ void getAmdGpuInfo(){ value = 0; gpu_info.gtt_used = float(value) / (1024 * 1024 * 1024); } + + if (amdgpu.gpu_voltage_soc) { + rewind(amdgpu.gpu_voltage_soc); + fflush(amdgpu.gpu_voltage_soc); + if (fscanf(amdgpu.gpu_voltage_soc, "%" PRId64, &value) != 1) + value = 0; + gpu_info.voltage = value; + } #endif } diff --git a/src/gpu.h b/src/gpu.h index 07ceeb77..58753032 100644 --- a/src/gpu.h +++ b/src/gpu.h @@ -20,6 +20,7 @@ struct amdgpu_files FILE *power_usage; FILE *gtt_used; FILE *fan; + FILE *gpu_voltage_soc; }; extern amdgpu_files amdgpu; @@ -42,6 +43,7 @@ struct gpuInfo{ bool is_other_throttled; float gtt_used; int fan_speed; + int voltage; }; extern struct gpuInfo gpu_info; diff --git a/src/hud_elements.cpp b/src/hud_elements.cpp index ba193615..054555e3 100644 --- a/src/hud_elements.cpp +++ b/src/hud_elements.cpp @@ -261,6 +261,15 @@ void HudElements::gpu_stats(){ HUDElements.TextColored(HUDElements.colors.text, "W"); ImGui::PopFont(); } + + if (HUDElements.params->enabled[OVERLAY_PARAM_ENABLED_gpu_voltage]) { + ImguiNextColumnOrNewRow(); + right_aligned_text(text_color, HUDElements.ralign_width, "%i", gpu_info.voltage); + ImGui::SameLine(0, 1.0f); + ImGui::PushFont(HUDElements.sw_stats->font1); + HUDElements.TextColored(HUDElements.colors.text, "mV"); + ImGui::PopFont(); + } } } diff --git a/src/overlay.cpp b/src/overlay.cpp index 11ef001a..2aefda7f 100644 --- a/src/overlay.cpp +++ b/src/overlay.cpp @@ -886,6 +886,8 @@ void init_gpu_stats(uint32_t& vendorID, uint32_t reported_deviceID, overlay_para amdgpu.memory_temp = fopen((hwmon_path + dir + "/temp3_input").c_str(), "r"); if (!amdgpu.core_clock) amdgpu.core_clock = fopen((hwmon_path + dir + "/freq1_input").c_str(), "r"); + if (!amdgpu.gpu_voltage_soc) + amdgpu.gpu_voltage_soc = fopen((hwmon_path + dir + "/in0_input").c_str(), "r"); } if (!metrics_path.empty()) diff --git a/src/overlay_params.cpp b/src/overlay_params.cpp index a923bcb6..a46a71c9 100644 --- a/src/overlay_params.cpp +++ b/src/overlay_params.cpp @@ -607,6 +607,7 @@ static void set_param_defaults(struct overlay_params *params){ params->enabled[OVERLAY_PARAM_ENABLED_gpu_load_change] = false; params->enabled[OVERLAY_PARAM_ENABLED_cpu_load_change] = false; params->enabled[OVERLAY_PARAM_ENABLED_core_load_change] = false; + params->enabled[OVERLAY_PARAM_ENABLED_gpu_voltage] = false; params->enabled[OVERLAY_PARAM_ENABLED_legacy_layout] = true; params->enabled[OVERLAY_PARAM_ENABLED_frametime] = true; params->enabled[OVERLAY_PARAM_ENABLED_fps_only] = false; diff --git a/src/overlay_params.h b/src/overlay_params.h index 713478b5..ee1f425a 100644 --- a/src/overlay_params.h +++ b/src/overlay_params.h @@ -98,6 +98,7 @@ typedef unsigned long KeySym; OVERLAY_PARAM_BOOL(bicubic) \ OVERLAY_PARAM_BOOL(retro) \ OVERLAY_PARAM_BOOL(gpu_fan) \ + OVERLAY_PARAM_BOOL(gpu_voltage) \ OVERLAY_PARAM_BOOL(engine_short_names) \ OVERLAY_PARAM_BOOL(text_outline) \ OVERLAY_PARAM_BOOL(temp_fahrenheit) \