From f4cb3bb33fd729b800a03d75e36b5b5d7be63ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 12 Feb 2024 00:43:06 +0800 Subject: [PATCH] GPU (Linux): use amdgpu.ids --- src/detection/gpu/gpu_linux.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index 789f9b6dd..cec11dbe0 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -2,6 +2,7 @@ #include "detection/vulkan/vulkan.h" #include "detection/temps/temps_linux.h" #include "common/io/io.h" +#include "common/properties.h" #include "util/stringUtils.h" #ifdef FF_USE_PROPRIETARY_GPU_DRIVER_API @@ -122,7 +123,25 @@ static const char* pciDetectGPUs(const FFGPUOptions* options, FFlist* gpus) gpu->deviceId = ((uint64_t) pciDomain << 6) | ((uint64_t) pciBus << 4) | (deviceId << 2) | pciFunc; gpu->frequency = FF_GPU_FREQUENCY_UNSET; - ffGPUParsePciIds(&pciids, subclassId, (uint16_t) vendorId, (uint16_t) deviceId, (uint16_t) subVendorId, (uint16_t) subDeviceId, gpu); + if (gpu->vendor.chars == FF_GPU_VENDOR_NAME_AMD) + { + ffStrbufAppendS(&pciDir, "/revision"); + if (ffReadFileBuffer(pciDir.chars, &buffer)) + { + char* pend; + uint64_t revision = strtoul(buffer.chars, &pend, 16); + if (pend != buffer.chars) + { + char query[32]; + snprintf(query, sizeof(query), "%X,\t%X,", (unsigned) deviceId, (unsigned) revision); + ffParsePropFileData("libdrm/amdgpu.ids", query, &gpu->name); + } + } + ffStrbufSubstrBefore(&pciDir, pciDevDirLength); + } + + if (gpu->name.length == 0) + ffGPUParsePciIds(&pciids, subclassId, (uint16_t) vendorId, (uint16_t) deviceId, (uint16_t) subVendorId, (uint16_t) subDeviceId, gpu); pciDetectDriver(gpu, &pciDir, &buffer); ffStrbufSubstrBefore(&pciDir, pciDevDirLength);