繁体   English   中英

为什么同一个设备会出现两次vulkan

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM