vkGetPhysicalDeviceDisplayPropertiesKHR returns 0 始终显示
vkGetPhysicalDeviceDisplayPropertiesKHR returns 0 displays always
我正在使用 Vulkan 编写一个小示例。在我的笔记本电脑上有一个特殊情况,它有两个 GPU(Intel UHD + Nvidia Quadro T1000)。我想通过枚举所有适配器和所有可能的输出来实现与 DXGI 提供的相同的功能,以确保 select 正确的屏幕。
我做了什么:
- 我另外添加了
VK_KHR_display
扩展到 VkInstanceCreateInfo
结构
- 致电
vkCreateInstance
- 调用
vkEnumeratePhysicalDevices
两次以获取号码和所有物理设备。
- 为每个物理设备调用
vkGetPhysicalDeviceDisplayPropertiesKHR
在任何情况下 vkGetPhysicalDeviceDisplayPropertiesKHR
returns 0
作为显示数量。
在 Vulkan SDK 1.3.204.1 上测试
- Ubuntu VBox VM 中的 20.04(是的,它与 Lavapipe 一起使用)使用最新的 Vulkan SDK
- Windows 10
两者的行为相同,返回 0
。有什么特别要观察的吗?
这可能是因为您的系统上没有供 VK_KHR_display
扩展使用的“免费”显示器。此扩展旨在绘制不受 window 或显示管理器控制的显示。
对于您的情况,您可以将显示器插入笔记本电脑并将 OS 配置为不使用它。 Windows 会自动将您的桌面扩展或复制到外接显示器,因此您需要进入显示设置并告诉它删除该显示器。
这个 example 展示了如何做到这一点。该示例通过使用 OpenGL 渲染某些内容然后让 Vulkan 将其绘制到 VK_KHR_display
显示器来展示其他内容。但这是最后一步才重要,并且有关于如何在 Windows.
上释放监视器的明确说明
从技术上讲,在您的情况下计数为零是正确的,因为没有 VK_KHR_display
显示可用。如果您插入 non-managed 监视器,那么您应该会看到零以外的内容。所有这些对于您的枚举任务来说似乎都是合理的。
我正在使用 Vulkan 编写一个小示例。在我的笔记本电脑上有一个特殊情况,它有两个 GPU(Intel UHD + Nvidia Quadro T1000)。我想通过枚举所有适配器和所有可能的输出来实现与 DXGI 提供的相同的功能,以确保 select 正确的屏幕。
我做了什么:
- 我另外添加了
VK_KHR_display
扩展到VkInstanceCreateInfo
结构 - 致电
vkCreateInstance
- 调用
vkEnumeratePhysicalDevices
两次以获取号码和所有物理设备。 - 为每个物理设备调用
vkGetPhysicalDeviceDisplayPropertiesKHR
在任何情况下 vkGetPhysicalDeviceDisplayPropertiesKHR
returns 0
作为显示数量。
在 Vulkan SDK 1.3.204.1 上测试
- Ubuntu VBox VM 中的 20.04(是的,它与 Lavapipe 一起使用)使用最新的 Vulkan SDK
- Windows 10
两者的行为相同,返回 0
。有什么特别要观察的吗?
这可能是因为您的系统上没有供 VK_KHR_display
扩展使用的“免费”显示器。此扩展旨在绘制不受 window 或显示管理器控制的显示。
对于您的情况,您可以将显示器插入笔记本电脑并将 OS 配置为不使用它。 Windows 会自动将您的桌面扩展或复制到外接显示器,因此您需要进入显示设置并告诉它删除该显示器。
这个 example 展示了如何做到这一点。该示例通过使用 OpenGL 渲染某些内容然后让 Vulkan 将其绘制到 VK_KHR_display
显示器来展示其他内容。但这是最后一步才重要,并且有关于如何在 Windows.
从技术上讲,在您的情况下计数为零是正确的,因为没有 VK_KHR_display
显示可用。如果您插入 non-managed 监视器,那么您应该会看到零以外的内容。所有这些对于您的枚举任务来说似乎都是合理的。