| // Copyright 2014-2021 The Khronos Group, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_KHR_display_swapchain.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2017-03-13 |
| *IP Status*:: |
| No known IP claims. |
| *Contributors*:: |
| - James Jones, NVIDIA |
| - Jeff Vigil, Qualcomm |
| - Jesse Hall, Google |
| |
| === Description |
| |
| This extension provides an API to create a swapchain directly on a device's |
| display without any underlying window system. |
| |
| include::{generated}/interfaces/VK_KHR_display_swapchain.txt[] |
| |
| === Issues |
| |
| 1) Should swapchains sharing images each hold a reference to the images, or |
| should it be up to the application to destroy the swapchains and images in |
| an order that avoids the need for reference counting? |
| |
| *RESOLVED*: Take a reference. |
| The lifetime of presentable images is already complex enough. |
| |
| 2) Should the pname:srcRect and pname:dstRect parameters be specified as |
| part of the presentation command, or at swapchain creation time? |
| |
| *RESOLVED*: As part of the presentation command. |
| This allows moving and scaling the image on the screen without the need to |
| respecify the mode or create a new swapchain and presentable images. |
| |
| 3) Should pname:srcRect and pname:dstRect be specified as rects, or separate |
| offset/extent values? |
| |
| *RESOLVED*: As rects. |
| Specifying them separately might make it easier for hardware to expose |
| support for one but not the other, but in such cases applications must just |
| take care to obey the reported capabilities and not use non-zero offsets or |
| extents that require scaling, as appropriate. |
| |
| 4) How can applications create multiple swapchains that use the same images? |
| |
| *RESOLVED*: By calling flink:vkCreateSharedSwapchainsKHR. |
| |
| An earlier resolution used flink:vkCreateSwapchainKHR, chaining multiple |
| slink:VkSwapchainCreateInfoKHR structures through pname:pNext. |
| In order to allow each swapchain to also allow other extension structs, a |
| level of indirection was used: slink:VkSwapchainCreateInfoKHR::pname:pNext |
| pointed to a different structure, which had both pname:sType and pname:pNext |
| members for additional extensions, and also had a pointer to the next |
| slink:VkSwapchainCreateInfoKHR structure. |
| The number of swapchains to be created could only be found by walking this |
| linked list of alternating structures, and the pname:pSwapchains out |
| parameter was reinterpreted to be an array of slink:VkSwapchainKHR handles. |
| |
| Another option considered was a method to specify a "`shared`" swapchain |
| when creating a new swapchain, such that groups of swapchains using the same |
| images could be built up one at a time. |
| This was deemed unusable because drivers need to know all of the displays an |
| image will be used on when determining which internal formats and layouts to |
| use for that image. |
| |
| === Examples |
| |
| [NOTE] |
| .Note |
| ==== |
| The example code for the `apiext:VK_KHR_display` and |
| `VK_KHR_display_swapchain` extensions was removed from the appendix after |
| revision 1.0.43. |
| The display swapchain creation example code was ported to the cube demo that |
| is shipped with the official Khronos SDK, and is being kept up-to-date in |
| that location (see: |
| https://github.com/KhronosGroup/Vulkan-Tools/blob/master/cube/cube.c). |
| ==== |
| |
| === Version History |
| |
| * Revision 1, 2015-07-29 (James Jones) |
| - Initial draft |
| |
| * Revision 2, 2015-08-21 (Ian Elliott) |
| - Renamed this extension and all of its enumerations, types, functions, |
| etc. |
| This makes it compliant with the proposed standard for Vulkan |
| extensions. |
| - Switched from "`revision`" to "`version`", including use of the |
| VK_MAKE_VERSION macro in the header file. |
| |
| * Revision 3, 2015-09-01 (James Jones) |
| - Restore single-field revision number. |
| |
| * Revision 4, 2015-09-08 (James Jones) |
| - Allow creating multiple swap chains that share the same images using a |
| single call to vkCreateSwapchainKHR(). |
| |
| * Revision 5, 2015-09-10 (Alon Or-bach) |
| - Removed underscores from SWAP_CHAIN in two enums. |
| |
| * Revision 6, 2015-10-02 (James Jones) |
| - Added support for smart panels/buffered displays. |
| |
| * Revision 7, 2015-10-26 (Ian Elliott) |
| - Renamed from VK_EXT_KHR_display_swapchain to VK_KHR_display_swapchain. |
| |
| * Revision 8, 2015-11-03 (Daniel Rakos) |
| - Updated sample code based on the changes to VK_KHR_swapchain. |
| |
| * Revision 9, 2015-11-10 (Jesse Hall) |
| - Replaced VkDisplaySwapchainCreateInfoKHR with |
| vkCreateSharedSwapchainsKHR, changing resolution of issue #4. |
| |
| * Revision 10, 2017-03-13 (James Jones) |
| - Closed all remaining issues. |
| The specification and implementations have been shipping with the |
| proposed resolutions for some time now. |
| - Removed the sample code and noted it has been integrated into the |
| official Vulkan SDK cube demo. |