// Copyright 2014-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_KHR_xlib_surface.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2015-11-28
*IP Status*::
    No known IP claims.
*Contributors*::
  - Patrick Doane, Blizzard
  - Jason Ekstrand, Intel
  - Ian Elliott, LunarG
  - Courtney Goeltzenleuchter, LunarG
  - Jesse Hall, Google
  - James Jones, NVIDIA
  - Antoine Labour, Google
  - Jon Leech, Khronos
  - David Mao, AMD
  - Norbert Nopper, Freescale
  - Alon Or-bach, Samsung
  - Daniel Rakos, AMD
  - Graham Sellers, AMD
  - Ray Smith, ARM
  - Jeff Vigil, Qualcomm
  - Chia-I Wu, LunarG

=== Description

The `VK_KHR_xlib_surface` extension is an instance extension.
It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
the `apiext:VK_KHR_surface` extension) that refers to an X11 code:Window,
using the Xlib client-side library, as well as a query to determine support
for rendering via Xlib.

include::{generated}/interfaces/VK_KHR_xlib_surface.txt[]

=== Issues

1) Does X11 need a way to query for compatibility between a particular
physical device and a specific screen? This would be a more general query
than flink:vkGetPhysicalDeviceSurfaceSupportKHR; if it returned
ename:VK_TRUE, then the physical device could be assumed to support
presentation to any window on that screen.

*RESOLVED*: Yes, this is needed for toolkits that want to create a
slink:VkDevice before creating a window.
To ensure the query is reliable, it must be made against a particular X
visual rather than the screen in general.

=== Version History

 * Revision 1, 2015-09-23 (Jesse Hall)
   - Initial draft, based on the previous contents of VK_EXT_KHR_swapchain
     (later renamed VK_EXT_KHR_surface).

 * Revision 2, 2015-10-02 (James Jones)
   - Added presentation support query for (Display*, VisualID) pair.
   - Removed "`root`" parameter from CreateXlibSurfaceKHR(), as it is
     redundant when a window on the same screen is specified as well.
   - Added appropriate X errors.
   - Adjusted wording of issue #1 and added agreed upon resolution.

 * Revision 3, 2015-10-14 (Ian Elliott)
   - Renamed this extension from VK_EXT_KHR_x11_surface to
     VK_EXT_KHR_xlib_surface.

 * Revision 4, 2015-10-26 (Ian Elliott)
   - Renamed from VK_EXT_KHR_xlib_surface to VK_KHR_xlib_surface.

 * Revision 5, 2015-11-03 (Daniel Rakos)
   - Added allocation callbacks to vkCreateXlibSurfaceKHR.

 * Revision 6, 2015-11-28 (Daniel Rakos)
   - Updated the surface create function to take a pCreateInfo structure.
