| 39 | namespace MangoHud { |
| 40 | |
| 41 | QString getLibraryString() |
| 42 | { |
| 43 | /** |
| 44 | * Guess MangoHud install location by searching for vulkan layers in this order: |
| 45 | * |
| 46 | * $VK_LAYER_PATH |
| 47 | * $XDG_DATA_DIRS (/usr/local/share/:/usr/share/) |
| 48 | * $XDG_DATA_HOME (~/.local/share) |
| 49 | * /etc |
| 50 | * $XDG_CONFIG_DIRS (/etc/xdg) |
| 51 | * $XDG_CONFIG_HOME (~/.config) |
| 52 | * |
| 53 | * @returns Absolute path of libMangoHud.so if found and empty QString otherwise. |
| 54 | */ |
| 55 | QStringList vkLayerList; |
| 56 | { |
| 57 | QString home = QDir::homePath(); |
| 58 | |
| 59 | QString vkLayerPath = qEnvironmentVariable("VK_LAYER_PATH"); |
| 60 | if (!vkLayerPath.isEmpty()) { |
| 61 | vkLayerList << vkLayerPath; |
| 62 | } |
| 63 | |
| 64 | QStringList xdgDataDirs = qEnvironmentVariable("XDG_DATA_DIRS", "/usr/local/share/:/usr/share/").split(QLatin1String(":")); |
| 65 | for (QString dir : xdgDataDirs) { |
| 66 | vkLayerList << FS::PathCombine(dir, "vulkan", "implicit_layer.d"); |
| 67 | } |
| 68 | |
| 69 | QString xdgDataHome = qEnvironmentVariable("XDG_DATA_HOME"); |
| 70 | if (xdgDataHome.isEmpty()) { |
| 71 | xdgDataHome = FS::PathCombine(home, ".local", "share"); |
| 72 | } |
| 73 | vkLayerList << FS::PathCombine(xdgDataHome, "vulkan", "implicit_layer.d"); |
| 74 | |
| 75 | vkLayerList << "/etc"; |
| 76 | |
| 77 | QStringList xdgConfigDirs = qEnvironmentVariable("XDG_CONFIG_DIRS", "/etc/xdg").split(QLatin1String(":")); |
| 78 | for (QString dir : xdgConfigDirs) { |
| 79 | vkLayerList << FS::PathCombine(dir, "vulkan", "implicit_layer.d"); |
| 80 | } |
| 81 | |
| 82 | QString xdgConfigHome = qEnvironmentVariable("XDG_CONFIG_HOME"); |
| 83 | if (xdgConfigHome.isEmpty()) { |
| 84 | xdgConfigHome = FS::PathCombine(home, ".config"); |
| 85 | } |
| 86 | vkLayerList << FS::PathCombine(xdgConfigHome, "vulkan", "implicit_layer.d"); |
| 87 | } |
| 88 | |
| 89 | for (const QString& vkLayer : vkLayerList) { |
| 90 | // prefer to use architecture specific vulkan layers |
| 91 | QString currentArch = QSysInfo::currentCpuArchitecture(); |
| 92 | |
| 93 | if (currentArch == "arm64") { |
| 94 | currentArch = "aarch64"; |
| 95 | } |
| 96 | |
| 97 | QStringList manifestNames = { QString("MangoHud.%1.json").arg(currentArch), "MangoHud.json" }; |
| 98 |
no test coverage detected