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
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;
};
diff --git a/src/gpu_fdinfo.cpp b/src/gpu_fdinfo.cpp
index 0fdd99e836..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(
@@ -175,7 +180,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");
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") {