| // Copyright 2018-2021 The Khronos Group, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_EXT_full_screen_exclusive.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2019-03-12 |
| *IP Status*:: |
| No known IP claims. |
| *Interactions and External Dependencies*:: |
| - Interacts with Vulkan 1.1 |
| - Interacts with `apiext:VK_KHR_device_group` |
| - Interacts with `apiext:VK_KHR_win32_surface` |
| *Contributors*:: |
| - Hans-Kristian Arntzen, ARM |
| - Slawomir Grajewski, Intel |
| - Tobias Hector, AMD |
| - James Jones, NVIDIA |
| - Daniel Rakos, AMD |
| - Jeff Juliano, NVIDIA |
| - Joshua Schnarr, NVIDIA |
| - Aaron Hagan, AMD |
| |
| === Description |
| |
| This extension allows applications to set the policy for swapchain creation |
| and presentation mechanisms relating to full-screen access. |
| Implementations may be able to acquire exclusive access to a particular |
| display for an application window that covers the whole screen. |
| This can increase performance on some systems by bypassing composition, |
| however it can also result in disruptive or expensive transitions in the |
| underlying windowing system when a change occurs. |
| |
| Applications can choose between explicitly disallowing or allowing this |
| behavior, letting the implementation decide, or managing this mode of |
| operation directly using the new flink:vkAcquireFullScreenExclusiveModeEXT |
| and flink:vkReleaseFullScreenExclusiveModeEXT commands. |
| |
| include::{generated}/interfaces/VK_EXT_full_screen_exclusive.txt[] |
| |
| === Issues |
| |
| 1) What should the extension & flag be called? |
| |
| *RESOLVED*: VK_EXT_full_screen_exclusive. |
| |
| Other options considered (prior to the app-controlled mode) were: |
| |
| * VK_EXT_smooth_fullscreen_transition |
| * VK_EXT_fullscreen_behavior |
| * VK_EXT_fullscreen_preference |
| * VK_EXT_fullscreen_hint |
| * VK_EXT_fast_fullscreen_transition |
| * VK_EXT_avoid_fullscreen_exclusive |
| |
| 2) Do we need more than a boolean toggle? |
| |
| *RESOLVED*: Yes. |
| |
| Using an enum with default/allowed/disallowed/app-controlled enables |
| applications to accept driver default behavior, specifically override it in |
| either direction without implying the driver is ever required to use |
| full-screen exclusive mechanisms, or manage this mode explicitly. |
| |
| 3) Should this be a KHR or EXT extension? |
| |
| *RESOLVED*: EXT, in order to allow it to be shipped faster. |
| |
| 4) Can the fullscreen hint affect the surface capabilities, and if so, |
| should the hint also be specified as input when querying the surface |
| capabilities? |
| |
| *RESOLVED*: Yes on both accounts. |
| |
| While the hint does not guarantee a particular fullscreen mode will be used |
| when the swapchain is created, it can sometimes imply particular modes will |
| NOT be used. |
| If the driver determines that it will opt-out of using a particular mode |
| based on the policy, and knows it can only support certain capabilities if |
| that mode is used, it would be confusing at best to the application to |
| report those capabilities in such cases. |
| Not allowing implementations to report this state to applications could |
| result in situations where applications are unable to determine why |
| swapchain creation fails when they specify certain hint values, which could |
| result in never- terminating surface creation loops. |
| |
| 5) Should full-screen be one word or two? |
| |
| *RESOLVED*: Two words. |
| |
| "Fullscreen" is not in my dictionary, and web searches did not turn up |
| definitive proof that it is a colloquially accepted compound word. |
| Documentation for the corresponding Windows API mechanisms dithers. |
| The text consistently uses a hyphen, but none-the-less, there is a |
| SetFullscreenState method in the DXGI swapchain object. |
| Given this inconclusive external guidance, it is best to adhere to the |
| Vulkan style guidelines and avoid inventing new compound words. |
| |
| === Version History |
| |
| * Revision 4, 2019-03-12 (Tobias Hector) |
| - Added application-controlled mode, and related functions |
| - Tidied up appendix |
| |
| * Revision 3, 2019-01-03 (James Jones) |
| - Renamed to VK_EXT_full_screen_exclusive |
| - Made related adjustments to the tri-state enumerant names. |
| |
| * Revision 2, 2018-11-27 (James Jones) |
| - Renamed to VK_KHR_fullscreen_behavior |
| - Switched from boolean flag to tri-state enum |
| |
| * Revision 1, 2018-11-06 (James Jones) |
| - Internal revision |