Files
gpufetch/src/intel/intel.cpp
2021-12-28 16:43:11 +01:00

56 lines
1.5 KiB
C++

#include <cstdio>
#include <cstring>
#include "intel.hpp"
#include "uarch.hpp"
#include "chips.hpp"
#include "udev.hpp"
#include "../common/pci.hpp"
#include "../common/global.hpp"
int64_t get_peak_performance_intel(struct gpu_info* gpu) {
if(gpu->topo_i->eu_subslice < 0 || gpu->topo_i->subslices < 0) return -1;
return gpu->freq * 1000000 * gpu->topo_i->eu_subslice * gpu->topo_i->subslices * 8 * 2;
}
struct gpu_info* get_gpu_info_intel() {
struct gpu_info* gpu = (struct gpu_info*) emalloc(sizeof(struct gpu_info));
gpu->vendor = GPU_VENDOR_INTEL;
struct pci_dev *devices = get_pci_devices_from_pciutils();
gpu->pci = get_pci_from_pciutils(devices, PCI_VENDOR_ID_INTEL);
if(gpu->pci == NULL) {
// No Intel iGPU found in PCI, which means it is not present
return NULL;
}
gpu->arch = get_uarch_from_pci(gpu->pci);
if(gpu->arch == NULL) {
// No Intel iGPU found in arch LUT, which means it is not supported
return NULL;
}
gpu->name = get_name_from_uarch(gpu->arch);
gpu->topo_i = get_topology_info(gpu->arch);
gpu->freq = get_max_freq_from_file(gpu->pci);
gpu->peak_performance = get_peak_performance_intel(gpu);
return gpu;
}
bool print_gpu_intel(struct gpu_info* gpu) {
if(gpu->vendor != GPU_VENDOR_INTEL) return false;
printf("%s\n", gpu->name);
return true;
}
char* get_str_eu(struct gpu_info* gpu) {
if(gpu->topo_i->subslices < 0 || gpu->topo_i->eu_subslice < 0)
return get_str_generic(-1);
return get_str_generic(gpu->topo_i->subslices * gpu->topo_i->eu_subslice);
}