Skip to content

Commit

Permalink
Merge pull request #1949 from janhq/fix/filter-out-llvmpipe
Browse files Browse the repository at this point in the history
fix: filter out llvmpipe
  • Loading branch information
vansangpfiev authored Feb 10, 2025
2 parents e435d54 + 36a26cf commit 4be3a74
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 10 deletions.
4 changes: 3 additions & 1 deletion engine/common/hardware_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ inline Json::Value ToJson(const std::vector<GPU>& gpus) {
gpu["total_vram"] = gpus[i].total_vram;
gpu["uuid"] = gpus[i].uuid;
gpu["activated"] = gpus[i].is_activated;
res.append(gpu);
if (gpus[i].total_vram > 0) {
res.append(gpu);
}
}
return res;
}
Expand Down
8 changes: 4 additions & 4 deletions engine/utils/hardware/gpu/vulkan/vulkan_gpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,22 +300,22 @@ inline cpp::result<std::vector<cortex::hw::GPU>, std::string> GetGpuInfoList() {

uint32_t extension_count = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, nullptr);
std::vector<VkExtensionProperties> availableExtensions(extension_count);
std::vector<VkExtensionProperties> available_extensions(extension_count);
vkEnumerateInstanceExtensionProperties(nullptr, &extension_count,
availableExtensions.data());
available_extensions.data());

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

for (const auto& extension : availableExtensions) {
for (const auto& extension : available_extensions) {
enabled_extensions.push_back(extension.extensionName);
}

instance_create_info.enabledExtensionCount =
static_cast<uint32_t>(availableExtensions.size());
static_cast<uint32_t>(available_extensions.size());
instance_create_info.ppEnabledExtensionNames = enabled_extensions.data();

VkInstance instance;
Expand Down
28 changes: 23 additions & 5 deletions engine/utils/hardware/gpu_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,15 @@
namespace cortex::hw {

inline std::vector<GPU> GetGPUInfo() {
std::vector<GPU> res;
// Only support for nvidia for now
// auto gpus = hwinfo::getAllGPUs();
auto nvidia_gpus = system_info_utils::GetGpuInfoList();
auto vulkan_gpus = GetGpuInfoList().value_or(std::vector<cortex::hw::GPU>{});
// add more information for GPUs
auto use_vulkan_info = nvidia_gpus.empty();

// In case we have vulkan info, add more information for GPUs
for (size_t i = 0; i < nvidia_gpus.size(); i++) {
for (size_t j = 0; j < vulkan_gpus.size(); j++) {
if (nvidia_gpus[i].uuid.find(vulkan_gpus[j].uuid) != std::string::npos) {
use_vulkan_info = true;
vulkan_gpus[j].version =
nvidia_gpus[0].cuda_driver_version.value_or("unknown");
vulkan_gpus[j].add_info = NvidiaAddInfo{
Expand All @@ -28,6 +27,25 @@ inline std::vector<GPU> GetGPUInfo() {
}
}
}
return vulkan_gpus;

if (use_vulkan_info) {
return vulkan_gpus;
} else {
std::vector<GPU> res;
for (auto& n : nvidia_gpus) {
res.emplace_back(
GPU{.id = n.id,
.name = n.name,
.version = nvidia_gpus[0].cuda_driver_version.value_or("unknown"),
.add_info =
NvidiaAddInfo{
.driver_version = n.driver_version.value_or("unknown"),
.compute_cap = n.compute_cap.value_or("unknown")},
.free_vram = std::stoi(n.vram_free),
.total_vram = std::stoi(n.vram_total),
.uuid = n.uuid});
}
return res;
}
}
} // namespace cortex::hw

0 comments on commit 4be3a74

Please sign in to comment.