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

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

=== Other Extension Metadata

*Last Modified Date*::
    2016-12-13
*IP Status*::
    No known IP claims.
*Contributors*::
  - Dave Airlie, Red Hat
  - Pierre Boudier, NVIDIA
  - James Jones, NVIDIA
  - Damien Leone, NVIDIA
  - Pierre-Loup Griffais, Valve
  - Liam Middlebrook, NVIDIA
  - Daniel Vetter, Intel

=== Description

This extension allows an application to take exclusive control on a display
currently associated with an X11 screen.
When control is acquired, the display will be deassociated from the X11
screen until control is released or the specified display connection is
closed.
Essentially, the X11 screen will behave as if the monitor has been unplugged
until control is released.

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

=== Issues

1) Should flink:vkAcquireXlibDisplayEXT take an RandR display ID, or a
Vulkan display handle as input?

*RESOLVED*: A Vulkan display handle.
Otherwise there would be no way to specify handles to displays that had been
prevented from being included in the X11 display list by some native
platform or vendor-specific mechanism.

2) How does an application figure out which RandR display corresponds to a
Vulkan display?

*RESOLVED*: A new function, flink:vkGetRandROutputDisplayEXT, is introduced
for this purpose.

3) Should flink:vkGetRandROutputDisplayEXT be part of this extension, or a
general Vulkan / RandR or Vulkan / Xlib extension?

*RESOLVED*: To avoid yet another extension, include it in this extension.

=== Version History

 * Revision 1, 2016-12-13 (James Jones)
   - Initial draft
