vkGetPhysicalDeviceDisplayProperties KHR始终返回0个显示



我正在使用Vulkan编写一个小示例。在我的笔记本电脑上,有一个特殊的案例,有两个GPU(Intel UHD+Nvidia Quadro T1000(。我想通过枚举所有适配器和所有可能的输出来确保选择正确的屏幕,从而实现DXGI提供的相同功能。

我做了什么:

  • 我在VkInstanceCreateInfo结构中添加了VK_KHR_display扩展
  • 呼叫vkCreateInstance
  • 呼叫vkEnumeratePhysicalDevices两次,获取号码和所有物理设备
  • 为每个物理设备调用vkGetPhysicalDeviceDisplayPropertiesKHR

在任何情况下,vkGetPhysicalDeviceDisplayPropertiesKHR都会返回0作为显示数。

在Vulkan SDK 1.3.204.1 上测试

  • 使用最新的Vulkan SDK在VBox虚拟机中运行Ubuntu 20.04(是的,它可以与Lavapipe一起使用(
  • Windows 10

通过返回0,两者的行为相同。有什么特别的东西需要观察吗?

这可能是因为没有"免费的";在系统上显示监视器以供VK_KHR_display扩展使用。此扩展旨在绘制到不受窗口或显示管理器控制的显示。

在您的情况下,您可以将显示器插入笔记本电脑,并将操作系统配置为不使用它。Windows会自动将您的桌面扩展或复制到外部显示器,因此您需要进入显示器设置,并告诉它删除该显示器。

这个例子展示了如何做到这一点。这个例子通过使用OpenGL渲染一些东西,然后让Vulkan将其绘制到VK_KHR_display显示器上来展示其他东西。但这是最后一步,有关于如何在Windows上释放显示器的明确说明。

从技术上讲,由于没有可用的VK_KHR_display显示器,因此在您的情况下,计数为零是正确的。如果您插入一个非托管监视器,那么您应该会看到除零以外的其他内容。所有这些对于您的枚举任务来说似乎都是合理的。

最新更新