16std::string vendorNameFromId(uint32_t vendorID) {
18 case 0x1002:
return "AMD";
19 case 0x10DE:
return "NVIDIA";
20 case 0x8086:
return "Intel";
21 case 0x13B5:
return "ARM";
22 case 0x5143:
return "Qualcomm";
23 case 0x1010:
return "ImgTec";
24 case 0x106B:
return "Apple";
27 std::snprintf(buf,
sizeof(buf),
"0x%04X", vendorID);
33const char *deviceTypeName(vk::PhysicalDeviceType t) {
35 case vk::PhysicalDeviceType::eDiscreteGpu:
return "discrete";
36 case vk::PhysicalDeviceType::eIntegratedGpu:
return "integrated";
37 case vk::PhysicalDeviceType::eVirtualGpu:
return "virtual";
38 case vk::PhysicalDeviceType::eCpu:
return "cpu";
39 default:
return "other";
45 bool gpuReady()
const override {
return device() !=
nullptr; }
47 std::string gpuName()
const override {
50 return gfx->getDevice().physical_device.properties.deviceName.data();
53 std::string gpuVendor()
const override {
56 return vendorNameFromId(gfx->getDevice().physical_device.properties.vendorID);
59 std::string gpuDeviceType()
const override {
62 return deviceTypeName(gfx->getDevice().physical_device.properties.deviceType);
65 int gpuMemoryTotalMB()
const override {
68 const auto &mem = gfx->getDevice().physical_device.memory_properties;
70 for (uint32_t i = 0; i < mem.memoryHeapCount; ++i) {
71 if (mem.memoryHeaps[i].flags & vk::MemoryHeapFlagBits::eDeviceLocal)
72 bytes += mem.memoryHeaps[i].size;
74 return static_cast<int>(bytes / (1024ull * 1024ull));
79 static Graphics *
device() {
80 auto *base = eve::ModuleManager::getInstance<eve::graphics::Graphics>(
"Graphics");
81 auto *gfx =
dynamic_cast<Graphics *
>(base);
82 if (!gfx)
return nullptr;
83 vk::PhysicalDevice pd = gfx->getDevice().physical_device;
84 if (
static_cast<VkPhysicalDevice
>(pd) == VK_NULL_HANDLE)
return nullptr;
93 static VulkanGpuInfo info;