From 0be0cacafb86bb85f3e24d518c531c422d60aa3b Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Fri, 12 Jun 2026 00:19:48 +0200 Subject: [PATCH 1/5] gpu_fdinfo: fix msm_dpu sensor detection --- src/gpu_fdinfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpu_fdinfo.cpp b/src/gpu_fdinfo.cpp index 0fdd99e836..229cd9be2c 100644 --- a/src/gpu_fdinfo.cpp +++ b/src/gpu_fdinfo.cpp @@ -175,7 +175,7 @@ void GPU_fdinfo::find_hwmon_sensors() { std::string hwmon; - if (module == "msm") + if (module == "msm_dpu") hwmon = find_hwmon_sensor_dir("gpu"); else if (module == "panfrost" || module == "panthor") hwmon = find_hwmon_sensor_dir("gpu_thermal"); From eba872f90383a229617bab2c97ec8336d3a3b43b Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Sun, 14 Jun 2026 22:23:53 +0200 Subject: [PATCH 2/5] gpu_fdinfo: Add memory-type for msm_dpu --- src/gpu_fdinfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gpu_fdinfo.h b/src/gpu_fdinfo.h index 97e62e5265..877b8b91c5 100644 --- a/src/gpu_fdinfo.h +++ b/src/gpu_fdinfo.h @@ -144,8 +144,8 @@ class GPU_fdinfo { drm_engine_type = "drm-engine-gfx"; drm_memory_type = "drm-memory-vram"; } else if (module == "msm_dpu") { - // msm driver does not report vram usage drm_engine_type = "drm-engine-gpu"; + drm_memory_type = "drm-resident-memory"; } else if (module == "msm_drm") { init_kgsl(); } else if (module == "panfrost") { From 0b2badb56f8740e188cb43d42d207dafb15b31af Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Sun, 14 Jun 2026 22:28:23 +0200 Subject: [PATCH 3/5] gpu_fdinfo: fixup driver mismatch for msm_dpu --- src/gpu_fdinfo.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gpu_fdinfo.cpp b/src/gpu_fdinfo.cpp index 229cd9be2c..b54ae3b79b 100644 --- a/src/gpu_fdinfo.cpp +++ b/src/gpu_fdinfo.cpp @@ -55,6 +55,11 @@ void GPU_fdinfo::find_fd() client_id = val; } + // fixup mismatch between display engine and render engine drivers + if (module == "msm_dpu" && driver == "msm") { + driver = "msm_dpu"; + } + if (!driver.empty() && driver == module) { total++; SPDLOG_TRACE( From c6579af32b839dcecfb97596923b3440e50ab797 Mon Sep 17 00:00:00 2001 From: 17314642 <48242771@protonmail.ch> Date: Sun, 21 Jun 2026 13:11:43 +0000 Subject: [PATCH 4/5] next: add process vram for msm_dpu --- mangohud-next/server/metrics/gpu/msm/dpu.cpp | 4 ++++ mangohud-next/server/metrics/gpu/msm/dpu.hpp | 1 + 2 files changed, 5 insertions(+) diff --git a/mangohud-next/server/metrics/gpu/msm/dpu.cpp b/mangohud-next/server/metrics/gpu/msm/dpu.cpp index 3b2da1ce4a..ccea63692f 100644 --- a/mangohud-next/server/metrics/gpu/msm/dpu.cpp +++ b/mangohud-next/server/metrics/gpu/msm/dpu.cpp @@ -38,3 +38,7 @@ int MSM_DPU::get_process_load(pid_t pid) { return static_cast(::lroundf(result)); } + +float MSM_DPU::get_process_vram_used(pid_t pid) { + return fdinfo.get_memory_used(pid, "drm-resident-memory"); +} diff --git a/mangohud-next/server/metrics/gpu/msm/dpu.hpp b/mangohud-next/server/metrics/gpu/msm/dpu.hpp index a4f0d37675..e7e602594b 100644 --- a/mangohud-next/server/metrics/gpu/msm/dpu.hpp +++ b/mangohud-next/server/metrics/gpu/msm/dpu.hpp @@ -28,4 +28,5 @@ class MSM_DPU : public GPU, private Hwmon, public FDInfo { // Process-related functions int get_process_load(pid_t pid) override; + float get_process_vram_used(pid_t pid) override; }; From a0386e88e20fdf27c26e2dadc0a597363ed963cb Mon Sep 17 00:00:00 2001 From: 17314642 <48242771@protonmail.ch> Date: Sun, 21 Jun 2026 13:36:11 +0000 Subject: [PATCH 5/5] README: add qualcomm support columns --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/README.md b/README.md index ff8ad2a66a..d6197b6689 100644 --- a/README.md +++ b/README.md @@ -561,6 +561,7 @@ Example output: Intel Discrete Intel Integrated Panfrost/Panthor driver + Qualcomm @@ -570,6 +571,8 @@ Example output: xe i915/xe + msm_drm (kgsl) + msm_dpu Usage% @@ -579,6 +582,8 @@ Example output: 🟢 🟢 🟢 + 🟢 + 🟢 Temperature @@ -588,6 +593,8 @@ Example output: 🟢 🔴 🟢 + 🟢 + 🟢 Junction Temperature @@ -597,6 +604,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Memory Temperature @@ -606,6 +615,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 Process VRAM @@ -615,6 +626,8 @@ Example output: 🟢 🟢 🟢 + 🔴 + 🟢 System VRAM @@ -624,6 +637,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Total VRAM @@ -633,6 +648,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Memory Clock @@ -642,6 +659,8 @@ Example output: 🔴 🔴 🔴 + 🔴 + 🔴 Core Clock @@ -651,6 +670,8 @@ Example output: 🟢 🟢 🟢 + 🟢 + 🔴 Power Usage @@ -660,6 +681,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 Throttling Status @@ -669,6 +692,8 @@ Example output: 🟢 🟢 🔴 + 🔴 + 🔴 Fan Speed @@ -678,6 +703,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 Voltage @@ -687,6 +714,8 @@ Example output: 🟢 🔴 🔴 + 🔴 + 🔴 @@ -703,3 +732,6 @@ Example output: #### Panfrost and Panthor notes - GPU usage requires `echo N | sudo tee /sys/class/drm/renderD*/device/profiling` - Where N is a number, 1 for panfrost and 3 for panthor. + +#### Qualcomm notes +- GPU usage on `msm_dpu` shows usage of the current process, not total system usage