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台物理设备和缺少的标志?
第二个设备的count=0
很好奇。更严重的是,其flags
和tsVB
值已损坏(49
对flags
和1
不是有效值,对于tsVB
无效)。
这几乎归结为您的系统上存在一个无关的*.json
文件。
这些* .json文件存储有关机器上存在的ICD的信息。它们存储在standard location(s)中。
vkEnumeratePhysicalDevices
+ vkGetPhysicalDeviceProperties
是相对愚蠢的命令,除了读取所述*.json
文件并返回其内容外别无所求。我认为虽然这样调用诸如vkCreateDevice
之类的“真实”对于安装不当的驱动程序不起作用。
creare到底发生了什么这个问题是由你的好奇心去探索的。对于初学者来说,我相信Linux发行版有一个将文件映射到其原始包的命令。这可能是关于先前驱动程序的错误清理,或可能是新的安装脚本中的错误。至少one person之前有这个问题。
基于我在这里解释的,我相信这是相对良性的错误。第一台设备应该可以正常工作。而你可以忽略第二个。或者直接删除它的*.json
清单,以防止它出现在vkEnumeratePD
。
关于“第二”物理设备的标志和tsVB,它似乎是每个运行一个肮脏和随机的值。所以我认为这是一个空的内存指针,可能是有道理的,因为计数为零。 – ton
和计数为0?看起来像一个bug TBH。 –
看起来像一个失败的驱动程序安装。我会尝试卸载它,如果某些设备在此之后仍然存在,那么可能需要手动清理。 – krOoze
棘轮怪胎,这里的计数是'queueCount是此队列系列中队列的无符号整数计数。似乎不是我的错误。 – ton