feature: Support AMDGPU Data Collection (#1641)
* gpu: support amdgpu tracking Co-authored-by: lvxnull2 <184518908+lvxnull2@users.noreply.github.com> * gpu: dependency-free amdgpu parsing gpu: fix clippy issues Co-authored-by: lvxnull2 <184518908+lvxnull2@users.noreply.github.com> * gpu: change memory usage percentage to be scaled to total memory instead of current memory usage gpu: requested syntax changes Co-authored-by: lvxnull2 <184518908+lvxnull2@users.noreply.github.com> --------- Co-authored-by: lvxnull2 <184518908+lvxnull2@users.noreply.github.com>
This commit is contained in:
parent
797179b3dc
commit
479276bd53
|
@ -79,9 +79,9 @@ see information on these options by running `btm -h`, or run `btm --help` to dis
|
|||
|
||||
## GPU Options
|
||||
|
||||
| Option | Behaviour |
|
||||
| --------------- | --------------------------------------------------------- |
|
||||
| `--disable_gpu` | Disable collecting and displaying NVIDIA GPU information. |
|
||||
| Option | Behaviour |
|
||||
| --------------- | ----------------------------------------------------------------- |
|
||||
| `--disable_gpu` | Disable collecting and displaying NVIDIA and AMD GPU information. |
|
||||
|
||||
## Style Options
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ each time:
|
|||
| `network_use_binary_prefix` | Boolean | Displays the network widget with binary prefixes. |
|
||||
| `network_use_bytes` | Boolean | Displays the network widget using bytes. |
|
||||
| `network_use_log` | Boolean | Displays the network widget with a log scale. |
|
||||
| `disable_gpu` | Boolean | Disable NVIDIA GPU data collection. |
|
||||
| `disable_gpu` | Boolean | Disable NVIDIA and AMD GPU data collection. |
|
||||
| `retention` | String (human readable time, such as "10m", "1h", etc.) | How much data is stored at once in terms of time. |
|
||||
| `unnormalized_cpu` | Boolean | Show process CPU% without normalizing over the number of cores. |
|
||||
| `expanded` | Boolean | Expand the default widget upon starting the app. |
|
||||
|
|
|
@ -13,7 +13,7 @@ If the total RAM or swap available is 0, then it is automatically hidden from th
|
|||
|
||||
One can also adjust the displayed time range through either the keyboard or mouse, with a range of 30s to 600s.
|
||||
|
||||
This widget can also be configured to display Nvidia GPU memory usage (`--disable_gpu` on Linux/Windows to disable) or cache memory usage (`--enable_cache_memory`).
|
||||
This widget can also be configured to display Nvidia and AMD GPU memory usage (`--disable_gpu` on Linux/Windows to disable) or cache memory usage (`--enable_cache_memory`).
|
||||
|
||||
## Key bindings
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ The temperature widget provides a table of temperature sensors and their current
|
|||
|
||||
The temperature widget provides the sensor name as well as its current temperature.
|
||||
|
||||
This widget can also be configured to display Nvidia GPU temperatures (`--disable_gpu` on Linux/Windows to disable).
|
||||
This widget can also be configured to display Nvidia and AMD GPU temperatures (`--disable_gpu` on Linux/Windows to disable).
|
||||
|
||||
## Key bindings
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#[cfg(feature = "nvidia")]
|
||||
pub mod nvidia;
|
||||
|
||||
#[cfg(all(target_os = "linux", feature = "gpu"))]
|
||||
pub mod amd;
|
||||
|
||||
#[cfg(feature = "battery")]
|
||||
pub mod batteries;
|
||||
|
||||
|
@ -347,6 +350,10 @@ impl DataCollector {
|
|||
#[inline]
|
||||
fn update_gpus(&mut self) {
|
||||
if self.widgets_to_harvest.use_gpu {
|
||||
let mut local_gpu: Vec<(String, memory::MemHarvest)> = Vec::new();
|
||||
let mut local_gpu_pids: Vec<HashMap<u32, (u64, u32)>> = Vec::new();
|
||||
let mut local_gpu_total_mem: u64 = 0;
|
||||
|
||||
#[cfg(feature = "nvidia")]
|
||||
if let Some(data) = nvidia::get_nvidia_vecs(
|
||||
&self.temperature_type,
|
||||
|
@ -360,14 +367,41 @@ impl DataCollector {
|
|||
self.data.temperature_sensors = Some(temp);
|
||||
}
|
||||
}
|
||||
if let Some(mem) = data.memory {
|
||||
self.data.gpu = Some(mem);
|
||||
if let Some(mut mem) = data.memory {
|
||||
local_gpu.append(&mut mem);
|
||||
}
|
||||
if let Some(proc) = data.procs {
|
||||
self.gpu_pids = Some(proc.1);
|
||||
self.gpus_total_mem = Some(proc.0);
|
||||
if let Some(mut proc) = data.procs {
|
||||
local_gpu_pids.append(&mut proc.1);
|
||||
local_gpu_total_mem += proc.0;
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
if let Some(data) = amd::get_amd_vecs(
|
||||
&self.temperature_type,
|
||||
&self.filters.temp_filter,
|
||||
&self.widgets_to_harvest,
|
||||
self.last_collection_time,
|
||||
) {
|
||||
if let Some(mut temp) = data.temperature {
|
||||
if let Some(sensors) = &mut self.data.temperature_sensors {
|
||||
sensors.append(&mut temp);
|
||||
} else {
|
||||
self.data.temperature_sensors = Some(temp);
|
||||
}
|
||||
}
|
||||
if let Some(mut mem) = data.memory {
|
||||
local_gpu.append(&mut mem);
|
||||
}
|
||||
if let Some(mut proc) = data.procs {
|
||||
local_gpu_pids.append(&mut proc.1);
|
||||
local_gpu_total_mem += proc.0;
|
||||
}
|
||||
}
|
||||
|
||||
self.data.gpu = (!local_gpu.is_empty()).then_some(local_gpu);
|
||||
self.gpu_pids = (!local_gpu_pids.is_empty()).then_some(local_gpu_pids);
|
||||
self.gpus_total_mem = (local_gpu_total_mem > 0).then_some(local_gpu_total_mem);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,511 @@
|
|||
mod amdgpu_marketing;
|
||||
|
||||
use crate::{
|
||||
app::{filter::Filter, layout_manager::UsedWidgets},
|
||||
data_collection::{
|
||||
memory::MemHarvest,
|
||||
temperature::{TempHarvest, TemperatureType},
|
||||
},
|
||||
};
|
||||
use hashbrown::{HashMap, HashSet};
|
||||
use std::{
|
||||
fs,
|
||||
fs::read_to_string,
|
||||
path::{Path, PathBuf},
|
||||
sync::{LazyLock, Mutex},
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
pub struct AMDGPUData {
|
||||
pub memory: Option<Vec<(String, MemHarvest)>>,
|
||||
pub temperature: Option<Vec<TempHarvest>>,
|
||||
pub procs: Option<(u64, Vec<HashMap<u32, (u64, u32)>>)>,
|
||||
}
|
||||
|
||||
pub struct AMDGPUMemory {
|
||||
pub total: u64,
|
||||
pub used: u64,
|
||||
}
|
||||
|
||||
pub struct AMDGPUTemperature {
|
||||
pub name: String,
|
||||
pub temperature: f32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, Eq, PartialEq)]
|
||||
pub struct AMDGPUProc {
|
||||
pub vram_usage: u64,
|
||||
pub gfx_usage: u64,
|
||||
pub dma_usage: u64,
|
||||
pub enc_usage: u64,
|
||||
pub dec_usage: u64,
|
||||
pub uvd_usage: u64,
|
||||
pub vcn_usage: u64,
|
||||
pub vpe_usage: u64,
|
||||
pub compute_usage: u64,
|
||||
}
|
||||
|
||||
// needs previous state for usage calculation
|
||||
static PROC_DATA: LazyLock<Mutex<HashMap<PathBuf, HashMap<u32, AMDGPUProc>>>> =
|
||||
LazyLock::new(|| Mutex::new(HashMap::new()));
|
||||
|
||||
pub fn get_amd_devs() -> Option<Vec<PathBuf>> {
|
||||
let mut devices = Vec::new();
|
||||
|
||||
// read all PCI devices controlled by the AMDGPU module
|
||||
let Ok(paths) = fs::read_dir("/sys/module/amdgpu/drivers/pci:amdgpu") else {
|
||||
return None;
|
||||
};
|
||||
|
||||
for path in paths {
|
||||
let Ok(path) = path else { continue };
|
||||
|
||||
// test if it has a valid vendor path
|
||||
let device_path = path.path();
|
||||
let test_path = device_path.join("vendor");
|
||||
if test_path.as_path().exists() {
|
||||
devices.push(device_path);
|
||||
}
|
||||
}
|
||||
|
||||
if devices.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(devices)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_amd_name(device_path: &Path) -> Option<String> {
|
||||
// get revision and device ids from sysfs
|
||||
let rev_path = device_path.join("revision");
|
||||
let dev_path = device_path.join("device");
|
||||
|
||||
if !rev_path.exists() || !dev_path.exists() {
|
||||
return None;
|
||||
}
|
||||
|
||||
// read and remove newlines, 0x0 suffix.
|
||||
let mut rev_data = read_to_string(rev_path).unwrap_or("0x00".to_string());
|
||||
let mut dev_data = read_to_string(dev_path).unwrap_or("0x0000".to_string());
|
||||
|
||||
rev_data = rev_data.trim_end().to_string();
|
||||
dev_data = dev_data.trim_end().to_string();
|
||||
|
||||
if rev_data.starts_with("0x") {
|
||||
rev_data = rev_data.strip_prefix("0x").unwrap().to_string();
|
||||
}
|
||||
|
||||
if dev_data.starts_with("0x") {
|
||||
dev_data = dev_data.strip_prefix("0x").unwrap().to_string();
|
||||
}
|
||||
|
||||
let revision_id = u32::from_str_radix(&rev_data, 16).unwrap_or(0);
|
||||
let device_id = u32::from_str_radix(&dev_data, 16).unwrap_or(0);
|
||||
|
||||
if device_id == 0 {
|
||||
return None;
|
||||
}
|
||||
|
||||
// if it exists in our local database, use that name
|
||||
amdgpu_marketing::AMDGPU_MARKETING_NAME
|
||||
.iter()
|
||||
.find(|(did, rid, _)| (did, rid) == (&device_id, &revision_id))
|
||||
.map(|tuple| tuple.2.to_string())
|
||||
}
|
||||
|
||||
pub fn get_amd_vram(device_path: &Path) -> Option<AMDGPUMemory> {
|
||||
// get vram memory info from sysfs
|
||||
let vram_total_path = device_path.join("mem_info_vram_total");
|
||||
let vram_used_path = device_path.join("mem_info_vram_used");
|
||||
|
||||
let Ok(mut vram_total_data) = read_to_string(vram_total_path) else {
|
||||
return None;
|
||||
};
|
||||
let Ok(mut vram_used_data) = read_to_string(vram_used_path) else {
|
||||
return None;
|
||||
};
|
||||
|
||||
// read and remove newlines
|
||||
vram_total_data = vram_total_data.trim_end().to_string();
|
||||
vram_used_data = vram_used_data.trim_end().to_string();
|
||||
|
||||
let Ok(vram_total) = vram_total_data.parse::<u64>() else {
|
||||
return None;
|
||||
};
|
||||
let Ok(vram_used) = vram_used_data.parse::<u64>() else {
|
||||
return None;
|
||||
};
|
||||
|
||||
Some(AMDGPUMemory {
|
||||
total: vram_total,
|
||||
used: vram_used,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn get_amd_temp(device_path: &Path) -> Option<Vec<AMDGPUTemperature>> {
|
||||
let mut temperatures = Vec::new();
|
||||
|
||||
// get hardware monitoring sensor info from sysfs
|
||||
let hwmon_root = device_path.join("hwmon");
|
||||
|
||||
let Ok(hwmon_paths) = fs::read_dir(hwmon_root) else {
|
||||
return None;
|
||||
};
|
||||
|
||||
for hwmon_dir in hwmon_paths {
|
||||
let Ok(hwmon_dir) = hwmon_dir else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let hwmon_binding = hwmon_dir.path();
|
||||
let hwmon_path = hwmon_binding.as_path();
|
||||
let Ok(hwmon_sensors) = fs::read_dir(hwmon_path) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
for hwmon_sensor_ent in hwmon_sensors {
|
||||
let Ok(hwmon_sensor_ent) = hwmon_sensor_ent else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let hwmon_sensor_path = hwmon_sensor_ent.path();
|
||||
let hwmon_sensor_binding = hwmon_sensor_ent.file_name();
|
||||
let Some(hwmon_sensor_name) = hwmon_sensor_binding.to_str() else {
|
||||
continue;
|
||||
};
|
||||
|
||||
// temperature sensors are temp{number}_{input,label}
|
||||
if !hwmon_sensor_name.starts_with("temp") || !hwmon_sensor_name.ends_with("_input") {
|
||||
continue; // filename does not start with temp or ends with input
|
||||
}
|
||||
|
||||
// construct label path
|
||||
let hwmon_sensor_label_name = hwmon_sensor_name.replace("_input", "_label");
|
||||
let hwmon_sensor_label_path = hwmon_path.join(hwmon_sensor_label_name);
|
||||
|
||||
// read and remove newlines
|
||||
let Ok(mut hwmon_sensor_data) = read_to_string(hwmon_sensor_path) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let Ok(mut hwmon_sensor_label) = read_to_string(hwmon_sensor_label_path) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
hwmon_sensor_data = hwmon_sensor_data.trim_end().to_string();
|
||||
hwmon_sensor_label = hwmon_sensor_label.trim_end().to_string();
|
||||
|
||||
let Ok(hwmon_sensor) = hwmon_sensor_data.parse::<u64>() else {
|
||||
continue;
|
||||
};
|
||||
|
||||
// uppercase first character
|
||||
if hwmon_sensor_label.is_ascii() {
|
||||
let (hwmon_sensor_label_head, hwmon_sensor_label_tail) =
|
||||
hwmon_sensor_label.split_at(1);
|
||||
|
||||
hwmon_sensor_label =
|
||||
hwmon_sensor_label_head.to_uppercase() + hwmon_sensor_label_tail;
|
||||
}
|
||||
|
||||
// 1 C is reported as 1000
|
||||
temperatures.push(AMDGPUTemperature {
|
||||
name: hwmon_sensor_label,
|
||||
temperature: (hwmon_sensor as f32) / 1000.0f32,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if temperatures.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(temperatures)
|
||||
}
|
||||
}
|
||||
|
||||
// from amdgpu_top: https://github.com/Umio-Yasuno/amdgpu_top/blob/c961cf6625c4b6d63fda7f03348323048563c584/crates/libamdgpu_top/src/stat/fdinfo/proc_info.rs#L114
|
||||
pub fn diff_usage(pre: u64, cur: u64, interval: &Duration) -> u64 {
|
||||
use std::ops::Mul;
|
||||
|
||||
let diff_ns = if pre == 0 || cur < pre {
|
||||
return 0;
|
||||
} else {
|
||||
cur.saturating_sub(pre) as u128
|
||||
};
|
||||
|
||||
diff_ns
|
||||
.mul(100)
|
||||
.checked_div(interval.as_nanos())
|
||||
.unwrap_or(0) as u64
|
||||
}
|
||||
|
||||
// from amdgpu_top: https://github.com/Umio-Yasuno/amdgpu_top/blob/c961cf6625c4b6d63fda7f03348323048563c584/crates/libamdgpu_top/src/stat/fdinfo/proc_info.rs#L13-L27
|
||||
pub fn get_amdgpu_pid_fds(pid: u32, device_path: Vec<PathBuf>) -> Option<Vec<u32>> {
|
||||
let Ok(fd_list) = fs::read_dir(format!("/proc/{pid}/fd/")) else {
|
||||
return None;
|
||||
};
|
||||
|
||||
let valid_fds: Vec<u32> = fd_list
|
||||
.filter_map(|fd_link| {
|
||||
let dir_entry = fd_link.map(|fd_link| fd_link.path()).ok()?;
|
||||
let link = fs::read_link(&dir_entry).ok()?;
|
||||
|
||||
// e.g. "/dev/dri/renderD128" or "/dev/dri/card0"
|
||||
if device_path.iter().any(|path| link.starts_with(path)) {
|
||||
dir_entry.file_name()?.to_str()?.parse::<u32>().ok()
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
if valid_fds.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(valid_fds)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_amdgpu_drm(device_path: &Path) -> Option<Vec<PathBuf>> {
|
||||
let mut drm_devices = Vec::new();
|
||||
let drm_root = device_path.join("drm");
|
||||
|
||||
let Ok(drm_paths) = fs::read_dir(drm_root) else {
|
||||
return None;
|
||||
};
|
||||
|
||||
for drm_dir in drm_paths {
|
||||
let Ok(drm_dir) = drm_dir else {
|
||||
continue;
|
||||
};
|
||||
|
||||
// attempt to get the device renderer name
|
||||
let drm_name = drm_dir.file_name();
|
||||
let Some(drm_name) = drm_name.to_str() else {
|
||||
continue;
|
||||
};
|
||||
|
||||
// construct driver device path if valid
|
||||
if !drm_name.starts_with("card") && !drm_name.starts_with("render") {
|
||||
continue;
|
||||
}
|
||||
|
||||
drm_devices.push(PathBuf::from(format!("/dev/dri/{drm_name}")));
|
||||
}
|
||||
|
||||
if drm_devices.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(drm_devices)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_amd_fdinfo(device_path: &Path) -> Option<HashMap<u32, AMDGPUProc>> {
|
||||
let mut fdinfo = HashMap::new();
|
||||
|
||||
let drm_paths = get_amdgpu_drm(device_path)?;
|
||||
|
||||
let Ok(proc_dir) = fs::read_dir("/proc") else {
|
||||
return None;
|
||||
};
|
||||
|
||||
let pids: Vec<u32> = proc_dir
|
||||
.filter_map(|dir_entry| {
|
||||
// check if pid is valid
|
||||
let dir_entry = dir_entry.ok()?;
|
||||
let metadata = dir_entry.metadata().ok()?;
|
||||
|
||||
if !metadata.is_dir() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let pid = dir_entry.file_name().to_str()?.parse::<u32>().ok()?;
|
||||
|
||||
// skip init process
|
||||
if pid == 1 {
|
||||
return None;
|
||||
}
|
||||
|
||||
Some(pid)
|
||||
})
|
||||
.collect();
|
||||
|
||||
for pid in pids {
|
||||
// collect file descriptors that point to our device renderers
|
||||
let Some(fds) = get_amdgpu_pid_fds(pid, drm_paths.clone()) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let mut usage: AMDGPUProc = Default::default();
|
||||
|
||||
let mut observed_ids: HashSet<usize> = HashSet::new();
|
||||
|
||||
for fd in fds {
|
||||
let fdinfo_path = format!("/proc/{pid}/fdinfo/{fd}");
|
||||
let Ok(fdinfo_data) = read_to_string(fdinfo_path) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let mut fdinfo_lines = fdinfo_data
|
||||
.lines()
|
||||
.skip_while(|l| !l.starts_with("drm-client-id"));
|
||||
if let Some(id) = fdinfo_lines.next().and_then(|fdinfo_line| {
|
||||
const LEN: usize = "drm-client-id:\t".len();
|
||||
fdinfo_line.get(LEN..)?.parse().ok()
|
||||
}) {
|
||||
if !observed_ids.insert(id) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
for fdinfo_line in fdinfo_lines {
|
||||
let Some(fdinfo_separator_index) = fdinfo_line.find(':') else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let (fdinfo_keyword, mut fdinfo_value) =
|
||||
fdinfo_line.split_at(fdinfo_separator_index);
|
||||
fdinfo_value = &fdinfo_value[1..];
|
||||
|
||||
fdinfo_value = fdinfo_value.trim();
|
||||
if let Some(fdinfo_value_space_index) = fdinfo_value.find(' ') {
|
||||
fdinfo_value = &fdinfo_value[..fdinfo_value_space_index];
|
||||
};
|
||||
|
||||
let Ok(fdinfo_value_num) = fdinfo_value.parse::<u64>() else {
|
||||
continue;
|
||||
};
|
||||
|
||||
match fdinfo_keyword {
|
||||
"drm-engine-gfx" => usage.gfx_usage += fdinfo_value_num,
|
||||
"drm-engine-dma" => usage.dma_usage += fdinfo_value_num,
|
||||
"drm-engine-dec" => usage.dec_usage += fdinfo_value_num,
|
||||
"drm-engine-enc" => usage.enc_usage += fdinfo_value_num,
|
||||
"drm-engine-enc_1" => usage.uvd_usage += fdinfo_value_num,
|
||||
"drm-engine-jpeg" => usage.vcn_usage += fdinfo_value_num,
|
||||
"drm-engine-vpe" => usage.vpe_usage += fdinfo_value_num,
|
||||
"drm-engine-compute" => usage.compute_usage += fdinfo_value_num,
|
||||
"drm-memory-vram" => usage.vram_usage += fdinfo_value_num << 10, // KiB -> B
|
||||
_ => {}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if usage != Default::default() {
|
||||
fdinfo.insert(pid, usage);
|
||||
}
|
||||
}
|
||||
|
||||
Some(fdinfo)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn get_amd_vecs(
|
||||
temp_type: &TemperatureType, filter: &Option<Filter>, widgets_to_harvest: &UsedWidgets,
|
||||
prev_time: Instant,
|
||||
) -> Option<AMDGPUData> {
|
||||
let device_path_list = get_amd_devs()?;
|
||||
let interval = Instant::now().duration_since(prev_time);
|
||||
let num_gpu = device_path_list.len();
|
||||
let mut temp_vec = Vec::with_capacity(num_gpu);
|
||||
let mut mem_vec = Vec::with_capacity(num_gpu);
|
||||
let mut proc_vec = Vec::with_capacity(num_gpu);
|
||||
let mut total_mem = 0;
|
||||
|
||||
for device_path in device_path_list {
|
||||
let device_name =
|
||||
get_amd_name(&device_path).unwrap_or(amdgpu_marketing::AMDGPU_DEFAULT_NAME.to_string());
|
||||
|
||||
if let Some(mem) = get_amd_vram(&device_path) {
|
||||
if widgets_to_harvest.use_mem {
|
||||
mem_vec.push((
|
||||
device_name.clone(),
|
||||
MemHarvest {
|
||||
total_bytes: mem.total,
|
||||
used_bytes: mem.used,
|
||||
use_percent: if mem.total == 0 {
|
||||
None
|
||||
} else {
|
||||
Some(mem.used as f64 / mem.total as f64 * 100.0)
|
||||
},
|
||||
},
|
||||
));
|
||||
}
|
||||
|
||||
total_mem += mem.total
|
||||
}
|
||||
|
||||
if widgets_to_harvest.use_temp && Filter::optional_should_keep(filter, &device_name) {
|
||||
if let Some(temperatures) = get_amd_temp(&device_path) {
|
||||
for info in temperatures {
|
||||
let temperature = temp_type.convert_temp_unit(info.temperature);
|
||||
|
||||
temp_vec.push(TempHarvest {
|
||||
name: format!("{} {}", device_name, info.name),
|
||||
temperature: Some(temperature),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if widgets_to_harvest.use_proc {
|
||||
if let Some(procs) = get_amd_fdinfo(&device_path) {
|
||||
let mut proc_info = PROC_DATA.lock().unwrap();
|
||||
let _ = proc_info.try_insert(device_path.clone(), HashMap::new());
|
||||
let prev_fdinfo = proc_info.get_mut(&device_path).unwrap();
|
||||
|
||||
let mut procs_map = HashMap::new();
|
||||
for (proc_pid, proc_usage) in procs {
|
||||
if let Some(prev_usage) = prev_fdinfo.get_mut(&proc_pid) {
|
||||
// calculate deltas
|
||||
let gfx_usage =
|
||||
diff_usage(prev_usage.gfx_usage, proc_usage.gfx_usage, &interval);
|
||||
let dma_usage =
|
||||
diff_usage(prev_usage.dma_usage, proc_usage.dma_usage, &interval);
|
||||
let enc_usage =
|
||||
diff_usage(prev_usage.enc_usage, proc_usage.enc_usage, &interval);
|
||||
let dec_usage =
|
||||
diff_usage(prev_usage.dec_usage, proc_usage.dec_usage, &interval);
|
||||
let uvd_usage =
|
||||
diff_usage(prev_usage.uvd_usage, proc_usage.uvd_usage, &interval);
|
||||
let vcn_usage =
|
||||
diff_usage(prev_usage.vcn_usage, proc_usage.vcn_usage, &interval);
|
||||
let vpe_usage =
|
||||
diff_usage(prev_usage.vpe_usage, proc_usage.vpe_usage, &interval);
|
||||
|
||||
// combined usage
|
||||
let gpu_util_wide = gfx_usage
|
||||
+ dma_usage
|
||||
+ enc_usage
|
||||
+ dec_usage
|
||||
+ uvd_usage
|
||||
+ vcn_usage
|
||||
+ vpe_usage;
|
||||
|
||||
let gpu_util: u32 = gpu_util_wide.try_into().unwrap_or(0);
|
||||
|
||||
if gpu_util > 0 || proc_usage.vram_usage > 0 {
|
||||
procs_map.insert(proc_pid, (proc_usage.vram_usage, gpu_util));
|
||||
}
|
||||
|
||||
*prev_usage = proc_usage;
|
||||
} else {
|
||||
prev_fdinfo.insert(proc_pid, proc_usage);
|
||||
}
|
||||
}
|
||||
|
||||
if !procs_map.is_empty() {
|
||||
proc_vec.push(procs_map);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Some(AMDGPUData {
|
||||
memory: (!mem_vec.is_empty()).then_some(mem_vec),
|
||||
temperature: (!temp_vec.is_empty()).then_some(temp_vec),
|
||||
procs: (!proc_vec.is_empty()).then_some((total_mem, proc_vec)),
|
||||
})
|
||||
}
|
|
@ -0,0 +1,646 @@
|
|||
// from https://github.com/GPUOpen-Tools/device_info/blob/master/DeviceInfo.cpp
|
||||
|
||||
pub const AMDGPU_DEFAULT_NAME: &str = "AMD Radeon Graphics";
|
||||
|
||||
pub const AMDGPU_MARKETING_NAME: &[(u32, u32, &str)] = &[
|
||||
(0x6798, 0x00, "AMD Radeon R9 200 / HD 7900 Series"),
|
||||
(0x6799, 0x00, "AMD Radeon HD 7900 Series"),
|
||||
(0x679A, 0x00, "AMD Radeon HD 7900 Series"),
|
||||
(0x679B, 0x00, "AMD Radeon HD 7900 Series"),
|
||||
(0x679E, 0x00, "AMD Radeon HD 7800 Series"),
|
||||
(0x6780, 0x00, "AMD FirePro W9000"),
|
||||
(0x6784, 0x00, "ATI FirePro V (FireGL V) Graphics Adapter"),
|
||||
(0x6788, 0x00, "ATI FirePro V (FireGL V) Graphics Adapter"),
|
||||
(0x678A, 0x00, "AMD FirePro W8000"),
|
||||
(0x6818, 0x00, "AMD Radeon HD 7800 Series"),
|
||||
(0x6819, 0x00, "AMD Radeon HD 7800 Series"),
|
||||
(0x6808, 0x00, "AMD FirePro W7000"),
|
||||
(0x6809, 0x00, "ATI FirePro W5000"),
|
||||
(0x684C, 0x00, "ATI FirePro V (FireGL V) Graphics Adapter"),
|
||||
(0x6800, 0x00, "AMD Radeon HD 7970M"),
|
||||
(0x6801, 0x00, "AMD Radeon HD8970M"),
|
||||
(0x6806, 0x00, "AMD Radeon R9 M290X"),
|
||||
(0x6810, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x6810, 0x81, "AMD Radeon R9 370 Series"),
|
||||
(0x6811, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x6811, 0x81, "AMD Radeon R7 370 Series"),
|
||||
(0x6820, 0x00, "AMD Radeon R9 M275X"),
|
||||
(0x6820, 0x81, "AMD Radeon R9 M375"),
|
||||
(0x6820, 0x83, "AMD Radeon R9 M375X"),
|
||||
(0x6821, 0x00, "AMD Radeon R9 M200X Series"),
|
||||
(0x6821, 0x83, "AMD Radeon R9 M370X"),
|
||||
(0x6821, 0x87, "AMD Radeon R7 M380"),
|
||||
(0x6822, 0x00, "AMD Radeon E8860"),
|
||||
(0x6823, 0x00, "AMD Radeon R9 M200X Series"),
|
||||
(0x6825, 0x00, "AMD Radeon HD 7800M Series"),
|
||||
(0x6826, 0x00, "AMD Radeon HD 7700M Series"),
|
||||
(0x6827, 0x00, "AMD Radeon HD 7800M Series"),
|
||||
(0x682B, 0x00, "AMD Radeon HD 8800M Series"),
|
||||
(0x682B, 0x87, "AMD Radeon R9 M360"),
|
||||
(0x682D, 0x00, "AMD Radeon HD 7700M Series"),
|
||||
(0x682F, 0x00, "AMD Radeon HD 7700M Series"),
|
||||
(0x6828, 0x00, "AMD FirePro W600"),
|
||||
(0x682C, 0x00, "AMD FirePro W4100"),
|
||||
(0x6830, 0x00, "AMD Radeon 7800M Series"),
|
||||
(0x6831, 0x00, "AMD Radeon 7700M Series"),
|
||||
(0x6835, 0x00, "AMD Radeon R7 Series / HD 9000 Series"),
|
||||
(0x6837, 0x00, "AMD Radeon HD 7700 Series"),
|
||||
(0x683D, 0x00, "AMD Radeon HD 7700 Series"),
|
||||
(0x683F, 0x00, "AMD Radeon HD 7700 Series"),
|
||||
(0x6608, 0x00, "AMD FirePro W2100"),
|
||||
(0x6610, 0x00, "AMD Radeon R7 200 Series"),
|
||||
(0x6610, 0x81, "AMD Radeon R7 350"),
|
||||
(0x6610, 0x83, "AMD Radeon R5 340"),
|
||||
(0x6610, 0x87, "AMD Radeon R7 200 Series"),
|
||||
(0x6611, 0x00, "AMD Radeon R7 200 Series"),
|
||||
(0x6611, 0x87, "AMD Radeon R7 200 Series"),
|
||||
(0x6613, 0x00, "AMD Radeon R7 200 Series"),
|
||||
(0x6617, 0x00, "AMD Radeon R7 240 Series"),
|
||||
(0x6617, 0x87, "AMD Radeon R7 200 Series"),
|
||||
(0x6617, 0xC7, "AMD Radeon R7 240 Series"),
|
||||
(0x6600, 0x00, "AMD Radeon HD 8600/8700M"),
|
||||
(0x6600, 0x81, "AMD Radeon R7 M370"),
|
||||
(0x6601, 0x00, "AMD Radeon HD 8500M/8700M"),
|
||||
(0x6604, 0x00, "AMD Radeon R7 M265 Series"),
|
||||
(0x6604, 0x81, "AMD Radeon R7 M350"),
|
||||
(0x6605, 0x00, "AMD Radeon R7 M260 Series"),
|
||||
(0x6605, 0x81, "AMD Radeon R7 M340"),
|
||||
(0x6606, 0x00, "AMD Radeon HD 8790M"),
|
||||
(0x6607, 0x00, "AMD Radeon R5 M240"),
|
||||
(0x6660, 0x00, "AMD Radeon HD 8600M Series"),
|
||||
(0x6660, 0x81, "AMD Radeon R5 M335"),
|
||||
(0x6660, 0x83, "AMD Radeon R5 M330"),
|
||||
(0x6663, 0x00, "AMD Radeon HD 8500M Series"),
|
||||
(0x6663, 0x83, "AMD Radeon R5 M320"),
|
||||
(0x6664, 0x00, "AMD Radeon R5 M200 Series"),
|
||||
(0x6665, 0x00, "AMD Radeon R5 M230 Series"),
|
||||
(0x6665, 0x83, "AMD Radeon R5 M320"),
|
||||
(0x6665, 0xC3, "AMD Radeon R5 M435"),
|
||||
(0x6666, 0x00, "AMD Radeon R5 M200 Series"),
|
||||
(0x6667, 0x00, "AMD Radeon R5 M200 Series"),
|
||||
(0x666F, 0x00, "AMD Radeon HD 8500M"),
|
||||
(0x6649, 0x00, "AMD FirePro W5100"),
|
||||
(0x6658, 0x00, "AMD Radeon R7 200 Series"),
|
||||
(0x665C, 0x00, "AMD Radeon HD 7700 Series"),
|
||||
(0x665D, 0x00, "AMD Radeon R7 200 Series"),
|
||||
(0x665F, 0x81, "AMD Radeon R7 360 Series"),
|
||||
(0x665F, 0x81, "AMD Radeon R7 360 Series"),
|
||||
(0x6640, 0x00, "AMD Radeon HD 8950"),
|
||||
(0x6640, 0x80, "AMD Radeon R9 M380"),
|
||||
(0x6646, 0x00, "AMD Radeon R9 M280X"),
|
||||
(0x6646, 0x80, "AMD Radeon R9 M385"),
|
||||
(0x6647, 0x00, "AMD Radeon R9 M200X Series"),
|
||||
(0x6647, 0x80, "AMD Radeon R9 M380"),
|
||||
(0x67A0, 0x00, "AMD FirePro W9100"),
|
||||
(0x67A1, 0x00, "AMD FirePro W8100"),
|
||||
(0x67B0, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x67B0, 0x80, "AMD Radeon R9 390 Series"),
|
||||
(0x67B1, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x67B1, 0x80, "AMD Radeon R9 390 Series"),
|
||||
(0x67B9, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x1309, 0x00, "AMD Radeon R7"),
|
||||
(0x130A, 0x00, "AMD Radeon R6"),
|
||||
(0x130C, 0x00, "AMD Radeon R7"),
|
||||
(0x130D, 0x00, "AMD Radeon R6"),
|
||||
(0x130E, 0x00, "AMD Radeon R5"),
|
||||
(0x130F, 0x00, "AMD Radeon R7"),
|
||||
(0x130F, 0xD4, "AMD Radeon R7"),
|
||||
(0x130F, 0xD5, "AMD Radeon R7"),
|
||||
(0x130F, 0xD6, "AMD Radeon R7"),
|
||||
(0x130F, 0xD7, "AMD Radeon R7"),
|
||||
(0x1313, 0x00, "AMD Radeon R7"),
|
||||
(0x1313, 0xD4, "AMD Radeon R7"),
|
||||
(0x1313, 0xD5, "AMD Radeon R7"),
|
||||
(0x1313, 0xD6, "AMD Radeon R7"),
|
||||
(0x1315, 0x00, "AMD Radeon R5"),
|
||||
(0x1315, 0xD4, "AMD Radeon R5"),
|
||||
(0x1315, 0xD5, "AMD Radeon R5"),
|
||||
(0x1315, 0xD6, "AMD Radeon R5"),
|
||||
(0x1315, 0xD7, "AMD Radeon R5"),
|
||||
(0x1318, 0x00, "AMD Radeon R5"),
|
||||
(0x131C, 0x00, "AMD Radeon R7"),
|
||||
(0x131D, 0x00, "AMD Radeon R6"),
|
||||
(0x130B, 0x00, "AMD Radeon R4"),
|
||||
(0x1316, 0x00, "AMD Radeon R5"),
|
||||
(0x131B, 0x00, "AMD Radeon R4"),
|
||||
(0x9830, 0x00, "AMD Radeon HD 8400 / R3 Series"),
|
||||
(0x9831, 0x00, "AMD Radeon HD 8400E"),
|
||||
(0x9832, 0x00, "AMD Radeon HD 8330"),
|
||||
(0x9833, 0x00, "AMD Radeon HD 8330E"),
|
||||
(0x9834, 0x00, "AMD Radeon HD 8210"),
|
||||
(0x9835, 0x00, "AMD Radeon HD 8210E"),
|
||||
(0x9836, 0x00, "AMD Radeon HD 8200 / R3 Series"),
|
||||
(0x9837, 0x00, "AMD Radeon HD 8280E"),
|
||||
(0x9838, 0x00, "AMD Radeon HD 8200 / R3 series"),
|
||||
(0x9839, 0x00, "AMD Radeon HD 8180"),
|
||||
(0x983D, 0x00, "AMD Radeon HD 8250"),
|
||||
(0x9850, 0x00, "AMD Radeon R3"),
|
||||
(0x9850, 0x03, "AMD Radeon R3"),
|
||||
(0x9850, 0x40, "AMD Radeon R2"),
|
||||
(0x9850, 0x45, "AMD Radeon R3"),
|
||||
(0x9851, 0x00, "AMD Radeon R4"),
|
||||
(0x9851, 0x01, "AMD Radeon R5E"),
|
||||
(0x9851, 0x05, "AMD Radeon R5"),
|
||||
(0x9851, 0x06, "AMD Radeon R5E"),
|
||||
(0x9851, 0x40, "AMD Radeon R4"),
|
||||
(0x9851, 0x45, "AMD Radeon R5"),
|
||||
(0x9852, 0x00, "AMD Radeon R2"),
|
||||
(0x9852, 0x40, "AMD Radeon E1"),
|
||||
(0x9853, 0x00, "AMD Radeon R2"),
|
||||
(0x9853, 0x01, "AMD Radeon R4E"),
|
||||
(0x9853, 0x03, "AMD Radeon R2"),
|
||||
(0x9853, 0x05, "AMD Radeon R1E"),
|
||||
(0x9853, 0x06, "AMD Radeon R1E"),
|
||||
(0x9853, 0x40, "AMD Radeon R2"),
|
||||
(0x9853, 0x07, "AMD Radeon R1E"),
|
||||
(0x9853, 0x08, "AMD Radeon R1E"),
|
||||
(0x9854, 0x00, "AMD Radeon R3"),
|
||||
(0x9854, 0x01, "AMD Radeon R3E"),
|
||||
(0x9854, 0x02, "AMD Radeon R3"),
|
||||
(0x9854, 0x05, "AMD Radeon R2"),
|
||||
(0x9854, 0x06, "AMD Radeon R4"),
|
||||
(0x9854, 0x07, "AMD Radeon R3"),
|
||||
(0x9855, 0x02, "AMD Radeon R6"),
|
||||
(0x9855, 0x05, "AMD Radeon R4"),
|
||||
(0x9856, 0x07, "AMD Radeon R1E"),
|
||||
(0x9856, 0x00, "AMD Radeon R2"),
|
||||
(0x9856, 0x01, "AMD Radeon R2E"),
|
||||
(0x9856, 0x02, "AMD Radeon R2"),
|
||||
(0x9856, 0x05, "AMD Radeon R1E"),
|
||||
(0x9856, 0x06, "AMD Radeon R2"),
|
||||
(0x9856, 0x07, "AMD Radeon R1E"),
|
||||
(0x9856, 0x08, "AMD Radeon R1E"),
|
||||
(0x9856, 0x13, "AMD Radeon R1E"),
|
||||
(0x6900, 0x00, "AMD Radeon R7 M260"),
|
||||
(0x6900, 0x81, "AMD Radeon R7 M360"),
|
||||
(0x6900, 0x83, "AMD Radeon R7 M340"),
|
||||
(0x6900, 0xC1, "AMD Radeon R5 M465 Series"),
|
||||
(0x6900, 0xC3, "AMD Radeon R5 M445 Series"),
|
||||
(0x6900, 0xD1, "AMD Radeon 530 Series"),
|
||||
(0x6900, 0xD3, "AMD Radeon 530 Series"),
|
||||
(0x6901, 0x00, "AMD Radeon R5 M255"),
|
||||
(0x6902, 0x00, "AMD Radeon Series"),
|
||||
(0x6907, 0x00, "AMD Radeon R5 M255"),
|
||||
(0x6907, 0x87, "AMD Radeon R5 M315"),
|
||||
(0x6920, 0x00, "AMD RADEON R9 M395X"),
|
||||
(0x6920, 0x01, "AMD RADEON R9 M390X"),
|
||||
(0x6921, 0x00, "AMD Radeon R9 M390X"),
|
||||
(0x6929, 0x00, "AMD FirePro S7150"),
|
||||
(0x6929, 0x01, "AMD FirePro S7100X"),
|
||||
(0x692B, 0x00, "AMD FirePro W7100"),
|
||||
(0x692F, 0x00, "AMD MxGPU"),
|
||||
(0x692F, 0x01, "AMD MxGPU"),
|
||||
(0x6930, 0xF0, "AMD MxGPU"),
|
||||
(0x6938, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x6938, 0xF1, "AMD Radeon R9 380 Series"),
|
||||
(0x6938, 0xF0, "AMD Radeon R9 200 Series"),
|
||||
(0x6939, 0x00, "AMD Radeon R9 200 Series"),
|
||||
(0x6939, 0xF0, "AMD Radeon R9 200 Series"),
|
||||
(0x6939, 0xF1, "AMD Radeon R9 380 Series"),
|
||||
(0x9874, 0xC4, "AMD Radeon R7"),
|
||||
(0x9874, 0xC5, "AMD Radeon R6"),
|
||||
(0x9874, 0xC6, "AMD Radeon R6"),
|
||||
(0x9874, 0xC7, "AMD Radeon R5"),
|
||||
(0x9874, 0x81, "AMD Radeon R6"),
|
||||
(0x9874, 0x84, "AMD Radeon R7"),
|
||||
(0x9874, 0x85, "AMD Radeon R6"),
|
||||
(0x9874, 0x87, "AMD Radeon R5"),
|
||||
(0x9874, 0x88, "AMD Radeon R7E"),
|
||||
(0x9874, 0x89, "AMD Radeon R6E"),
|
||||
(0x9874, 0xC8, "AMD Radeon R7"),
|
||||
(0x9874, 0xC9, "AMD Radeon R7"),
|
||||
(0x9874, 0xCA, "AMD Radeon R5"),
|
||||
(0x9874, 0xCB, "AMD Radeon R5"),
|
||||
(0x9874, 0xCC, "AMD Radeon R7"),
|
||||
(0x9874, 0xCD, "AMD Radeon R7"),
|
||||
(0x9874, 0xCE, "AMD Radeon R5"),
|
||||
(0x9874, 0xE1, "AMD Radeon R7"),
|
||||
(0x9874, 0xE2, "AMD Radeon R7"),
|
||||
(0x9874, 0xE3, "AMD Radeon R7"),
|
||||
(0x9874, 0xE4, "AMD Radeon R7"),
|
||||
(0x9874, 0xE5, "AMD Radeon R5"),
|
||||
(0x9874, 0xE6, "AMD Radeon R5"),
|
||||
(0x7300, 0x00, "AMD Radeon Graphics Processor"),
|
||||
(0x7300, 0xC0, "AMD Radeon Graphics Processor"),
|
||||
(0x7300, 0xC1, "AMD FirePro S9300 x2"),
|
||||
(0x7300, 0xC8, "AMD Radeon R9 Fury Series"),
|
||||
(0x7300, 0xC9, "AMD Radeon Pro Duo"),
|
||||
(0x7300, 0xCA, "AMD Radeon R9 Fury Series"),
|
||||
(0x7300, 0xCB, "AMD Radeon R9 Fury Series"),
|
||||
(0x730F, 0xC9, "AMD MxGPU"),
|
||||
(0x98E4, 0x80, "AMD Radeon R5E"),
|
||||
(0x98E4, 0x81, "AMD Radeon R4E"),
|
||||
(0x98E4, 0x83, "AMD Radeon R2E"),
|
||||
(0x98E4, 0x84, "AMD Radeon R2E"),
|
||||
(0x98E4, 0x86, "AMD Radeon R1E"),
|
||||
(0x98E4, 0xC0, "AMD Radeon R4"),
|
||||
(0x98E4, 0xC1, "AMD Radeon R5"),
|
||||
(0x98E4, 0xC2, "AMD Radeon R4"),
|
||||
(0x98E4, 0xC4, "AMD Radeon R5"),
|
||||
(0x98E4, 0xC6, "AMD Radeon R5"),
|
||||
(0x98E4, 0xC8, "AMD Radeon R4"),
|
||||
(0x98E4, 0xC9, "AMD Radeon R4"),
|
||||
(0x98E4, 0xCA, "AMD Radeon R5"),
|
||||
(0x98E4, 0xD0, "AMD Radeon R2"),
|
||||
(0x98E4, 0xD1, "AMD Radeon R2"),
|
||||
(0x98E4, 0xD2, "AMD Radeon R2"),
|
||||
(0x98E4, 0xD4, "AMD Radeon R2"),
|
||||
(0x98E4, 0xD9, "AMD Radeon R5"),
|
||||
(0x98E4, 0xDA, "AMD Radeon R5"),
|
||||
(0x98E4, 0xDB, "AMD Radeon R3"),
|
||||
(0x98E4, 0xE1, "AMD Radeon R3"),
|
||||
(0x98E4, 0xE2, "AMD Radeon R3"),
|
||||
(0x98E4, 0xE9, "AMD Radeon R4"),
|
||||
(0x98E4, 0xEA, "AMD Radeon R4"),
|
||||
(0x98E4, 0xEB, "AMD Radeon R4"),
|
||||
(0x98E4, 0xEB, "AMD Radeon R3"),
|
||||
(0x67C0, 0x00, "AMD Radeon Pro WX 7100"),
|
||||
(0x67C0, 0x80, "AMD Radeon E9550"),
|
||||
(0x67C2, 0x01, "AMD Radeon Pro V7350x2"),
|
||||
(0x67C2, 0x02, "AMD Radeon Pro V7300X"),
|
||||
(0x67C4, 0x00, "AMD Radeon Pro WX 7100"),
|
||||
(0x67C4, 0x80, "AMD Radeon Embedded E9560"),
|
||||
(0x67C7, 0x00, "AMD Radeon Pro WX 5100"),
|
||||
(0x67C7, 0x80, "AMD Radeon Embedded E9390"),
|
||||
(0x67D0, 0x01, "AMD Radeon Pro V7350x2"),
|
||||
(0x67FF, 0xE3, "AMD Radeon E9550"),
|
||||
(0x67FF, 0xF3, "AMD Radeon PRO E9565"),
|
||||
(0x67FF, 0xF7, "AMD Radeon Pro WX 5100"),
|
||||
(0x67D0, 0x02, "AMD Radeon Pro V7300X"),
|
||||
(0x67DF, 0xC4, "AMD Radeon RX 480"),
|
||||
(0x67DF, 0xC5, "AMD Radeon RX 470"),
|
||||
(0x67DF, 0xC7, "AMD Radeon RX 480"),
|
||||
(0x67DF, 0xCF, "AMD Radeon RX 470"),
|
||||
(0x67DF, 0xFF, "AMD Radeon RX 470 Series"),
|
||||
(0x67FF, 0xE7, "AMD Radeon Embedded E9390"),
|
||||
(0x67DF, 0xC0, "AMD Radeon Pro 580X"),
|
||||
(0x67DF, 0xC1, "AMD Radeon RX 580 Series"),
|
||||
(0x67DF, 0xC2, "AMD Radeon RX 570 Series"),
|
||||
(0x67DF, 0xC3, "AMD Radeon RX 580 Series"),
|
||||
(0x67DF, 0xC6, "AMD Radeon RX 570 Series"),
|
||||
(0x67DF, 0xC7, "AMD Radeon RX 480"),
|
||||
(0x67DF, 0xCF, "AMD Radeon RX 470"),
|
||||
(0x67DF, 0xD7, "AMD Radeon RX 470"),
|
||||
(0x67DF, 0xE0, "AMD Radeon RX 470 Series"),
|
||||
(0x67DF, 0xE1, "AMD Radeon RX 590 Series"),
|
||||
(0x67DF, 0xE3, "AMD Radeon RX Series"),
|
||||
(0x67DF, 0xE7, "AMD Radeon RX 580 Series"),
|
||||
(0x67DF, 0xEB, "AMD Radeon Pro 580X"),
|
||||
(0x67DF, 0xEF, "AMD Radeon RX 570 Series"),
|
||||
(0x67DF, 0xF7, "AMD P30PH"),
|
||||
(0x67DF, 0xFF, "AMD Radeon RX 470 Series"),
|
||||
(0x6FDF, 0xEF, "AMD Radeon RX 580 2048SP"),
|
||||
(0x67E0, 0x00, "AMD Radeon Pro WX Series"),
|
||||
(0x67E3, 0x00, "AMD Radeon Pro WX 4100"),
|
||||
(0x67E8, 0x00, "AMD Radeon Pro WX Series"),
|
||||
(0x67E8, 0x01, "AMD Radeon Pro WX Series"),
|
||||
(0x67E8, 0x80, "AMD Radeon E9260"),
|
||||
(0x67EB, 0x00, "AMD Radeon Pro V5300X"),
|
||||
(0x67EF, 0xC0, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xC1, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xC5, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xC7, "AMD Radeon 550 Series"),
|
||||
(0x67EF, 0xCF, "AMD Radeon RX 460"),
|
||||
(0x67EF, 0xEF, "AMD Radeon 550 Series"),
|
||||
(0x67FF, 0xC0, "AMD Radeon Pro 465"),
|
||||
(0x67FF, 0xC1, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xC2, "AMD Radeon Pro Series"),
|
||||
(0x67EF, 0xE3, "AMD Radeon Pro Series"),
|
||||
(0x67EF, 0xE5, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xE7, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xE0, "AMD Radeon RX 560 Series"),
|
||||
(0x67EF, 0xFF, "AMD Radeon RX 460"),
|
||||
(0x67FF, 0xCF, "AMD Radeon RX 560 Series"),
|
||||
(0x67FF, 0xEF, "AMD Radeon RX 560 Series"),
|
||||
(0x67FF, 0xFF, "AMD Radeon RX550/550 Series"),
|
||||
(0x6980, 0x00, "AMD Radeon Pro WX 3100"),
|
||||
(0x6981, 0x00, "AMD Radeon Pro WX 3200 Series"),
|
||||
(0x6981, 0x01, "AMD Radeon Pro WX 3200 Series"),
|
||||
(0x6981, 0x10, "AMD Radeon Pro WX 3200 Series"),
|
||||
(0x6985, 0x00, "AMD Radeon Pro WX 3100"),
|
||||
(0x6986, 0x00, "AMD Radeon Pro WX 2100"),
|
||||
(0x6987, 0x80, "AMD Embedded Radeon E9171"),
|
||||
(0x6987, 0xC0, "AMD Radeon 550X Series"),
|
||||
(0x6987, 0xC1, "AMD Radeon RX 640"),
|
||||
(0x6987, 0xC3, "AMD Radeon 540X Series"),
|
||||
(0x6987, 0xC7, "AMD Radeon 540"),
|
||||
(0x6995, 0x00, "AMD Radeon Pro WX 2100"),
|
||||
(0x6997, 0x00, "AMD Radeon Pro WX 2100"),
|
||||
(0x699F, 0x81, "AMD Embedded Radeon E9170 Series"),
|
||||
(0x699F, 0xC0, "AMD Radeon 500 Series"),
|
||||
(0x699F, 0xC1, "AMD Radeon 540 Series"),
|
||||
(0x699F, 0xC3, "AMD Radeon 500 Series"),
|
||||
(0x699F, 0xC7, "AMD Radeon RX550/550 Series"),
|
||||
(0x699F, 0xC9, "AMD Radeon 540"),
|
||||
(0x694C, 0xC0, "AMD Radeon RX Vega M GH"),
|
||||
(0x694E, 0xC0, "AMD Radeon RX Vega M GL"),
|
||||
(0x6860, 0x00, "AMD Radeon Instinct MI25"),
|
||||
(0x6860, 0x01, "AMD Radeon Instinct MI25"),
|
||||
(0x6860, 0x02, "AMD Radeon Instinct MI25"),
|
||||
(0x6860, 0x03, "AMD Radeon Pro V340"),
|
||||
(0x6860, 0x04, "AMD Radeon Instinct MI25x2"),
|
||||
(0x6860, 0x06, "AMD Radeon Instinct MI25"),
|
||||
(0x6860, 0x07, "AMD Radeon Pro V320"),
|
||||
(0x6861, 0x00, "AMD Radeon Pro WX 9100"),
|
||||
(0x6862, 0x00, "AMD Radeon Pro SSG"),
|
||||
(0x6863, 0x00, "AMD Radeon Vega Frontier Edition"),
|
||||
(0x6864, 0x03, "AMD Radeon Pro V340"),
|
||||
(0x6864, 0x04, "AMD Instinct MI25x2"),
|
||||
(0x6864, 0x05, "AMD Radeon Pro V340"),
|
||||
(0x6867, 0x00, "AMD Radeon Pro Vega 56"),
|
||||
(0x6868, 0x00, "AMD Radeon PRO WX 8200"),
|
||||
(0x686C, 0x00, "AMD Radeon Instinct MI25 MxGPU"),
|
||||
(0x686C, 0x01, "AMD Radeon Instinct MI25 MxGPU"),
|
||||
(0x686C, 0x02, "AMD Radeon Instinct MI25 MxGPU"),
|
||||
(0x686C, 0x03, "AMD Radeon Pro V340 MxGPU"),
|
||||
(0x686C, 0x04, "AMD Radeon Instinct MI25x2 MxGPU"),
|
||||
(0x686C, 0x05, "AMD Radeon Pro V340 MxGPU"),
|
||||
(0x686C, 0x06, "AMD Radeon Instinct MI25 MxGPU"),
|
||||
(0x687F, 0x01, "AMD Radeon RX Vega"),
|
||||
(0x687F, 0xC0, "AMD Radeon RX Vega"),
|
||||
(0x687F, 0xC1, "AMD Radeon RX Vega"),
|
||||
(0x687F, 0xC3, "AMD Radeon RX Vega"),
|
||||
(0x687F, 0xC7, "AMD Radeon RX Vega"),
|
||||
(0x15DD, 0x00, "AMD 15DD"),
|
||||
(0x15DD, 0x81, "AMD Radeon Vega 11"),
|
||||
(0x15DD, 0x82, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0x83, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0x84, "AMD Radeon Vega 6"),
|
||||
(0x15DD, 0x85, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0x86, "AMD Radeon Vega 11"),
|
||||
(0x15DD, 0x87, "AMD 15DD"),
|
||||
(0x15DD, 0x88, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xC1, "AMD Radeon RX Vega 11"),
|
||||
(0x15DD, 0xC2, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xC3, "AMD Radeon RX Vega 10"),
|
||||
(0x15DD, 0xC4, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xC5, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0xC6, "AMD Radeon RX Vega 11"),
|
||||
(0x15DD, 0xC7, "AMD 15DD"),
|
||||
(0x15DD, 0xC8, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xC9, "AMD Radeon RX Vega 11"),
|
||||
(0x15DD, 0xCA, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xCB, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0xCC, "AMD Radeon Vega 6"),
|
||||
(0x15DD, 0xCD, "AMD 15DD"),
|
||||
(0x15DD, 0xCE, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0xCF, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0xD0, "AMD Radeon Vega 10"),
|
||||
(0x15DD, 0xD1, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xD2, "AMD 15DD"),
|
||||
(0x15DD, 0xD3, "AMD Radeon Vega 11"),
|
||||
(0x15DD, 0xD4, "AMD 15DD"),
|
||||
(0x15DD, 0xD5, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xD6, "AMD Radeon Vega 11"),
|
||||
(0x15DD, 0xD7, "AMD Radeon Vega 8"),
|
||||
(0x15DD, 0xD8, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0xD9, "AMD Radeon Vega 6"),
|
||||
(0x15DD, 0xE1, "AMD Radeon Vega 3"),
|
||||
(0x15DD, 0xE2, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0x00, "AMD Radeon RX Vega 8 Graphics WS"),
|
||||
(0x15D8, 0x91, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0x92, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0x93, "AMD Radeon Vega 1"),
|
||||
(0x15D8, 0xA1, "AMD Radeon RX Vega 10"),
|
||||
(0x15D8, 0xA2, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xA3, "AMD Radeon Vega 6"),
|
||||
(0x15D8, 0xA4, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xB1, "AMD Radeon Vega 10"),
|
||||
(0x15D8, 0xB2, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xB3, "AMD Radeon Vega 6"),
|
||||
(0x15D8, 0xB4, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xC1, "AMD Radeon RX Vega 10"),
|
||||
(0x15D8, 0xC2, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xC3, "AMD Radeon Vega 6"),
|
||||
(0x15D8, 0xC4, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xC5, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xC8, "AMD Radeon RX Vega 11"),
|
||||
(0x15D8, 0xC9, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xCA, "AMD Radeon RX Vega 11"),
|
||||
(0x15D8, 0xCB, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xCC, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xCE, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xCF, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xD1, "AMD Radeon Vega 10"),
|
||||
(0x15D8, 0xD2, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xD3, "AMD Radeon Vega 6"),
|
||||
(0x15D8, 0xD4, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xD8, "AMD Radeon Vega 11"),
|
||||
(0x15D8, 0xD9, "AMD Radeon Vega 8"),
|
||||
(0x15D8, 0xDA, "AMD Radeon Vega 11"),
|
||||
(0x15D8, 0xDB, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xDC, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xDD, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xDE, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xDF, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xE1, "AMD Radeon RX Vega 11"),
|
||||
(0x15D8, 0xE2, "AMD Radeon Vega 9"),
|
||||
(0x15D8, 0xE3, "AMD Radeon Vega 3"),
|
||||
(0x15D8, 0xE4, "AMD Radeon Vega 3"),
|
||||
(0x69AF, 0xC0, "AMD Radeon Pro Vega 20"),
|
||||
(0x69AF, 0xC7, "AMD Radeon Pro Vega 16"),
|
||||
(0x69AF, 0xD7, "AMD Radeon RX Vega 16"),
|
||||
(0x66AF, 0xC1, "AMD Radeon VII"),
|
||||
(0x66A1, 0x06, "AMD Radeon Pro VII"),
|
||||
(0x740C, 0x01, "AMD Instinct MI250X"),
|
||||
(0x740F, 0x02, "AMD Instinct MI210"),
|
||||
(0x74A1, 0x00, "AMD Instinct MI300X"),
|
||||
(0x74A1, 0x01, "AMD Instinct MI300A"),
|
||||
(0x7310, 0x00, "AMD Radeon Pro W5700X"),
|
||||
(0x7312, 0x00, "AMD Radeon Pro W5700"),
|
||||
(0x7319, 0x40, "AMD Radeon Pro 5700 XT"),
|
||||
(0x731E, 0xC7, "AMD Radeon RX 5700B"),
|
||||
(0x731F, 0xC0, "AMD Radeon RX 5700 XT 50th Anniversary"),
|
||||
(0x731F, 0xC1, "AMD Radeon RX 5700 XT"),
|
||||
(0x731F, 0xC2, "AMD Radeon RX 5600M"),
|
||||
(0x731F, 0xC3, "AMD Radeon RX 5700M"),
|
||||
(0x731F, 0xC4, "AMD Radeon RX 5700"),
|
||||
(0x731F, 0xC5, "AMD Radeon RX 5700 XT"),
|
||||
(0x731F, 0xCA, "AMD Radeon RX 5600 XT"),
|
||||
(0x731F, 0xCB, "AMD Radeon RX 5600 OEM"),
|
||||
(0x7360, 0x41, "AMD Radeon Pro 5600M"),
|
||||
(0x7360, 0xC3, "AMD Radeon Pro V520"),
|
||||
(0x7362, 0xC3, "AMD Radeon Pro V520 MxGPU"),
|
||||
(0x7340, 0x00, "AMD Radeon Pro W5500X"),
|
||||
(0x7340, 0x41, "AMD Radeon Pro 5500 XT"),
|
||||
(0x7340, 0x47, "AMD Radeon Pro 5300"),
|
||||
(0x7340, 0xC1, "AMD Radeon RX 5500M"),
|
||||
(0x7340, 0xC3, "AMD Radeon RX 5300M"),
|
||||
(0x7340, 0xC5, "AMD Radeon RX 5500 XT"),
|
||||
(0x7340, 0xC7, "AMD Radeon RX 5500"),
|
||||
(0x7340, 0xCF, "AMD Radeon RX 5300"),
|
||||
(0x7341, 0x00, "AMD Radeon Pro W5500"),
|
||||
(0x7347, 0x00, "AMD Radeon Pro W5500M"),
|
||||
(0x734F, 0x00, "AMD Radeon Pro W5300M"),
|
||||
(0x73A5, 0xC0, "AMD Radeon RX 6950 XT"),
|
||||
(0x73AF, 0xC0, "AMD Radeon RX 6900 XT"),
|
||||
(0x73BF, 0xC0, "AMD Radeon RX 6900 XT"),
|
||||
(0x73BF, 0xC1, "AMD Radeon RX 6800 XT"),
|
||||
(0x73BF, 0xC3, "AMD Radeon RX 6800"),
|
||||
(0x73A1, 0x00, "AMD Radeon Pro V620"),
|
||||
(0x73A3, 0x00, "AMD Radeon PRO W6800"),
|
||||
(0x73DF, 0xC0, "AMD Radeon RX 6750 XT"),
|
||||
(0x73DF, 0xC1, "AMD Radeon RX 6700 XT"),
|
||||
(0x73DF, 0xC5, "AMD Radeon RX 6700 XT"),
|
||||
(0x73DF, 0xDF, "AMD Radeon RX 6700"),
|
||||
(0x73DF, 0xC2, "AMD Radeon RX 6800M"),
|
||||
(0x73DF, 0xC3, "AMD Radeon RX 6800M"),
|
||||
(0x73DF, 0xCF, "AMD Radeon RX 6700M"),
|
||||
(0x73DF, 0xFF, "AMD Radeon RX 6700"),
|
||||
(0x73EF, 0xC0, "AMD Radeon RX 6800S"),
|
||||
(0x73EF, 0xC1, "AMD Radeon RX 6650 XT"),
|
||||
(0x73EF, 0xC2, "AMD Radeon RX 6700S"),
|
||||
(0x73EF, 0xC3, "AMD Radeon RX 6650M"),
|
||||
(0x73EF, 0xC4, "AMD Radeon RX 6650M XT"),
|
||||
(0x73FF, 0xC1, "AMD Radeon RX 6600 XT"),
|
||||
(0x73FF, 0xC7, "AMD Radeon RX 6600"),
|
||||
(0x73FF, 0xC3, "AMD Radeon RX 6600M"),
|
||||
(0x73FF, 0xCB, "AMD Radeon RX 6600S"),
|
||||
(0x73E1, 0x00, "AMD Radeon PRO W6600M"),
|
||||
(0x73E3, 0x00, "AMD Radeon PRO W6600"),
|
||||
(0x7422, 0x00, "AMD Radeon PRO W6400"),
|
||||
(0x743F, 0xC1, "AMD Radeon RX 6500 XT"),
|
||||
(0x743F, 0xC7, "AMD Radeon RX 6400"),
|
||||
(0x743F, 0xD7, "AMD Radeon RX 6400"),
|
||||
(0x7421, 0x00, "AMD Radeon PRO W6500M"),
|
||||
(0x7423, 0x00, "AMD Radeon PRO W6300M"),
|
||||
(0x7423, 0x01, "AMD Radeon PRO W6300"),
|
||||
(0x743F, 0xC3, "AMD Radeon RX 6500M"),
|
||||
(0x743F, 0xCF, "AMD Radeon RX 6300M"),
|
||||
(0x743F, 0xC8, "AMD Radeon RX 6550M"),
|
||||
(0x743F, 0xCC, "AMD Radeon 6550S"),
|
||||
(0x743F, 0xCE, "AMD Radeon RX 6450M"),
|
||||
(0x743F, 0xD3, "AMD Radeon RX 6550M"),
|
||||
(0x744C, 0xC8, "AMD Radeon RX 7900 XTX"),
|
||||
(0x744C, 0xCC, "AMD Radeon RX 7900 XT"),
|
||||
(0x7448, 0x00, "AMD Radeon PRO W7900"),
|
||||
(0x745E, 0xCC, "AMD Radeon PRO W7800"),
|
||||
(0x747E, 0xC8, "AMD Radeon RX 7800 XT"),
|
||||
(0x747E, 0xFF, "AMD Radeon RX 7700 XT"),
|
||||
(0x747E, 0xD8, "AMD Radeon RX 7800M"),
|
||||
(0x7480, 0xC0, "AMD Radeon RX 7600 XT"),
|
||||
(0x7480, 0xCF, "AMD Radeon RX 7600"),
|
||||
(0x7480, 0xC1, "AMD Radeon RX 7700S"),
|
||||
(0x7480, 0xC3, "AMD Radeon RX 7600S"),
|
||||
(0x7480, 0xC7, "AMD Radeon RX 7600M XT"),
|
||||
(0x7483, 0xCF, "AMD Radeon RX 7600M"),
|
||||
(0x7480, 0x00, "AMD Radeon PRO W7600"),
|
||||
(0x7489, 0x00, "AMD Radeon PRO W7500"),
|
||||
(0x15BF, 0x00, "AMD Radeon 780M"),
|
||||
(0x15BF, 0x01, "AMD Radeon 760M"),
|
||||
(0x15BF, 0x02, "AMD Radeon 780M"),
|
||||
(0x15BF, 0x03, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xC1, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xC2, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xC3, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xC4, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xC5, "AMD Radeon 740M"),
|
||||
(0x15BF, 0xC6, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xC7, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xC8, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xC9, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xCA, "AMD Radeon 740M"),
|
||||
(0x15BF, 0xCB, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xCC, "AMD Radeon 740M"),
|
||||
(0x15BF, 0xCD, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xCF, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD0, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD1, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD2, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD3, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD4, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD5, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xD6, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xD7, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xD8, "AMD Radeon 740M"),
|
||||
(0x15BF, 0xD9, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xDA, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xDB, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xDC, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xDD, "AMD Radeon 780M"),
|
||||
(0x15BF, 0xDE, "AMD Radeon 740M"),
|
||||
(0x15BF, 0xDF, "AMD Radeon 760M"),
|
||||
(0x15BF, 0xF0, "AMD Radeon 760M"),
|
||||
(0x1900, 0x01, "AMD Radeon 780M"),
|
||||
(0x1900, 0x02, "AMD Radeon 760M"),
|
||||
(0x1900, 0x03, "AMD Radeon 780M"),
|
||||
(0x1900, 0x04, "AMD Radeon 760M"),
|
||||
(0x1900, 0x05, "AMD Radeon 780M"),
|
||||
(0x1900, 0x06, "AMD Radeon 780M"),
|
||||
(0x1900, 0x07, "AMD Radeon 760M"),
|
||||
(0x1900, 0xB0, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB1, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB2, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB3, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB4, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB5, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB6, "AMD Radeon 780M"),
|
||||
(0x1900, 0xB7, "AMD Radeon 760M"),
|
||||
(0x1900, 0xB8, "AMD Radeon 760M"),
|
||||
(0x1900, 0xB9, "AMD Radeon 780M"),
|
||||
(0x1900, 0xC0, "AMD Radeon 780M"),
|
||||
(0x1900, 0xC1, "AMD Radeon 760M"),
|
||||
(0x1900, 0xC2, "AMD Radeon 780M"),
|
||||
(0x1900, 0xC3, "AMD Radeon 760M"),
|
||||
(0x1900, 0xC4, "AMD Radeon 780M"),
|
||||
(0x1900, 0xC5, "AMD Radeon 780M"),
|
||||
(0x1900, 0xC6, "AMD Radeon 760M"),
|
||||
(0x1900, 0xC7, "AMD Radeon 780M"),
|
||||
(0x1900, 0xC8, "AMD Radeon 760M"),
|
||||
(0x1900, 0xC9, "AMD Radeon 780M"),
|
||||
(0x1900, 0xCA, "AMD Radeon 760M"),
|
||||
(0x1900, 0xCB, "AMD Radeon 780M"),
|
||||
(0x1900, 0xCC, "AMD Radeon 780M"),
|
||||
(0x1900, 0xCD, "AMD Radeon 760M"),
|
||||
(0x1900, 0xCE, "AMD Radeon 780M"),
|
||||
(0x1900, 0xCF, "AMD Radeon 760M"),
|
||||
(0x1900, 0xD0, "AMD Radeon 780M"),
|
||||
(0x1900, 0xD1, "AMD Radeon 760M"),
|
||||
(0x1900, 0xD2, "AMD Radeon 780M"),
|
||||
(0x1900, 0xD3, "AMD Radeon 760M"),
|
||||
(0x1900, 0xD4, "AMD Radeon 780M"),
|
||||
(0x1900, 0xD5, "AMD Radeon 780M"),
|
||||
(0x1900, 0xD6, "AMD Radeon 760M"),
|
||||
(0x1900, 0xD7, "AMD Radeon 780M"),
|
||||
(0x1900, 0xD8, "AMD Radeon 760M"),
|
||||
(0x1900, 0xD9, "AMD Radeon 780M"),
|
||||
(0x1900, 0xDA, "AMD Radeon 760M"),
|
||||
(0x1900, 0xDB, "AMD Radeon 780M"),
|
||||
(0x1900, 0xDC, "AMD Radeon 780M"),
|
||||
(0x1900, 0xDD, "AMD Radeon 760M"),
|
||||
(0x1900, 0xDE, "AMD Radeon 780M"),
|
||||
(0x1900, 0xDF, "AMD Radeon 760M"),
|
||||
(0x1900, 0xF0, "AMD Radeon 780M"),
|
||||
(0x1900, 0xF1, "AMD Radeon 780M"),
|
||||
(0x1900, 0xF2, "AMD Radeon 780M"),
|
||||
(0x1901, 0xC8, "AMD Radeon 740M"),
|
||||
(0x1901, 0xC9, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD5, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD6, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD7, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD8, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xC1, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xC2, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xC3, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xC4, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xD1, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xD2, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xD3, "AMD Radeon 740M"),
|
||||
(0x15C8, 0xD4, "AMD Radeon 740M"),
|
||||
(0x1901, 0xC1, "AMD Radeon 740M"),
|
||||
(0x1901, 0xC2, "AMD Radeon 740M"),
|
||||
(0x1901, 0xC3, "AMD Radeon 740M"),
|
||||
(0x1901, 0xC6, "AMD Radeon 740M"),
|
||||
(0x1901, 0xC7, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD1, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD2, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD3, "AMD Radeon 740M"),
|
||||
(0x1901, 0xD4, "AMD Radeon 740M"),
|
||||
(0x150E, 0xC1, "AMD Radeon 890M"),
|
||||
(0x150E, 0xC4, "AMD Radeon 890M"),
|
||||
(0x150E, 0xC5, "AMD Radeon 890M"),
|
||||
(0x150E, 0xC6, "AMD Radeon 890M"),
|
||||
(0x150E, 0xD1, "AMD Radeon 890M"),
|
||||
(0x150E, 0xD2, "AMD Radeon 890M"),
|
||||
(0x150E, 0xD3, "AMD Radeon 890M"),
|
||||
];
|
|
@ -520,7 +520,7 @@ pub struct BatteryArgs {
|
|||
#[derive(Args, Clone, Debug, Default)]
|
||||
#[command(next_help_heading = "GPU Options", rename_all = "snake_case")]
|
||||
pub struct GpuArgs {
|
||||
#[arg(long, action = ArgAction::SetTrue, help = "Disable collecting and displaying NVIDIA GPU information.")]
|
||||
#[arg(long, action = ArgAction::SetTrue, help = "Disable collecting and displaying NVIDIA and AMD GPU information.")]
|
||||
pub disable_gpu: bool,
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue