Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 4be3a74

Browse files
authored
Merge pull request #1949 from janhq/fix/filter-out-llvmpipe
fix: filter out llvmpipe
2 parents e435d54 + 36a26cf commit 4be3a74

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

engine/common/hardware_common.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ inline Json::Value ToJson(const std::vector<GPU>& gpus) {
100100
gpu["total_vram"] = gpus[i].total_vram;
101101
gpu["uuid"] = gpus[i].uuid;
102102
gpu["activated"] = gpus[i].is_activated;
103-
res.append(gpu);
103+
if (gpus[i].total_vram > 0) {
104+
res.append(gpu);
105+
}
104106
}
105107
return res;
106108
}

engine/utils/hardware/gpu/vulkan/vulkan_gpu.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -300,22 +300,22 @@ inline cpp::result<std::vector<cortex::hw::GPU>, std::string> GetGpuInfoList() {
300300

301301
uint32_t extension_count = 0;
302302
vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, nullptr);
303-
std::vector<VkExtensionProperties> availableExtensions(extension_count);
303+
std::vector<VkExtensionProperties> available_extensions(extension_count);
304304
vkEnumerateInstanceExtensionProperties(nullptr, &extension_count,
305-
availableExtensions.data());
305+
available_extensions.data());
306306

307307
// Create a Vulkan instance
308308
VkInstanceCreateInfo instance_create_info = {};
309309
instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
310310
// If the extension is available, enable it
311311
std::vector<const char*> enabled_extensions;
312312

313-
for (const auto& extension : availableExtensions) {
313+
for (const auto& extension : available_extensions) {
314314
enabled_extensions.push_back(extension.extensionName);
315315
}
316316

317317
instance_create_info.enabledExtensionCount =
318-
static_cast<uint32_t>(availableExtensions.size());
318+
static_cast<uint32_t>(available_extensions.size());
319319
instance_create_info.ppEnabledExtensionNames = enabled_extensions.data();
320320

321321
VkInstance instance;

engine/utils/hardware/gpu_info.h

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@
88
namespace cortex::hw {
99

1010
inline std::vector<GPU> GetGPUInfo() {
11-
std::vector<GPU> res;
12-
// Only support for nvidia for now
13-
// auto gpus = hwinfo::getAllGPUs();
1411
auto nvidia_gpus = system_info_utils::GetGpuInfoList();
1512
auto vulkan_gpus = GetGpuInfoList().value_or(std::vector<cortex::hw::GPU>{});
16-
// add more information for GPUs
13+
auto use_vulkan_info = nvidia_gpus.empty();
1714

15+
// In case we have vulkan info, add more information for GPUs
1816
for (size_t i = 0; i < nvidia_gpus.size(); i++) {
1917
for (size_t j = 0; j < vulkan_gpus.size(); j++) {
2018
if (nvidia_gpus[i].uuid.find(vulkan_gpus[j].uuid) != std::string::npos) {
19+
use_vulkan_info = true;
2120
vulkan_gpus[j].version =
2221
nvidia_gpus[0].cuda_driver_version.value_or("unknown");
2322
vulkan_gpus[j].add_info = NvidiaAddInfo{
@@ -28,6 +27,25 @@ inline std::vector<GPU> GetGPUInfo() {
2827
}
2928
}
3029
}
31-
return vulkan_gpus;
30+
31+
if (use_vulkan_info) {
32+
return vulkan_gpus;
33+
} else {
34+
std::vector<GPU> res;
35+
for (auto& n : nvidia_gpus) {
36+
res.emplace_back(
37+
GPU{.id = n.id,
38+
.name = n.name,
39+
.version = nvidia_gpus[0].cuda_driver_version.value_or("unknown"),
40+
.add_info =
41+
NvidiaAddInfo{
42+
.driver_version = n.driver_version.value_or("unknown"),
43+
.compute_cap = n.compute_cap.value_or("unknown")},
44+
.free_vram = std::stoi(n.vram_free),
45+
.total_vram = std::stoi(n.vram_total),
46+
.uuid = n.uuid});
47+
}
48+
return res;
49+
}
3250
}
3351
} // namespace cortex::hw

0 commit comments

Comments
 (0)