Vulkan 物理设备
Vulkan physical device
我正在按照 API 规范 (http://vulkan-spec-chunked.ahcox.com/ch02s09.html) 学习 Vulkan,我不太了解 Vulkan 中的物理设备。我确实只有一个英特尔物理视频卡设备,但 vkEnumeratePhysicalDevices
returns 计数为 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 个物理设备并且缺少标志?
第二个设备的count=0
很好奇。更严重的是,它的 flags
和 tsVB
值已损坏(49
不是 flags
的有效值并且 1
对 tsVB
无效) .
这几乎可以归结为您的系统上存在一个无关的 *.json
文件。
这些 *.json 文件存储有关机器上存在的 ICD 的信息。它们存储在 standard location(s).
vkEnumeratePhysicalDevices
+vkGetPhysicalDeviceProperties
是相对愚蠢的命令,除了读取所述 *.json
文件并返回其内容外,什么都不做。我认为虽然调用 "real" 之类的东西 vkCreateDevice
在安装错误的驱动程序上不起作用。
究竟是什么原因造成了这个问题,就凭你的好奇心去探索了。对于初学者,我相信在 Linux 发行版上有一个命令可以将文件映射到它的原始包。这可能是关于以前的驱动程序清理不当的问题,或者可能是新驱动程序的安装脚本中的错误。至少 one person 以前有过这个问题。
根据我在这里的解释,我认为这是一个相对良性的错误。第一个设备应该可以正常工作。你可以忽略第二个。或者简单地删除它的 *.json
清单以防止它出现在 vkEnumeratePD
.
中
我正在按照 API 规范 (http://vulkan-spec-chunked.ahcox.com/ch02s09.html) 学习 Vulkan,我不太了解 Vulkan 中的物理设备。我确实只有一个英特尔物理视频卡设备,但 vkEnumeratePhysicalDevices
returns 计数为 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 个物理设备并且缺少标志?
第二个设备的count=0
很好奇。更严重的是,它的 flags
和 tsVB
值已损坏(49
不是 flags
的有效值并且 1
对 tsVB
无效) .
这几乎可以归结为您的系统上存在一个无关的 *.json
文件。
这些 *.json 文件存储有关机器上存在的 ICD 的信息。它们存储在 standard location(s).
vkEnumeratePhysicalDevices
+vkGetPhysicalDeviceProperties
是相对愚蠢的命令,除了读取所述 *.json
文件并返回其内容外,什么都不做。我认为虽然调用 "real" 之类的东西 vkCreateDevice
在安装错误的驱动程序上不起作用。
究竟是什么原因造成了这个问题,就凭你的好奇心去探索了。对于初学者,我相信在 Linux 发行版上有一个命令可以将文件映射到它的原始包。这可能是关于以前的驱动程序清理不当的问题,或者可能是新驱动程序的安装脚本中的错误。至少 one person 以前有过这个问题。
根据我在这里的解释,我认为这是一个相对良性的错误。第一个设备应该可以正常工作。你可以忽略第二个。或者简单地删除它的 *.json
清单以防止它出现在 vkEnumeratePD
.