Vulkan物理设备

时间:2017-04-20 00:12:15

标签: gpu vulkan

我正在通过API规范(http://vulkan-spec-chunked.ahcox.com/ch02s09.html)学习Vulkan,而我对Vulkan中物理设备的使用方式并不感到困惑。我只有一个intel物理视频卡设备,但vkEnumeratePhysicalDevices返回计数2.设备是相同的,但队列标志似乎不同,并且队列标志没有记录(实际上它们是,但只有标志8 ,在第二个队列中,我有标志值16和32)。

typedef enum VkQueueFlagBits {
    VK_QUEUE_GRAPHICS_BIT = 0x00000001,
    VK_QUEUE_COMPUTE_BIT = 0x00000002,
    VK_QUEUE_TRANSFER_BIT = 0x00000004,
    VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
} VkQueueFlagBits;

这是我的vulkan代码的输出:

GPU count: 2 ( physical devices )
Physical Device 0:
        Device API version: 1.0.42 - 4194346
        Device Vendor Id: 0x8086
        Device Id: 1916
        Device Driver version: 0.0.1 - 1
        Device type: 1
        Device Name: Intel(R) HD Graphics 520 (Skylake GT2)
        Device Pipeline UID: f557cfd4
        Queue Properties:
                Flags: 7
                Count: 1
                ts Valid Bits: 24
Physical Device 1:
        Device API version: 1.0.42 - 4194346
        Device Vendor Id: 0x8086
        Device Id: 1916
        Device Driver version: 0.0.1 - 1
        Device type: 1
        Device Name: Intel(R) HD Graphics 520 (Skylake GT2)
        Device Pipeline UID: f557cfd4
        Queue Properties:
                Flags: 49
                Count: 0
                ts Valid Bits: 1

有人可以帮助我理解为什么同一个真实设备和丢失的标志有2个物理设备?

1 个答案:

答案 0 :(得分:2)

第二台设备的count=0很好奇。更严重的是,其flagstsVB值已损坏(49不是flags的有效值,而1tsVB无效

这很大程度上归结为系统中存在一个无关的*.json文件。

这些* .json文件存储有关机器上存在的ICD的信息。它们存储在standard location(s)

vkEnumeratePhysicalDevices + vkGetPhysicalDeviceProperties是相对愚蠢的命令,除了读取所述*.json个文件并返回其内容之外什么都不做。我认为虽然调用像vkCreateDevice这样的“真实”的东西不适用于安装错误的驱动程序。

这个问题究竟发生了什么,取决于你的好奇心。对于初学者,我相信Linux发行版有一个命令可以将文件映射到其原始包。它可能是关于先前驱动程序的不良清理,或者可能是新安装脚本中的错误。至少one person之前遇到过这个问题。

根据我在这里解释的内容,我相信这是一个相对良性的错误。第一个设备应该可以正常工作。你可以忽略第二个。或者只是删除其*.json清单,以防止它显示在vkEnumeratePD