我正在通过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个物理设备?
答案 0 :(得分:2)
第二台设备的count=0
很好奇。更严重的是,其flags
和tsVB
值已损坏(49
不是flags
的有效值,而1
对tsVB
无效
这很大程度上归结为系统中存在一个无关的*.json
文件。
这些* .json文件存储有关机器上存在的ICD的信息。它们存储在standard location(s)。
中 vkEnumeratePhysicalDevices
+ vkGetPhysicalDeviceProperties
是相对愚蠢的命令,除了读取所述*.json
个文件并返回其内容之外什么都不做。我认为虽然调用像vkCreateDevice
这样的“真实”的东西不适用于安装错误的驱动程序。
这个问题究竟发生了什么,取决于你的好奇心。对于初学者,我相信Linux发行版有一个命令可以将文件映射到其原始包。它可能是关于先前驱动程序的不良清理,或者可能是新安装脚本中的错误。至少one person之前遇到过这个问题。
根据我在这里解释的内容,我相信这是一个相对良性的错误。第一个设备应该可以正常工作。你可以忽略第二个。或者只是删除其*.json
清单,以防止它显示在vkEnumeratePD
。