diff --git a/src/detection/gpu/gpu.h b/src/detection/gpu/gpu.h index 13983a8a4..17f34e68d 100644 --- a/src/detection/gpu/gpu.h +++ b/src/detection/gpu/gpu.h @@ -29,7 +29,6 @@ typedef struct FFGPUMemory typedef struct FFGPUResult { - uint64_t id; FFGpuType type; FFstrbuf vendor; FFstrbuf name; diff --git a/src/detection/gpu/gpu_apple.c b/src/detection/gpu/gpu_apple.c index fa514732e..3cde517c8 100644 --- a/src/detection/gpu/gpu_apple.c +++ b/src/detection/gpu/gpu_apple.c @@ -60,7 +60,6 @@ const char* ffDetectGPUImpl(FFlist* gpus, const FFinstance* instance) FFGPUResult* gpu = ffListAdd(gpus); - gpu->id = 0; gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; gpu->type = FF_GPU_TYPE_UNKNOWN; diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index 98a064f88..63697050f 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -200,8 +200,7 @@ static void pciHandleDevice(const FFinstance* instance, FFlist* results, PCIData FFGPUResult* gpu = ffListAdd(results); - gpu->id = 0; - gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; + gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; ffStrbufInit(&gpu->vendor); pciDetectVendorName(gpu, pci, device); diff --git a/src/detection/gpu/gpu_windows.c b/src/detection/gpu/gpu_windows.c index d5dfba7d1..fb0535b72 100644 --- a/src/detection/gpu/gpu_windows.c +++ b/src/detection/gpu/gpu_windows.c @@ -10,15 +10,13 @@ const char* ffDetectGPUImpl(FFlist* gpus, FF_MAYBE_UNUSED const FFinstance* inst wchar_t regKey[MAX_PATH] = L"SYSTEM\\CurrentControlSet\\Control\\Video\\{"; const uint32_t regKeyPrefixLength = strlen("SYSTEM\\CurrentControlSet\\Control\\Video\\{"); const uint32_t deviceKeyPrefixLength = strlen("\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{"); + for (DWORD i = 0; EnumDisplayDevicesW(NULL, i, &displayDevice, 0); ++i) { if (displayDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) continue; - assert(wcslen(displayDevice.DeviceKey) == 100); - assert(wmemcmp(displayDevice.DeviceKey, L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Video\\{", deviceKeyPrefixLength) == 0); - assert(displayDevice.DeviceKey[95] == L'\\'); - - if (wmemcmp(&displayDevice.DeviceKey[96], L"0000", 4) != 0) continue; + const uint32_t deviceKeyLength = (uint32_t) wcslen(displayDevice.DeviceKey); + if (wmemcmp(&displayDevice.DeviceKey[deviceKeyLength - 4], L"0000", 4) != 0) continue; FFGPUResult* gpu = (FFGPUResult*)ffListAdd(gpus); ffStrbufInit(&gpu->vendor); @@ -27,32 +25,34 @@ const char* ffDetectGPUImpl(FFlist* gpus, FF_MAYBE_UNUSED const FFinstance* inst gpu->temperature = FF_GPU_TEMP_UNSET; gpu->coreCount = FF_GPU_CORE_COUNT_UNSET; gpu->type = FF_GPU_TYPE_UNKNOWN; - gpu->id = 0; gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; ffStrbufSetWS(&gpu->name, displayDevice.DeviceString); - wmemcpy(regKey + regKeyPrefixLength, displayDevice.DeviceKey + deviceKeyPrefixLength, 100 - regKeyPrefixLength + 1); - FF_HKEY_AUTO_DESTROY hKey = NULL; - if (!ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, regKey, &hKey, NULL)) continue; - - ffRegReadStrbuf(hKey, L"DriverVersion", &gpu->driver, NULL); - ffRegReadStrbuf(hKey, L"ProviderName", &gpu->vendor, NULL); - - if(ffStrbufContainS(&gpu->vendor, "AMD") || ffStrbufContainS(&gpu->vendor, "ATI")) - ffStrbufSetS(&gpu->vendor, FF_GPU_VENDOR_NAME_AMD); - else if(ffStrbufContainS(&gpu->vendor, "Intel")) - ffStrbufSetS(&gpu->vendor, FF_GPU_VENDOR_NAME_INTEL); - else if(ffStrbufContainS(&gpu->vendor, "NVIDIA")) - ffStrbufSetS(&gpu->vendor, FF_GPU_VENDOR_NAME_NVIDIA); - - if (!ffRegReadUint64(hKey, L"HardwareInformation.qwMemorySize", &gpu->dedicated.total, NULL)) + if (deviceKeyLength == 100 && displayDevice.DeviceKey[deviceKeyPrefixLength - 1] == '{') { - uint32_t vmem = 0; - if (ffRegReadUint(hKey, L"HardwareInformation.MemorySize", &vmem, NULL)) - gpu->dedicated.total = vmem; + wmemcpy(regKey + regKeyPrefixLength, displayDevice.DeviceKey + deviceKeyPrefixLength, 100 - regKeyPrefixLength + 1); + FF_HKEY_AUTO_DESTROY hKey = NULL; + if (!ffRegOpenKeyForRead(HKEY_LOCAL_MACHINE, regKey, &hKey, NULL)) continue; + + ffRegReadStrbuf(hKey, L"DriverVersion", &gpu->driver, NULL); + ffRegReadStrbuf(hKey, L"ProviderName", &gpu->vendor, NULL); + + if(ffStrbufContainS(&gpu->vendor, "AMD") || ffStrbufContainS(&gpu->vendor, "ATI")) + ffStrbufSetS(&gpu->vendor, FF_GPU_VENDOR_NAME_AMD); + else if(ffStrbufContainS(&gpu->vendor, "Intel")) + ffStrbufSetS(&gpu->vendor, FF_GPU_VENDOR_NAME_INTEL); + else if(ffStrbufContainS(&gpu->vendor, "NVIDIA")) + ffStrbufSetS(&gpu->vendor, FF_GPU_VENDOR_NAME_NVIDIA); + + if (!ffRegReadUint64(hKey, L"HardwareInformation.qwMemorySize", &gpu->dedicated.total, NULL)) + { + uint32_t vmem = 0; + if (ffRegReadUint(hKey, L"HardwareInformation.MemorySize", &vmem, NULL)) + gpu->dedicated.total = vmem; + } + gpu->type = gpu->dedicated.total > 1024 * 1024 * 1024 ? FF_GPU_TYPE_DISCRETE : FF_GPU_TYPE_INTEGRATED; } - gpu->type = gpu->dedicated.total > 1024 * 1024 * 1024 ? FF_GPU_TYPE_DISCRETE : FF_GPU_TYPE_INTEGRATED; } return NULL; diff --git a/src/detection/vulkan/vulkan.c b/src/detection/vulkan/vulkan.c index d46f1879c..29769da5a 100644 --- a/src/detection/vulkan/vulkan.c +++ b/src/detection/vulkan/vulkan.c @@ -185,7 +185,6 @@ static const char* detectVulkan(const FFinstance* instance, FFVulkanResult* resu gpu->type = FF_GPU_TYPE_DISCRETE; else gpu->type = FF_GPU_TYPE_INTEGRATED; - gpu->id = physicalDeviceProperties.properties.deviceID; ffStrbufInitS(&gpu->vendor, ffGetGPUVendorString(physicalDeviceProperties.properties.vendorID)); ffStrbufInitS(&gpu->driver, driverProperties.driverInfo);