1e5c31af7Sopenharmony_ci// Copyright 2014-2021 The Khronos Group, Inc.
2e5c31af7Sopenharmony_ci//
3e5c31af7Sopenharmony_ci// SPDX-License-Identifier: CC-BY-4.0
4e5c31af7Sopenharmony_ci
5e5c31af7Sopenharmony_ciinclude::{generated}/meta/{refprefix}VK_KHR_display.txt[]
6e5c31af7Sopenharmony_ci
7e5c31af7Sopenharmony_ci=== Other Extension Metadata
8e5c31af7Sopenharmony_ci
9e5c31af7Sopenharmony_ci*Last Modified Date*::
10e5c31af7Sopenharmony_ci    2017-03-13
11e5c31af7Sopenharmony_ci*IP Status*::
12e5c31af7Sopenharmony_ci    No known IP claims.
13e5c31af7Sopenharmony_ci*Contributors*::
14e5c31af7Sopenharmony_ci  - James Jones, NVIDIA
15e5c31af7Sopenharmony_ci  - Norbert Nopper, Freescale
16e5c31af7Sopenharmony_ci  - Jeff Vigil, Qualcomm
17e5c31af7Sopenharmony_ci  - Daniel Rakos, AMD
18e5c31af7Sopenharmony_ci
19e5c31af7Sopenharmony_ci=== Description
20e5c31af7Sopenharmony_ci
21e5c31af7Sopenharmony_ciThis extension provides the API to enumerate displays and available modes on
22e5c31af7Sopenharmony_cia given device.
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ciinclude::{generated}/interfaces/VK_KHR_display.txt[]
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci=== Issues
27e5c31af7Sopenharmony_ci
28e5c31af7Sopenharmony_ci1) Which properties of a mode should be fixed in the mode information vs.
29e5c31af7Sopenharmony_cisettable in some other function when setting the mode? E.g., do we need to
30e5c31af7Sopenharmony_cidouble the size of the mode pool to include both stereo and non-stereo
31e5c31af7Sopenharmony_cimodes? YUV and RGB scanout even if they both take RGB input images? BGR vs.
32e5c31af7Sopenharmony_ciRGB input? etc.
33e5c31af7Sopenharmony_ci
34e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Many modern displays support at most a handful of
35e5c31af7Sopenharmony_ciresolutions and timings natively.
36e5c31af7Sopenharmony_ciOther "`modes`" are expected to be supported using scaling hardware on the
37e5c31af7Sopenharmony_cidisplay engine or GPU.
38e5c31af7Sopenharmony_ciOther properties, such as rotation and mirroring should not require
39e5c31af7Sopenharmony_ciduplicating hardware modes just to express all combinations.
40e5c31af7Sopenharmony_ciFurther, these properties may be implemented on a per-display or per-overlay
41e5c31af7Sopenharmony_cigranularity.
42e5c31af7Sopenharmony_ci
43e5c31af7Sopenharmony_ciTo avoid the exponential growth of modes as mutable properties are added, as
44e5c31af7Sopenharmony_ciwas the case with code:EGLConfig/WGL pixel formats/code:GLXFBConfig, this
45e5c31af7Sopenharmony_cispecification should separate out hardware properties and configurable state
46e5c31af7Sopenharmony_ciinto separate objects.
47e5c31af7Sopenharmony_ciModes and overlay planes will express capabilities of the hardware, while a
48e5c31af7Sopenharmony_ciseparate structure will allow applications to configure scaling, rotation,
49e5c31af7Sopenharmony_cimirroring, color keys, LUT values, alpha masks, etc.
50e5c31af7Sopenharmony_cifor a given swapchain independent of the mode in use.
51e5c31af7Sopenharmony_ciConstraints on these settings will be established by properties of the
52e5c31af7Sopenharmony_ciimmutable objects.
53e5c31af7Sopenharmony_ci
54e5c31af7Sopenharmony_ciNote the resolution of this issue may affect issue 5 as well.
55e5c31af7Sopenharmony_ci
56e5c31af7Sopenharmony_ci2) What properties of a display itself are useful?
57e5c31af7Sopenharmony_ci
58e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: This issue is too broad.
59e5c31af7Sopenharmony_ciIt was meant to prompt general discussion, but resolving this issue amounts
60e5c31af7Sopenharmony_cito completing this specification.
61e5c31af7Sopenharmony_ciAll interesting properties should be included.
62e5c31af7Sopenharmony_ciThe issue will remain as a placeholder since removing it would make it hard
63e5c31af7Sopenharmony_cito parse existing discussion notes that refer to issues by number.
64e5c31af7Sopenharmony_ci
65e5c31af7Sopenharmony_ci3) How are multiple overlay planes within a display or mode enumerated?
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: They are referred to by an index.
68e5c31af7Sopenharmony_ciEach display will report the number of overlay planes it contains.
69e5c31af7Sopenharmony_ci
70e5c31af7Sopenharmony_ci4) Should swapchains be created relative to a mode or a display?
71e5c31af7Sopenharmony_ci
72e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: When using this extension, swapchains are created
73e5c31af7Sopenharmony_cirelative to a mode and a plane.
74e5c31af7Sopenharmony_ciThe mode implies the display object the swapchain will present to.
75e5c31af7Sopenharmony_ciIf the specified mode is not the display's current mode, the new mode will
76e5c31af7Sopenharmony_cibe applied when the first image is presented to the swapchain, and the
77e5c31af7Sopenharmony_cidefault operating system mode, if any, will be restored when the swapchain
78e5c31af7Sopenharmony_ciis destroyed.
79e5c31af7Sopenharmony_ci
80e5c31af7Sopenharmony_ci5) Should users query generic ranges from displays and construct their own
81e5c31af7Sopenharmony_cimodes explicitly using those constraints rather than querying a fixed set of
82e5c31af7Sopenharmony_cimodes (Most monitors only have one real "`mode`" these days, even though
83e5c31af7Sopenharmony_cimany support relatively arbitrary scaling, either on the monitor side or in
84e5c31af7Sopenharmony_cithe GPU display engine, making "`modes`" something of a relic/compatibility
85e5c31af7Sopenharmony_ciconstruct).
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Expose both.
88e5c31af7Sopenharmony_ciDisplay information structures will expose a set of predefined modes, as
89e5c31af7Sopenharmony_ciwell as any attributes necessary to construct a customized mode.
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ci6) Is it fine if we return the display and display mode handles in the
92e5c31af7Sopenharmony_cistructure used to query their properties?
93e5c31af7Sopenharmony_ci
94e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Yes.
95e5c31af7Sopenharmony_ci
96e5c31af7Sopenharmony_ci7) Is there a possibility that not all displays of a device work with all of
97e5c31af7Sopenharmony_cithe present queues of a device? If yes, how do we determine which displays
98e5c31af7Sopenharmony_ciwork with which present queues?
99e5c31af7Sopenharmony_ci
100e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: No known hardware has such limitations, but
101e5c31af7Sopenharmony_cidetermining such limitations is supported automatically using the existing
102e5c31af7Sopenharmony_ci`apiext:VK_KHR_surface` and `apiext:VK_KHR_swapchain` query mechanisms.
103e5c31af7Sopenharmony_ci
104e5c31af7Sopenharmony_ci8) Should all presentation need to be done relative to an overlay plane, or
105e5c31af7Sopenharmony_cican a display mode + display be used alone to target an output?
106e5c31af7Sopenharmony_ci
107e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Require specifying a plane explicitly.
108e5c31af7Sopenharmony_ci
109e5c31af7Sopenharmony_ci9) Should displays have an associated window system display, such as an
110e5c31af7Sopenharmony_cicode:HDC or code:Display*?
111e5c31af7Sopenharmony_ci
112e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: No.
113e5c31af7Sopenharmony_ciDisplays are independent of any windowing system in use on the system.
114e5c31af7Sopenharmony_ciFurther, neither code:HDC nor code:Display* refer to a physical display
115e5c31af7Sopenharmony_ciobject.
116e5c31af7Sopenharmony_ci
117e5c31af7Sopenharmony_ci10) Are displays queried from a physical GPU or from a device instance?
118e5c31af7Sopenharmony_ci
119e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Developers prefer to query modes directly from the
120e5c31af7Sopenharmony_ciphysical GPU so they can use display information as an input to their device
121e5c31af7Sopenharmony_ciselection algorithms prior to device creation.
122e5c31af7Sopenharmony_ciThis avoids the need to create placeholder device instances to enumerate
123e5c31af7Sopenharmony_cidisplays.
124e5c31af7Sopenharmony_ci
125e5c31af7Sopenharmony_ciThis preference must be weighed against the extra initialization that must
126e5c31af7Sopenharmony_cibe done by driver vendors prior to device instance creation to support this
127e5c31af7Sopenharmony_ciusage.
128e5c31af7Sopenharmony_ci
129e5c31af7Sopenharmony_ci11) Should displays and/or modes be dispatchable objects? If functions are
130e5c31af7Sopenharmony_cito take displays, overlays, or modes as their first parameter, they must be
131e5c31af7Sopenharmony_cidispatchable objects as defined in Khronos bug 13529.
132e5c31af7Sopenharmony_ciIf they are not added to the list of dispatchable objects, functions
133e5c31af7Sopenharmony_cioperating on them must take some higher-level object as their first
134e5c31af7Sopenharmony_ciparameter.
135e5c31af7Sopenharmony_ciThere is no performance case against making them dispatchable objects, but
136e5c31af7Sopenharmony_cithey would be the first extension objects to be dispatchable.
137e5c31af7Sopenharmony_ci
138e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Do not make displays or modes dispatchable.
139e5c31af7Sopenharmony_ciThey will dispatch based on their associated physical device.
140e5c31af7Sopenharmony_ci
141e5c31af7Sopenharmony_ci12) Should hardware cursor capabilities be exposed?
142e5c31af7Sopenharmony_ci
143e5c31af7Sopenharmony_ci*PROPOSED RESOLUTION*: Defer.
144e5c31af7Sopenharmony_ciThis could be a separate extension on top of the base WSI specs.
145e5c31af7Sopenharmony_ci
146e5c31af7Sopenharmony_ciifdef::editing-notes[]
147e5c31af7Sopenharmony_ci[NOTE]
148e5c31af7Sopenharmony_ci.editing-note
149e5c31af7Sopenharmony_ci====
150e5c31af7Sopenharmony_ciThere appears to be a missing sentence for the first part of issue 13 here.
151e5c31af7Sopenharmony_ci====
152e5c31af7Sopenharmony_ciendif::editing-notes[]
153e5c31af7Sopenharmony_ci
154e5c31af7Sopenharmony_ciif they are one physical display device to an end user, but may internally
155e5c31af7Sopenharmony_cibe implemented as two side-by-side displays using the same display engine
156e5c31af7Sopenharmony_ci(and sometimes cabling) resources as two physically separate display
157e5c31af7Sopenharmony_cidevices.
158e5c31af7Sopenharmony_ci
159e5c31af7Sopenharmony_ci*RESOLVED*: Tiled displays will appear as a single display object in this
160e5c31af7Sopenharmony_ciAPI.
161e5c31af7Sopenharmony_ci
162e5c31af7Sopenharmony_ci14) Should the raw EDID data be included in the display information?
163e5c31af7Sopenharmony_ci
164e5c31af7Sopenharmony_ci*RESOLVED*: No.
165e5c31af7Sopenharmony_ciA future extension could be added which reports the EDID if necessary.
166e5c31af7Sopenharmony_ciThis may be complicated by the outcome of issue 13.
167e5c31af7Sopenharmony_ci
168e5c31af7Sopenharmony_ci15) Should min and max scaling factor capabilities of overlays be exposed?
169e5c31af7Sopenharmony_ci
170e5c31af7Sopenharmony_ci*RESOLVED*: Yes.
171e5c31af7Sopenharmony_ciThis is exposed indirectly by allowing applications to query the min/max
172e5c31af7Sopenharmony_ciposition and extent of the source and destination regions from which image
173e5c31af7Sopenharmony_cicontents are fetched by the display engine when using a particular mode and
174e5c31af7Sopenharmony_cioverlay pair.
175e5c31af7Sopenharmony_ci
176e5c31af7Sopenharmony_ci16) Should devices be able to expose planes that can be moved between
177e5c31af7Sopenharmony_cidisplays? If so, how?
178e5c31af7Sopenharmony_ci
179e5c31af7Sopenharmony_ci*RESOLVED*: Yes.
180e5c31af7Sopenharmony_ciApplications can determine which displays a given plane supports using
181e5c31af7Sopenharmony_ciflink:vkGetDisplayPlaneSupportedDisplaysKHR.
182e5c31af7Sopenharmony_ci
183e5c31af7Sopenharmony_ci17) Should there be a way to destroy display modes? If so, does it support
184e5c31af7Sopenharmony_cidestroying "`built in`" modes?
185e5c31af7Sopenharmony_ci
186e5c31af7Sopenharmony_ci*RESOLVED*: Not in this extension.
187e5c31af7Sopenharmony_ciA future extension could add this functionality.
188e5c31af7Sopenharmony_ci
189e5c31af7Sopenharmony_ci18) What should the lifetime of display and built-in display mode objects
190e5c31af7Sopenharmony_cibe?
191e5c31af7Sopenharmony_ci
192e5c31af7Sopenharmony_ci*RESOLVED*: The lifetime of the instance.
193e5c31af7Sopenharmony_ciThese objects cannot be destroyed.
194e5c31af7Sopenharmony_ciA future extension may be added to expose a way to destroy these objects
195e5c31af7Sopenharmony_ciand/or support display hotplug.
196e5c31af7Sopenharmony_ci
197e5c31af7Sopenharmony_ci19) Should persistent mode for smart panels be enabled/disabled at swapchain
198e5c31af7Sopenharmony_cicreation time, or on a per-present basis.
199e5c31af7Sopenharmony_ci
200e5c31af7Sopenharmony_ci*RESOLVED*: On a per-present basis.
201e5c31af7Sopenharmony_ci
202e5c31af7Sopenharmony_ci=== Examples
203e5c31af7Sopenharmony_ci
204e5c31af7Sopenharmony_ci[NOTE]
205e5c31af7Sopenharmony_ci.Note
206e5c31af7Sopenharmony_ci====
207e5c31af7Sopenharmony_ciThe example code for the `VK_KHR_display` and
208e5c31af7Sopenharmony_ci`apiext:VK_KHR_display_swapchain` extensions was removed from the appendix
209e5c31af7Sopenharmony_ciafter revision 1.0.43.
210e5c31af7Sopenharmony_ciThe display enumeration example code was ported to the cube demo that is
211e5c31af7Sopenharmony_cishipped with the official Khronos SDK, and is being kept up-to-date in that
212e5c31af7Sopenharmony_cilocation (see:
213e5c31af7Sopenharmony_cihttps://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c).
214e5c31af7Sopenharmony_ci====
215e5c31af7Sopenharmony_ci
216e5c31af7Sopenharmony_ci=== Version History
217e5c31af7Sopenharmony_ci
218e5c31af7Sopenharmony_ci * Revision 1, 2015-02-24 (James Jones)
219e5c31af7Sopenharmony_ci   - Initial draft
220e5c31af7Sopenharmony_ci
221e5c31af7Sopenharmony_ci * Revision 2, 2015-03-12 (Norbert Nopper)
222e5c31af7Sopenharmony_ci   - Added overlay enumeration for a display.
223e5c31af7Sopenharmony_ci
224e5c31af7Sopenharmony_ci * Revision 3, 2015-03-17 (Norbert Nopper)
225e5c31af7Sopenharmony_ci   - Fixed typos and namings as discussed in Bugzilla.
226e5c31af7Sopenharmony_ci   - Reordered and grouped functions.
227e5c31af7Sopenharmony_ci   - Added functions to query count of display, mode and overlay.
228e5c31af7Sopenharmony_ci   - Added native display handle, which may be needed on some platforms to
229e5c31af7Sopenharmony_ci     create a native Window.
230e5c31af7Sopenharmony_ci
231e5c31af7Sopenharmony_ci * Revision 4, 2015-03-18 (Norbert Nopper)
232e5c31af7Sopenharmony_ci   - Removed primary and virtualPostion members (see comment of James Jones
233e5c31af7Sopenharmony_ci     in Bugzilla).
234e5c31af7Sopenharmony_ci   - Added native overlay handle to information structure.
235e5c31af7Sopenharmony_ci   - Replaced , with ; in struct.
236e5c31af7Sopenharmony_ci
237e5c31af7Sopenharmony_ci * Revision 6, 2015-03-18 (Daniel Rakos)
238e5c31af7Sopenharmony_ci   - Added WSI extension suffix to all items.
239e5c31af7Sopenharmony_ci   - Made the whole API more "`Vulkanish`".
240e5c31af7Sopenharmony_ci   - Replaced all functions with a single vkGetDisplayInfoKHR function to
241e5c31af7Sopenharmony_ci     better match the rest of the API.
242e5c31af7Sopenharmony_ci   - Made the display, display mode, and overlay objects be first class
243e5c31af7Sopenharmony_ci     objects, not subclasses of VkBaseObject as they do not support the
244e5c31af7Sopenharmony_ci     common functions anyways.
245e5c31af7Sopenharmony_ci   - Renamed *Info structures to *Properties.
246e5c31af7Sopenharmony_ci   - Removed overlayIndex field from VkOverlayProperties as there is an
247e5c31af7Sopenharmony_ci     implicit index already as a result of moving to a "`Vulkanish`" API.
248e5c31af7Sopenharmony_ci   - Displays are not get through device, but through physical GPU to match
249e5c31af7Sopenharmony_ci     the rest of the Vulkan API.
250e5c31af7Sopenharmony_ci     Also this is something ISVs explicitly requested.
251e5c31af7Sopenharmony_ci   - Added issue (6) and (7).
252e5c31af7Sopenharmony_ci
253e5c31af7Sopenharmony_ci * Revision 7, 2015-03-25 (James Jones)
254e5c31af7Sopenharmony_ci   - Added an issues section
255e5c31af7Sopenharmony_ci   - Added rotation and mirroring flags
256e5c31af7Sopenharmony_ci
257e5c31af7Sopenharmony_ci * Revision 8, 2015-03-25 (James Jones)
258e5c31af7Sopenharmony_ci   - Combined the duplicate issues sections introduced in last change.
259e5c31af7Sopenharmony_ci   - Added proposed resolutions to several issues.
260e5c31af7Sopenharmony_ci
261e5c31af7Sopenharmony_ci * Revision 9, 2015-04-01 (Daniel Rakos)
262e5c31af7Sopenharmony_ci   - Rebased extension against Vulkan 0.82.0
263e5c31af7Sopenharmony_ci
264e5c31af7Sopenharmony_ci * Revision 10, 2015-04-01 (James Jones)
265e5c31af7Sopenharmony_ci   - Added issues (10) and (11).
266e5c31af7Sopenharmony_ci   - Added more straw-man issue resolutions, and cleaned up the proposed
267e5c31af7Sopenharmony_ci     resolution for issue (4).
268e5c31af7Sopenharmony_ci   - Updated the rotation and mirroring enums to have proper bitmask
269e5c31af7Sopenharmony_ci     semantics.
270e5c31af7Sopenharmony_ci
271e5c31af7Sopenharmony_ci * Revision 11, 2015-04-15 (James Jones)
272e5c31af7Sopenharmony_ci   - Added proposed resolution for issues (1) and (2).
273e5c31af7Sopenharmony_ci   - Added issues (12), (13), (14), and (15)
274e5c31af7Sopenharmony_ci   - Removed pNativeHandle field from overlay structure.
275e5c31af7Sopenharmony_ci   - Fixed small compilation errors in example code.
276e5c31af7Sopenharmony_ci
277e5c31af7Sopenharmony_ci * Revision 12, 2015-07-29 (James Jones)
278e5c31af7Sopenharmony_ci   - Rewrote the guts of the extension against the latest WSI swapchain
279e5c31af7Sopenharmony_ci     specifications and the latest Vulkan API.
280e5c31af7Sopenharmony_ci   - Address overlay planes by their index rather than an object handle and
281e5c31af7Sopenharmony_ci     refer to them as "`planes`" rather than "`overlays`" to make it
282e5c31af7Sopenharmony_ci     slightly clearer that even a display with no "`overlays`" still has at
283e5c31af7Sopenharmony_ci     least one base "`plane`" that images can be displayed on.
284e5c31af7Sopenharmony_ci   - Updated most of the issues.
285e5c31af7Sopenharmony_ci   - Added an "`extension type`" section to the specification header.
286e5c31af7Sopenharmony_ci   - Re-used the VK_EXT_KHR_surface surface transform enumerations rather
287e5c31af7Sopenharmony_ci     than redefining them here.
288e5c31af7Sopenharmony_ci   - Updated the example code to use the new semantics.
289e5c31af7Sopenharmony_ci
290e5c31af7Sopenharmony_ci * Revision 13, 2015-08-21 (Ian Elliott)
291e5c31af7Sopenharmony_ci   - Renamed this extension and all of its enumerations, types, functions,
292e5c31af7Sopenharmony_ci     etc.
293e5c31af7Sopenharmony_ci     This makes it compliant with the proposed standard for Vulkan
294e5c31af7Sopenharmony_ci     extensions.
295e5c31af7Sopenharmony_ci   - Switched from "`revision`" to "`version`", including use of the
296e5c31af7Sopenharmony_ci     VK_MAKE_VERSION macro in the header file.
297e5c31af7Sopenharmony_ci
298e5c31af7Sopenharmony_ci * Revision 14, 2015-09-01 (James Jones)
299e5c31af7Sopenharmony_ci   - Restore single-field revision number.
300e5c31af7Sopenharmony_ci
301e5c31af7Sopenharmony_ci * Revision 15, 2015-09-08 (James Jones)
302e5c31af7Sopenharmony_ci   - Added alpha flags enum.
303e5c31af7Sopenharmony_ci   - Added premultiplied alpha support.
304e5c31af7Sopenharmony_ci
305e5c31af7Sopenharmony_ci * Revision 16, 2015-09-08 (James Jones)
306e5c31af7Sopenharmony_ci   - Added description section to the spec.
307e5c31af7Sopenharmony_ci   - Added issues 16 - 18.
308e5c31af7Sopenharmony_ci
309e5c31af7Sopenharmony_ci * Revision 17, 2015-10-02 (James Jones)
310e5c31af7Sopenharmony_ci   - Planes are now a property of the entire device rather than individual
311e5c31af7Sopenharmony_ci     displays.
312e5c31af7Sopenharmony_ci     This allows planes to be moved between multiple displays on devices
313e5c31af7Sopenharmony_ci     that support it.
314e5c31af7Sopenharmony_ci   - Added a function to create a VkSurfaceKHR object describing a display
315e5c31af7Sopenharmony_ci     plane and mode to align with the new per-platform surface creation
316e5c31af7Sopenharmony_ci     conventions.
317e5c31af7Sopenharmony_ci   - Removed detailed mode timing data.
318e5c31af7Sopenharmony_ci     It was agreed that the mode extents and refresh rate are sufficient for
319e5c31af7Sopenharmony_ci     current use cases.
320e5c31af7Sopenharmony_ci     Other information could be added back in as an extension if it is
321e5c31af7Sopenharmony_ci     needed in the future.
322e5c31af7Sopenharmony_ci   - Added support for smart/persistent/buffered display devices.
323e5c31af7Sopenharmony_ci
324e5c31af7Sopenharmony_ci * Revision 18, 2015-10-26 (Ian Elliott)
325e5c31af7Sopenharmony_ci   - Renamed from VK_EXT_KHR_display to VK_KHR_display.
326e5c31af7Sopenharmony_ci
327e5c31af7Sopenharmony_ci * Revision 19, 2015-11-02 (James Jones)
328e5c31af7Sopenharmony_ci   - Updated example code to match revision 17 changes.
329e5c31af7Sopenharmony_ci
330e5c31af7Sopenharmony_ci * Revision 20, 2015-11-03 (Daniel Rakos)
331e5c31af7Sopenharmony_ci   - Added allocation callbacks to creation functions.
332e5c31af7Sopenharmony_ci
333e5c31af7Sopenharmony_ci * Revision 21, 2015-11-10 (Jesse Hall)
334e5c31af7Sopenharmony_ci   - Added VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR, and use
335e5c31af7Sopenharmony_ci     VkDisplayPlaneAlphaFlagBitsKHR for
336e5c31af7Sopenharmony_ci     VkDisplayPlanePropertiesKHR::alphaMode instead of
337e5c31af7Sopenharmony_ci     VkDisplayPlaneAlphaFlagsKHR, since it only represents one mode.
338e5c31af7Sopenharmony_ci   - Added reserved flags bitmask to VkDisplayPlanePropertiesKHR.
339e5c31af7Sopenharmony_ci   - Use VkSurfaceTransformFlagBitsKHR instead of obsolete
340e5c31af7Sopenharmony_ci     VkSurfaceTransformKHR.
341e5c31af7Sopenharmony_ci   - Renamed vkGetDisplayPlaneSupportedDisplaysKHR parameters for clarity.
342e5c31af7Sopenharmony_ci
343e5c31af7Sopenharmony_ci * Revision 22, 2015-12-18 (James Jones)
344e5c31af7Sopenharmony_ci   - Added missing "`planeIndex`" parameter to
345e5c31af7Sopenharmony_ci     vkGetDisplayPlaneSupportedDisplaysKHR()
346e5c31af7Sopenharmony_ci
347e5c31af7Sopenharmony_ci * Revision 23, 2017-03-13 (James Jones)
348e5c31af7Sopenharmony_ci   - Closed all remaining issues.
349e5c31af7Sopenharmony_ci     The specification and implementations have been shipping with the
350e5c31af7Sopenharmony_ci     proposed resolutions for some time now.
351e5c31af7Sopenharmony_ci   - Removed the sample code and noted it has been integrated into the
352e5c31af7Sopenharmony_ci     official Vulkan SDK cube demo.
353