Vulkan物理设备

问题描述:

我正在通过API规范学习Vulkan(http://vulkan-spec-chunked.ahcox.com/ch02s09.html),我对Vulkan的物理设备有多混淆。我确实只有一个intel物理视频卡设备,但vkEnumeratePhysicalDevices返回2的计数。设备是相同的,但队列标志看起来不同,并且队列标记未记录(实际上它们是,但仅在第二个队列中标记为8我的标志值是16和32)。Vulkan物理设备

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?看起来像一个bug TBH。 –

+0

看起来像一个失败的驱动程序安装。我会尝试卸载它,如果某些设备在此之后仍然存在,那么可能需要手动清理。 – krOoze

+0

棘轮怪胎,这里的计数是'queueCount是此队列系列中队列的无符号整数计数。似乎不是我的错误。 – ton

第二个设备的count=0很好奇。更严重的是,其flagstsVB值已损坏(49flags1不是有效值,对于tsVB无效)。

这几乎归结为您的系统上存在一个无关的*.json文件。

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

vkEnumeratePhysicalDevices + vkGetPhysicalDeviceProperties是相对愚蠢的命令,除了读取所述*.json文件并返回其内容外别无所求。我认为虽然这样调用诸如vkCreateDevice之类的“真实”对于安装不当的驱动程序不起作用。

creare到底发生了什么这个问题是由你的好奇心去探索的。对于初学者来说,我相信Linux发行版有一个将文件映射到其原始包的命令。这可能是关于先前驱动程序的错误清理,或可能是新的安装脚本中的错误。至少one person之前有这个问题。

基于我在这里解释的,我相信这是相对良性的错误。第一台设备应该可以正常工作。而你可以忽略第二个。或者直接删除它的*.json清单,以防止它出现在vkEnumeratePD

+0

关于“第二”物理设备的标志和tsVB,它似乎是每个运行一个肮脏和随机的值。所以我认为这是一个空的内存指针,可能是有道理的,因为计数为零。 – ton