【问题标题】:Vulkan physical deviceVulkan 物理设备
【发布时间】:2017-09-16 09:55:38
【问题描述】:

我正在通过 API 规范 (http://vulkan-spec-chunked.ahcox.com/ch02s09.html) 学习 Vulkan,但我对 Vulkan 中的物理设备的方式有点困惑。我只有一个英特尔物理显卡设备,但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?似乎是一个错误 TBH。
  • 似乎驱动程序安装失败。我会尝试卸载它,如果之后留下某些设备,则可能需要手动清理。
  • 棘轮怪胎,这里的计数是queueCount is the unsigned integer count of queues in this queue family。对我来说似乎不是一个错误。
  • krOoze,我已经从源代码手动构建并安装了它。 SDK 示例运行良好...... mesa 和 Xorg 都很好。除了这个,没有什么是奇怪的。
  • 计数为 0 意味着您将无法从该家庭获取队列,因此枚举它是没有意义的。

标签: gpu vulkan


【解决方案1】:

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

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

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

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

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

根据我在这里的解释,我认为这是一个相对良性的错误。第一个设备应该可以正常工作。你可以忽略第二个。或者干脆删除它的*.json 清单以防止它出现在vkEnumeratePD 中。

【讨论】:

  • 关于“第二”物理设备的标志和tsVB,每次运行似乎都是一个肮脏和随机的值。所以我认为这是一个空的内存指针,并且可能是有道理的,因为计数为零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多