我正在使用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
显示器,因此在您的情况下,计数为零是正确的。如果您插入一个非托管监视器,那么您应该会看到除零以外的其他内容。所有这些对于您的枚举任务来说似乎都是合理的。