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

[[headless,headless]]

=== Presenting to headless surfaces

Vulkan rendering can be presented to a headless surface, where the
presentation operation is a no-op producing no externally-visible result.

[NOTE]
.Note
====
Because there is no real presentation target, the headless presentation
engine may be extended to impose an arbitrary or customisable set of
restrictions and features.
This makes it a useful portable test target for applications targeting a
wide range of presentation engines where the actual target presentation
engines might be scarce, unavailable or otherwise undesirable or
inconvenient to use for general Vulkan application development.

The usual surface query mechanisms must be used to determine the actual
restrictions and features of the implementation.
====

[open,refpage='vkCreateHeadlessSurfaceEXT',desc='Create a headless slink:VkSurfaceKHR object',type='protos']
--
To create a headless sname:VkSurfaceKHR object, call:

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

  * pname:instance is the instance to associate the surface with.
  * pname:pCreateInfo is a pointer to a slink:VkHeadlessSurfaceCreateInfoEXT
    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 sname:VkSurfaceKHR handle in which the
    created surface object is returned.

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

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

include::{generated}/api/structs/VkHeadlessSurfaceCreateInfoEXT.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.

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

For headless surfaces, pname:currentExtent is the reserved value
[eq]#(0xFFFFFFFF, 0xFFFFFFFF)#.
Whatever the application sets a swapchain's pname:imageExtent to will be the
size of the surface, after the first image is presented.

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

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