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

[[platformCreateSurface_directfb,platformCreateSurface_directfb]]

=== DirectFB Platform

[open,refpage='vkCreateDirectFBSurfaceEXT',desc='Create a slink:VkSurfaceKHR object for a DirectFB surface',type='protos']
--
To create a sname:VkSurfaceKHR object for a DirectFB surface, call:

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

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

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

include::{generated}/api/structs/VkDirectFBSurfaceCreateInfoEXT.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:dfb is a pointer to the code:IDirectFB main interface of DirectFB.
  * pname:surface is a pointer to a code:IDirectFBSurface surface interface.

.Valid Usage
****
  * [[VUID-VkDirectFBSurfaceCreateInfoEXT-dfb-04117]]
    pname:dfb must: point to a valid DirectFB code:IDirectFB
  * [[VUID-VkDirectFBSurfaceCreateInfoEXT-surface-04118]]
    pname:surface must: point to a valid DirectFB code:IDirectFBSurface
****

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

With DirectFB, pname:minImageExtent, pname:maxImageExtent, and
pname:currentExtent must: always equal the surface size.

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

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