• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2018-2021 The Khronos Group, Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5include::{generated}/meta/{refprefix}VK_EXT_full_screen_exclusive.txt[]
6
7=== Other Extension Metadata
8
9*Last Modified Date*::
10    2019-03-12
11*IP Status*::
12    No known IP claims.
13*Interactions and External Dependencies*::
14  - Interacts with Vulkan 1.1
15  - Interacts with `apiext:VK_KHR_device_group`
16  - Interacts with `apiext:VK_KHR_win32_surface`
17*Contributors*::
18  - Hans-Kristian Arntzen, ARM
19  - Slawomir Grajewski, Intel
20  - Tobias Hector, AMD
21  - James Jones, NVIDIA
22  - Daniel Rakos, AMD
23  - Jeff Juliano, NVIDIA
24  - Joshua Schnarr, NVIDIA
25  - Aaron Hagan, AMD
26
27=== Description
28
29This extension allows applications to set the policy for swapchain creation
30and presentation mechanisms relating to full-screen access.
31Implementations may be able to acquire exclusive access to a particular
32display for an application window that covers the whole screen.
33This can increase performance on some systems by bypassing composition,
34however it can also result in disruptive or expensive transitions in the
35underlying windowing system when a change occurs.
36
37Applications can choose between explicitly disallowing or allowing this
38behavior, letting the implementation decide, or managing this mode of
39operation directly using the new flink:vkAcquireFullScreenExclusiveModeEXT
40and flink:vkReleaseFullScreenExclusiveModeEXT commands.
41
42include::{generated}/interfaces/VK_EXT_full_screen_exclusive.txt[]
43
44=== Issues
45
461) What should the extension & flag be called?
47
48*RESOLVED*: VK_EXT_full_screen_exclusive.
49
50Other options considered (prior to the app-controlled mode) were:
51
52  * VK_EXT_smooth_fullscreen_transition
53  * VK_EXT_fullscreen_behavior
54  * VK_EXT_fullscreen_preference
55  * VK_EXT_fullscreen_hint
56  * VK_EXT_fast_fullscreen_transition
57  * VK_EXT_avoid_fullscreen_exclusive
58
592) Do we need more than a boolean toggle?
60
61*RESOLVED*: Yes.
62
63Using an enum with default/allowed/disallowed/app-controlled enables
64applications to accept driver default behavior, specifically override it in
65either direction without implying the driver is ever required to use
66full-screen exclusive mechanisms, or manage this mode explicitly.
67
683) Should this be a KHR or EXT extension?
69
70*RESOLVED*: EXT, in order to allow it to be shipped faster.
71
724) Can the fullscreen hint affect the surface capabilities, and if so,
73should the hint also be specified as input when querying the surface
74capabilities?
75
76*RESOLVED*: Yes on both accounts.
77
78While the hint does not guarantee a particular fullscreen mode will be used
79when the swapchain is created, it can sometimes imply particular modes will
80NOT be used.
81If the driver determines that it will opt-out of using a particular mode
82based on the policy, and knows it can only support certain capabilities if
83that mode is used, it would be confusing at best to the application to
84report those capabilities in such cases.
85Not allowing implementations to report this state to applications could
86result in situations where applications are unable to determine why
87swapchain creation fails when they specify certain hint values, which could
88result in never- terminating surface creation loops.
89
905) Should full-screen be one word or two?
91
92*RESOLVED*: Two words.
93
94"Fullscreen" is not in my dictionary, and web searches did not turn up
95definitive proof that it is a colloquially accepted compound word.
96Documentation for the corresponding Windows API mechanisms dithers.
97The text consistently uses a hyphen, but none-the-less, there is a
98SetFullscreenState method in the DXGI swapchain object.
99Given this inconclusive external guidance, it is best to adhere to the
100Vulkan style guidelines and avoid inventing new compound words.
101
102=== Version History
103
104 * Revision 4, 2019-03-12 (Tobias Hector)
105   - Added application-controlled mode, and related functions
106   - Tidied up appendix
107
108 * Revision 3, 2019-01-03 (James Jones)
109   - Renamed to VK_EXT_full_screen_exclusive
110   - Made related adjustments to the tri-state enumerant names.
111
112 * Revision 2, 2018-11-27 (James Jones)
113   - Renamed to VK_KHR_fullscreen_behavior
114   - Switched from boolean flag to tri-state enum
115
116 * Revision 1, 2018-11-06 (James Jones)
117   - Internal revision
118