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

[[platformCreateSurface_macos,platformCreateSurface_macos]]
=== macOS Platform

[open,refpage='vkCreateMacOSSurfaceMVK',desc='Create a VkSurfaceKHR object for a macOS NSView',type='protos']
--
To create a sname:VkSurfaceKHR object for a macOS code:NSView or
basetype:CAMetalLayer, call:

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

ifdef::VK_EXT_metal_surface[]
[NOTE]
.Note
====
The `vkCreateMacOSSurfaceMVK` 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:VkMacOSSurfaceCreateInfoMVK
    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/vkCreateMacOSSurfaceMVK.txt[]
--

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

include::{generated}/api/structs/VkMacOSSurfaceCreateInfoMVK.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
    an code:NSView object.

.Valid Usage
****
  * [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-04144]]
    If pname:pView is a basetype:CAMetalLayer object, it must: be a valid
    basetype:CAMetalLayer
  * [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317]]
    If pname:pView is an code:NSView object, it must: be a valid
    code:NSView, must: be backed by a code:CALayer object of type
    basetype:CAMetalLayer, and flink:vkCreateMacOSSurfaceMVK must: be called
    on the main thread
****

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

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

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