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

[[platformCreateSurface_ios,platformCreateSurface_ios]]
=== iOS Platform

[open,refpage='vkCreateIOSSurfaceMVK',desc='Create a VkSurfaceKHR object for an iOS UIView',type='protos']
--
To create a sname:VkSurfaceKHR object for an iOS code:UIView or
basetype:CAMetalLayer, call:

include::{generated}/api/protos/vkCreateIOSSurfaceMVK.txt[]

ifdef::VK_EXT_metal_surface[]
[NOTE]
.Note
====
The `vkCreateIOSSurfaceMVK` function is considered deprecated and has been
superseded by flink:vkCreateMetalSurfaceEXT from the
`apiext:VK_EXT_metal_surface` extension.
====
endif::VK_EXT_metal_surface[]

  * pname:instance is the instance with which to associate the surface.
  * pname:pCreateInfo is a pointer to a slink:VkIOSSurfaceCreateInfoMVK
    structure containing parameters affecting the creation of the surface
    object.
  * pname:pAllocator is the allocator used for host memory allocated for the
    surface object when there is no more specific allocator available (see
    <<memory-allocation,Memory Allocation>>).
  * pname:pSurface is a pointer to a slink:VkSurfaceKHR handle in which the
    created surface object is returned.

include::{generated}/validity/protos/vkCreateIOSSurfaceMVK.txt[]
--

[open,refpage='VkIOSSurfaceCreateInfoMVK',desc='Structure specifying parameters of a newly created iOS surface object',type='structs']
--
The slink:VkIOSSurfaceCreateInfoMVK structure is defined as:

include::{generated}/api/structs/VkIOSSurfaceCreateInfoMVK.txt[]

  * pname:sType is the type of this structure.
  * pname:pNext is `NULL` or a pointer to a structure extending this
    structure.
  * pname:flags is reserved for future use.
  * pname:pView is a reference to either a basetype:CAMetalLayer object or a
    code:UIView object.

.Valid Usage
****
  * [[VUID-VkIOSSurfaceCreateInfoMVK-pView-04143]]
    If pname:pView is a basetype:CAMetalLayer object, it must: be a valid
    basetype:CAMetalLayer
  * [[VUID-VkIOSSurfaceCreateInfoMVK-pView-01316]]
    If pname:pView is a code:UIView object, it must: be a valid code:UIView,
    must: be backed by a code:CALayer object of type basetype:CAMetalLayer,
    and flink:vkCreateIOSSurfaceMVK must: be called on the main thread
****

include::{generated}/validity/structs/VkIOSSurfaceCreateInfoMVK.txt[]
--

[open,refpage='VkIOSSurfaceCreateFlagsMVK',desc='Reserved for future use',type='flags']
--
include::{generated}/api/flags/VkIOSSurfaceCreateFlagsMVK.txt[]

tname:VkIOSSurfaceCreateFlagsMVK is a bitmask type for setting a mask, but
is currently reserved for future use.
--
