[英]Why does vulkan report a single device in a system with an integrated graphics card and a GPU?
[英]Why does the same device appear twice vulkan
当我枚举 Vulkan 设备时,我得到了这个列表:
## Found 4 devices:
name=NVIDIA GeForce GTX 1060 6GB; vendor_id=7171; uuid=1e6cc8a66603139184fd2788b6ad0eac; driver_version=1972731904; type=2; api_version=1.2.175
name=llvmpipe (LLVM 12.0.0, 256 bits); vendor_id=0; uuid=76616c2d696d65000000000000000000; driver_version=1; type=4; api_version=1.0.2
name=NVIDIA GeForce GTX 1060 6GB; vendor_id=7171; uuid=1e6cc8a66603139184fd2788b6ad0eac; driver_version=1972731904; type=2; api_version=1.2.175
name=llvmpipe (LLVM 12.0.0, 256 bits); vendor_id=0; uuid=76616c2d696d65000000000000000000; driver_version=1; type=4; api_version=1.0.2
## Found 8 queue families:
device_index=0; family_index=0; queue_flags=15; queue_count=16
device_index=0; family_index=1; queue_flags=12; queue_count=2
device_index=0; family_index=2; queue_flags=14; queue_count=8
device_index=1; family_index=0; queue_flags=7; queue_count=1
device_index=2; family_index=0; queue_flags=15; queue_count=16
device_index=2; family_index=1; queue_flags=12; queue_count=2
device_index=2; family_index=2; queue_flags=14; queue_count=8
device_index=3; family_index=0; queue_flags=7; queue_count=1
uint32_t dev_count{};
vkEnumeratePhysicalDevices(instance, &dev_count, nullptr);
if(dev_count == 0) { throw exception{"collect information about Vulkan devices", "No physical device"}; }
printf("Found %u devices\n", dev_count);
std::vector<VkPhysicalDevice> m_devices(dev_count);
vkEnumeratePhysicalDevices(instance, &dev_count, m_devices.data());
std::ranges::for_each(m_devices, [](auto const& device) {
vk_device_info dev_info{};
dev_info.device = device;
vkGetPhysicalDeviceProperties(device, &dev_info.properties);
printf("%s\n", device, to_string(dev_info).c_str());
});
...
为什么我会两次看到同一个设备?
没有 output 的
printf("Found %u devices\n", dev_count);
在 for_each 之前,我无法真正告诉该向量的 state。
假设向量有重复项? 拥有唯一条目的一种方法是执行以下操作:
auto ret = std::ranges::unique(m_devices);
m_devices.erase(ret.begin(), ret.end());
// Now m_devices should hold unique entries
当然,上面的代码片段假设VkPhysicalDevice
实现了==
操作符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.