I read that using exclusive fullscreen improves the performance of an application as it bypasses the window manager. It seems that the VK_EXT_full_screen_exclusive
extension serves for this exact purpose. I found that to use it, all I have to do is to call
VkResult vkAcquireFullScreenExclusiveModeEXT(
VkDevice device,
VkSwapchainKHR swapchain);
It just seems a bit too easy to be like this for me, so I wanted to ask if I understood correctly that the only thing I have to do is to simply call this single function. I would also use some general advice on this topic.
If it is important, I am using GLFW for all my windowing stuff.
I suggest you to read the specification directly. It will list the added functions and structs, so you get the idea about the scale of the extension. And Valid Usage sections tells you exactly if all you have to do is call it or not.
IMO more importantly, exclusive fullscreen reduces input latency. If it goes through the compositor it automatically adds at least one full frame of latency.
Also it is painfully clear when the driver should enable exclusive fullscreen on its own without the need for an extension. What this extension adds is only explicit control of this. If the compositor is off can be verified with PresentMon.
Now to the usage:
vkAcquireFullScreenExclusiveModeEXT
, your swapchain must be created with VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
, the "exclusiveness" can get lost and you need to handle thatpNext
struct)VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT
can only be used if fullScreenExclusiveSupported
cap is supported