| // Copyright 2014-2021 The Khronos Group, Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| include::{generated}/meta/{refprefix}VK_KHR_surface.txt[] |
| |
| === Other Extension Metadata |
| |
| *Last Modified Date*:: |
| 2016-08-25 |
| *IP Status*:: |
| No known IP claims. |
| *Contributors*:: |
| - Patrick Doane, Blizzard |
| - Ian Elliott, LunarG |
| - Jesse Hall, Google |
| - James Jones, NVIDIA |
| - David Mao, AMD |
| - Norbert Nopper, Freescale |
| - Alon Or-bach, Samsung |
| - Daniel Rakos, AMD |
| - Graham Sellers, AMD |
| - Jeff Vigil, Qualcomm |
| - Chia-I Wu, LunarG |
| - Jason Ekstrand, Intel |
| |
| === Description |
| |
| The `VK_KHR_surface` extension is an instance extension. |
| It introduces slink:VkSurfaceKHR objects, which abstract native platform |
| surface or window objects for use with Vulkan. |
| It also provides a way to determine whether a queue family in a physical |
| device supports presenting to particular surface. |
| |
| Separate extensions for each platform provide the mechanisms for creating |
| slink:VkSurfaceKHR objects, but once created they may be used in this and |
| other platform-independent extensions, in particular the |
| `apiext:VK_KHR_swapchain` extension. |
| |
| include::{generated}/interfaces/VK_KHR_surface.txt[] |
| |
| === Examples |
| |
| [NOTE] |
| .Note |
| ==== |
| The example code for the `VK_KHR_surface` and `apiext:VK_KHR_swapchain` |
| extensions was removed from the appendix after revision 1.0.29. |
| This WSI 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). |
| ==== |
| |
| === Issues |
| |
| 1) Should this extension include a method to query whether a physical device |
| supports presenting to a specific window or native surface on a given |
| platform? |
| |
| *RESOLVED*: Yes. |
| Without this, applications would need to create a device instance to |
| determine whether a particular window can be presented to. |
| Knowing that a device supports presentation to a platform in general is not |
| sufficient, as a single machine might support multiple seats, or instances |
| of the platform that each use different underlying physical devices. |
| Additionally, on some platforms, such as the X Window System, different |
| drivers and devices might be used for different windows depending on which |
| section of the desktop they exist on. |
| |
| 2) Should the flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, |
| flink:vkGetPhysicalDeviceSurfaceFormatsKHR, and |
| flink:vkGetPhysicalDeviceSurfacePresentModesKHR functions be in this |
| extension and operate on physical devices, rather than being in |
| `apiext:VK_KHR_swapchain` (i.e. device extension) and being dependent on |
| slink:VkDevice? |
| |
| *RESOLVED*: Yes. |
| While it might be useful to depend on sname:VkDevice (and therefore on |
| enabled extensions and features) for the queries, Vulkan was released only |
| with the slink:VkPhysicalDevice versions. |
| Many cases can be resolved by a Valid Usage statement, and/or by a separate |
| pname:pNext chain version of the query struct specific to a given extension |
| or parameters, via extensible versions of the queries: |
| ifdef::VK_EXT_full_screen_exclusive[flink:vkGetPhysicalDeviceSurfacePresentModes2EXT,] |
| flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR, and |
| flink:vkGetPhysicalDeviceSurfaceFormats2KHR. |
| |
| 3) Should Vulkan support Xlib or XCB as the API for accessing the X Window |
| System platform? |
| |
| *RESOLVED*: Both. |
| XCB is a more modern and efficient API, but Xlib usage is deeply ingrained |
| in many applications and likely will remain in use for the foreseeable |
| future. |
| Not all drivers necessarily need to support both, but including both as |
| options in the core specification will probably encourage support, which |
| should in turn ease adoption of the Vulkan API in older codebases. |
| Additionally, the performance improvements possible with XCB likely will not |
| have a measurable impact on the performance of Vulkan presentation and other |
| minimal window system interactions defined here. |
| |
| 4) Should the GBM platform be included in the list of platform enums? |
| |
| *RESOLVED*: Deferred, and will be addressed with a platform-specific |
| extension to be written in the future. |
| |
| === Version History |
| |
| * Revision 1, 2015-05-20 (James Jones) |
| - Initial draft, based on LunarG KHR spec, other KHR specs, patches |
| attached to bugs. |
| |
| * Revision 2, 2015-05-22 (Ian Elliott) |
| - Created initial Description section. |
| - Removed query for whether a platform requires the use of a queue for |
| presentation, since it was decided that presentation will always be |
| modeled as being part of the queue. |
| - Fixed typos and other minor mistakes. |
| |
| * Revision 3, 2015-05-26 (Ian Elliott) |
| - Improved the Description section. |
| |
| * Revision 4, 2015-05-27 (James Jones) |
| - Fixed compilation errors in example code. |
| |
| * Revision 5, 2015-06-01 (James Jones) |
| - Added issues 1 and 2 and made related spec updates. |
| |
| * Revision 6, 2015-06-01 (James Jones) |
| - Merged the platform type mappings table previously removed from |
| VK_KHR_swapchain with the platform description table in this spec. |
| - Added issues 3 and 4 documenting choices made when building the |
| initial list of native platforms supported. |
| |
| * Revision 7, 2015-06-11 (Ian Elliott) |
| - Updated table 1 per input from the KHR TSG. |
| - Updated issue 4 (GBM) per discussion with Daniel Stone. |
| He will create a platform-specific extension sometime in the future. |
| |
| * Revision 8, 2015-06-17 (James Jones) |
| - Updated enum-extending values using new convention. |
| - Fixed the value of VK_SURFACE_PLATFORM_INFO_TYPE_SUPPORTED_KHR. |
| |
| * Revision 9, 2015-06-17 (James Jones) |
| - Rebased on Vulkan API version 126. |
| |
| * Revision 10, 2015-06-18 (James Jones) |
| - Marked issues 2 and 3 resolved. |
| |
| * Revision 11, 2015-06-23 (Ian Elliott) |
| - Examples now show use of function pointers for extension functions. |
| - Eliminated extraneous whitespace. |
| |
| * Revision 12, 2015-07-07 (Daniel Rakos) |
| - Added error section describing when each error is expected to be |
| reported. |
| - Replaced the term "`queue node index`" with "`queue family index`" in |
| the spec as that is the agreed term to be used in the latest version |
| of the core header and spec. |
| - Replaced bool32_t with VkBool32. |
| |
| * Revision 13, 2015-08-06 (Daniel Rakos) |
| - Updated spec against latest core API header version. |
| |
| * Revision 14, 2015-08-20 (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. |
| - Did miscellaneous cleanup, etc. |
| |
| * Revision 15, 2015-08-20 (Ian Elliott--porting a 2015-07-29 change from |
| James Jones) |
| - Moved the surface transform enums here from VK_WSI_swapchain so they |
| could be reused by VK_WSI_display. |
| |
| * Revision 16, 2015-09-01 (James Jones) |
| - Restore single-field revision number. |
| |
| * Revision 17, 2015-09-01 (James Jones) |
| - Fix example code compilation errors. |
| |
| * Revision 18, 2015-09-26 (Jesse Hall) |
| - Replaced VkSurfaceDescriptionKHR with the VkSurfaceKHR object, which |
| is created via layered extensions. |
| Added VkDestroySurfaceKHR. |
| |
| * Revision 19, 2015-09-28 (Jesse Hall) |
| - Renamed from VK_EXT_KHR_swapchain to VK_EXT_KHR_surface. |
| |
| * Revision 20, 2015-09-30 (Jeff Vigil) |
| - Add error result VK_ERROR_SURFACE_LOST_KHR. |
| |
| * Revision 21, 2015-10-15 (Daniel Rakos) |
| - Updated the resolution of issue #2 and include the surface capability |
| queries in this extension. |
| - Renamed SurfaceProperties to SurfaceCapabilities as it better reflects |
| that the values returned are the capabilities of the surface on a |
| particular device. |
| - Other minor cleanup and consistency changes. |
| |
| * Revision 22, 2015-10-26 (Ian Elliott) |
| - Renamed from VK_EXT_KHR_surface to VK_KHR_surface. |
| |
| * Revision 23, 2015-11-03 (Daniel Rakos) |
| - Added allocation callbacks to vkDestroySurfaceKHR. |
| |
| * Revision 24, 2015-11-10 (Jesse Hall) |
| - Removed VkSurfaceTransformKHR. |
| Use VkSurfaceTransformFlagBitsKHR instead. |
| - Rename VkSurfaceCapabilitiesKHR member maxImageArraySize to |
| maxImageArrayLayers. |
| |
| * Revision 25, 2016-01-14 (James Jones) |
| - Moved VK_ERROR_NATIVE_WINDOW_IN_USE_KHR from the |
| VK_KHR_android_surface to the VK_KHR_surface extension. |
| |
| * 2016-08-23 (Ian Elliott) |
| - Update the example code, to not have so many characters per line, and |
| to split out a new example to show how to obtain function pointers. |
| |
| * 2016-08-25 (Ian Elliott) |
| - A note was added at the beginning of the example code, stating that it |
| will be removed from future versions of the appendix. |