Use gpu_metrics instead of libdrm when available
parent
8e2c7e8524
commit
6dc8f53ab2
@ -1,10 +1,37 @@
|
|||||||
#include "amdgpu.h"
|
#include "amdgpu.h"
|
||||||
#include "overlay.h"
|
#include "overlay.h"
|
||||||
|
|
||||||
struct gpu_metrics_v2_2 amdgpu_metrics;
|
std::string metrics_path = "";
|
||||||
|
|
||||||
void amdgpu_get_metrics()
|
void amdgpu_get_metrics()
|
||||||
{
|
{
|
||||||
std::ifstream in("/sys/class/drm/renderD128/device/gpu_metrics", std::ios_base::in | std::ios_base::binary);
|
if (!metrics_path.empty()){
|
||||||
in.read((char*)&amdgpu_metrics, sizeof(amdgpu_metrics));
|
struct metrics_table_header header;
|
||||||
|
std::ifstream in(metrics_path, std::ios_base::in | std::ios_base::binary);
|
||||||
|
in.read((char*)&header, sizeof(header));
|
||||||
|
if (header.format_revision == 1){
|
||||||
|
// Desktop GPUs
|
||||||
|
struct gpu_metrics_v1_3 amdgpu_metrics;
|
||||||
|
in.clear();
|
||||||
|
in.seekg(0);
|
||||||
|
in.read((char*)&amdgpu_metrics, sizeof(amdgpu_metrics));
|
||||||
|
gpu_info.load = amdgpu_metrics.average_gfx_activity;
|
||||||
|
gpu_info.CoreClock = amdgpu_metrics.average_gfxclk_frequency;
|
||||||
|
gpu_info.powerUsage = amdgpu_metrics.average_socket_power;
|
||||||
|
gpu_info.temp = amdgpu_metrics.temperature_edge;
|
||||||
|
gpu_info.MemClock = amdgpu_metrics.current_uclk;
|
||||||
|
} else if (header.format_revision == 2){
|
||||||
|
// APUs
|
||||||
|
struct gpu_metrics_v2_2 amdgpu_metrics;
|
||||||
|
in.clear();
|
||||||
|
in.seekg(0);
|
||||||
|
in.read((char*)&amdgpu_metrics, sizeof(amdgpu_metrics));
|
||||||
|
gpu_info.load = amdgpu_metrics.average_gfx_activity;
|
||||||
|
gpu_info.CoreClock = amdgpu_metrics.average_gfxclk_frequency;
|
||||||
|
gpu_info.powerUsage = amdgpu_metrics.average_gfx_power;
|
||||||
|
gpu_info.temp = amdgpu_metrics.temperature_gfx / 100;
|
||||||
|
gpu_info.MemClock = amdgpu_metrics.current_uclk;
|
||||||
|
gpu_info.apu_cpu_power = amdgpu_metrics.average_cpu_power;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue