|
| 1 | +#include "detection/gpu/gpu.h" |
| 2 | +#include "common/library.h" |
| 3 | + |
| 4 | +#if defined(FF_HAVE_EGL) || __has_include(<EGL/egl.h>) |
| 5 | +#include <EGL/egl.h> |
| 6 | +#include <EGL/eglext.h> |
| 7 | + |
| 8 | +const char* ffGPUDetectByEglext(FFlist* gpus) |
| 9 | +{ |
| 10 | + FF_LIBRARY_LOAD(egl, "dlopen libEGL" FF_LIBRARY_EXTENSION " failed", "libEGL" FF_LIBRARY_EXTENSION, 1); |
| 11 | + FF_LIBRARY_LOAD_SYMBOL_MESSAGE(egl, eglGetProcAddress); |
| 12 | + |
| 13 | + PFNEGLQUERYDEVICESEXTPROC ffeglQueryDevicesEXT = (PFNEGLQUERYDEVICESEXTPROC) ffeglGetProcAddress("eglQueryDevicesEXT"); |
| 14 | + if (!ffeglQueryDevicesEXT) |
| 15 | + return "eglGetProcAddress(\"eglQueryDevicesEXT\") returned NULL"; |
| 16 | + PFNEGLQUERYDEVICESTRINGEXTPROC ffeglQueryDeviceStringEXT = (PFNEGLQUERYDEVICESTRINGEXTPROC) ffeglGetProcAddress("eglQueryDeviceStringEXT"); |
| 17 | + if (!ffeglQueryDeviceStringEXT) |
| 18 | + return "eglGetProcAddress(\"eglQueryDeviceStringEXT\") returned NULL"; |
| 19 | + |
| 20 | + EGLDeviceEXT devs[32]; |
| 21 | + EGLint numDevs; |
| 22 | + if (ffeglQueryDevicesEXT(ARRAY_SIZE(devs), devs, &numDevs)) |
| 23 | + { |
| 24 | + for (EGLint i = 0; i < numDevs; i++) |
| 25 | + { |
| 26 | + const char* renderer = ffeglQueryDeviceStringEXT(devs[i], EGL_RENDERER_EXT); |
| 27 | + if (!renderer) continue; |
| 28 | + |
| 29 | + FFGPUResult* gpu = (FFGPUResult*) ffListAdd(gpus); |
| 30 | + ffStrbufInitS(&gpu->name, renderer); |
| 31 | + ffStrbufInitS(&gpu->vendor, ffeglQueryDeviceStringEXT(devs[i], EGL_VENDOR)); |
| 32 | + ffStrbufInitS(&gpu->driver, ffeglQueryDeviceStringEXT(devs[i], EGL_DRIVER_NAME_EXT)); |
| 33 | + gpu->index = FF_GPU_INDEX_UNSET; |
| 34 | + gpu->coreCount = FF_GPU_CORE_COUNT_UNSET; |
| 35 | + gpu->coreUsage = FF_GPU_CORE_USAGE_UNSET; |
| 36 | + gpu->temperature = FF_GPU_TEMP_UNSET; |
| 37 | + gpu->frequency = FF_GPU_FREQUENCY_UNSET; |
| 38 | + gpu->type = FF_GPU_TYPE_UNKNOWN; |
| 39 | + gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; |
| 40 | + gpu->deviceId = 0; |
| 41 | + ffStrbufInitStatic(&gpu->platformApi, "EGLext"); |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + return NULL; |
| 46 | +} |
| 47 | + |
| 48 | +#else |
| 49 | + |
| 50 | +const char* ffGPUDetectByEglext(FF_MAYBE_UNUSED FFlist* gpus) |
| 51 | +{ |
| 52 | + return "fastfetch was compiled without egl support"; |
| 53 | +} |
| 54 | + |
| 55 | +#endif |
0 commit comments