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

include::{generated}/meta/{refprefix}VK_KHR_xcb_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_xcb_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 XCB client-side library, as well as a query to determine support
for rendering via XCB.

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

=== Issues

1) Does XCB 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 an (xcb_connection_t*,
     xcb_visualid_t) pair.
   - Removed "`root`" parameter from CreateXcbSurfaceKHR(), as it is
     redundant when a window on the same screen is specified as well.
   - Adjusted wording of issue #1 and added agreed upon resolution.

 * Revision 3, 2015-10-14 (Ian Elliott)
   - Removed "`root`" parameter from CreateXcbSurfaceKHR() in one more
     place.

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

 * Revision 5, 2015-10-23 (Daniel Rakos)
   - Added allocation callbacks to vkCreateXcbSurfaceKHR.

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