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

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

=== Other Extension Metadata

*Last Modified Date*::
    2016-01-14
*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_android_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
basetype:ANativeWindow, Android's native surface type.
The basetype:ANativeWindow represents the producer endpoint of any buffer
queue, regardless of consumer endpoint.
Common consumer endpoints for code:ANativeWindows are the system window
compositor, video encoders, and application-specific compositors importing
the images through a code:SurfaceTexture.

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

=== Issues

1) Does Android need a way to query for compatibility between a particular
physical device (and queue family?) and a specific Android display?

*RESOLVED*: No.
Currently on Android, any physical device is expected to be able to present
to the system compositor, and all queue families must support the necessary
image layout transitions and synchronization operations.

=== Version History

 * Revision 1, 2015-09-23 (Jesse Hall)
   - Initial draft.

 * Revision 2, 2015-10-26 (Ian Elliott)
   - Renamed from VK_EXT_KHR_android_surface to VK_KHR_android_surface.

 * Revision 3, 2015-11-03 (Daniel Rakos)
   - Added allocation callbacks to surface creation function.

 * Revision 4, 2015-11-10 (Jesse Hall)
   - Removed VK_ERROR_INVALID_ANDROID_WINDOW_KHR.

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

 * Revision 6, 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.
