在 Vulkan 1.1 中使用 VK_EXT_full_screen_exclusive 的独家全屏?

Exclusive fullscreen using VK_EXT_full_screen_exclusive in Vulkan 1.1?

我读到使用独占全屏可以提高应用程序的性能,因为它绕过了 window 管理器。 VK_EXT_full_screen_exclusive 扩展名似乎正是用于此目的。我发现要使用它,我所要做的就是调用

VkResult vkAcquireFullScreenExclusiveModeEXT(
    VkDevice                                    device,
    VkSwapchainKHR                              swapchain);

这样对我来说似乎有点太容易了,所以我想问一下我是否理解正确,我唯一要做的就是简单地调用这个单一函数。我也会使用一些关于这个主题的一般性建议。

如果它很重要,我正在使用 GLFW 处理我所有的 windowing 内容。

我建议你直接阅读specification。它将列出添加的函数和结构,以便您了解扩展的规模。 Valid Usage 部分会准确告诉您是否需要调用它。

IMO 更重要的是,独家全屏减少了输入延迟。如果它通过合成器,它会自动添加至少一整帧延迟。

另外,驱动程序应该在不需要扩展的情况下自行启用独占全屏,这一点也很清楚。这个扩展添加的只是对此的显式控制。如果合成器关闭,可以使用 PresentMon.

进行验证

现在开始使用:

  • 如果您想使用 vkAcquireFullScreenExclusiveModeEXT,您的交换链必须使用 VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
  • 创建
  • 如果您使用 VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,"exclusiveness" 可能会丢失,您需要处理
  • 使用扩展可能会影响来自表面查询的 returns(并且您需要使用扩展 pNext 结构)
  • 只有在 fullScreenExclusiveSupported 上限受支持时才能使用 VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
  • 扩展仅在 Windows
  • 上受支持