// Copyright (c) 2015-2018 The Brenwill Workshop Ltd.
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-07-31
*IP Status*::
    No known IP claims.
*Contributors*::
  - Bill Hollings, The Brenwill Workshop Ltd.

=== Description

The `VK_MVK_ios_surface` extension is an instance extension.
It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
the `apiext:VK_KHR_surface` extension) based on a code:UIView, the native
surface type of iOS, which is underpinned by a basetype:CAMetalLayer, to
support rendering to the surface using Apple's Metal framework.

ifdef::VK_EXT_metal_surface[]
=== Deprecation by `VK_EXT_metal_surface`

The `VK_MVK_ios_surface` extension is considered deprecated and has been
superseded by the `apiext:VK_EXT_metal_surface` extension.
endif::VK_EXT_metal_surface[]

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

=== Version History

 * Revision 1, 2017-02-15 (Bill Hollings)
   - Initial draft.

 * Revision 2, 2017-02-24 (Bill Hollings)
   - Minor syntax fix to emphasize firm requirement for `UIView` to be
     backed by a `CAMetalLayer`.

 * Revision 3, 2020-07-31 (Bill Hollings)
   - Update documentation on requirements for UIView.
   - Mark as deprecated by `VK_EXT_metal_surface`.
