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

[[platformCreateSurface_imagepipe,platformCreateSurface_imagepipe]]

=== Fuchsia Platform

[open,refpage='vkCreateImagePipeSurfaceFUCHSIA',desc='Create a slink:VkSurfaceKHR object for a Fuchsia ImagePipe',type='protos']
--
To create a sname:VkSurfaceKHR object for a Fuchsia ImagePipe, call:

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

  * pname:instance is the instance to associate with the surface.
  * pname:pCreateInfo is a pointer to a
    slink:VkImagePipeSurfaceCreateInfoFUCHSIA 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/vkCreateImagePipeSurfaceFUCHSIA.txt[]
--

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

include::{generated}/api/structs/VkImagePipeSurfaceCreateInfoFUCHSIA.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:imagePipeHandle is a code:zx_handle_t referring to the ImagePipe
    to associate with the surface.

.Valid Usage
****
  * [[VUID-VkImagePipeSurfaceCreateInfoFUCHSIA-imagePipeHandle-04863]]
    pname:imagePipeHandle must: be a valid code:zx_handle_t
****

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

On Fuchsia, the surface pname:currentExtent is the special value
[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#, indicating that the surface size will be
determined by the extent of a swapchain targeting the surface.

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

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