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

include::{generated}/meta/{refprefix}VK_KHR_maintenance1.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2018-03-13
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.1 Core
*Contributors*::
  - Dan Ginsburg, Valve
  - Daniel Koch, NVIDIA
  - Daniel Rakos, AMD
  - Jan-Harald Fredriksen, ARM
  - Jason Ekstrand, Intel
  - Jeff Bolz, NVIDIA
  - Jesse Hall, Google
  - John Kessenich, Google
  - Michael Worcester, Imagination Technologies
  - Neil Henning, Codeplay Software Ltd.
  - Piers Daniell, NVIDIA
  - Slawomir Grajewski, Intel
  - Tobias Hector, Imagination Technologies
  - Tom Olson, ARM

=== Description

`VK_KHR_maintenance1` adds a collection of minor features that were
intentionally left out or overlooked from the original Vulkan 1.0 release.

The new features are as follows:

  * Allow 2D and 2D array image views to be created from 3D images, which
    can then be used as color framebuffer attachments.
    This allows applications to render to slices of a 3D image.
  * Support flink:vkCmdCopyImage between 2D array layers and 3D slices.
    This extension allows copying from layers of a 2D array image to slices
    of a 3D image and vice versa.
  * Allow negative height to be specified in the
    slink:VkViewport::pname:height field to perform y-inversion of the
    clip-space to framebuffer-space transform.
    This allows apps to avoid having to use `gl_Position.y = -gl_Position.y`
    in shaders also targeting other APIs.
  * Allow implementations to express support for doing just transfers and
    clears of image formats that they otherwise support no other format
    features for.
    This is done by adding new format feature flags
    ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR and
    ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR.
  * Support flink:vkCmdFillBuffer on transfer-only queues.
    Previously flink:vkCmdFillBuffer was defined to only work on command
    buffers allocated from command pools which support graphics or compute
    queues.
    It is now allowed on queues that just support transfer operations.
  * Fix the inconsistency of how error conditions are returned between the
    flink:vkCreateGraphicsPipelines and flink:vkCreateComputePipelines
    functions and the flink:vkAllocateDescriptorSets and
    flink:vkAllocateCommandBuffers functions.
  * Add new ename:VK_ERROR_OUT_OF_POOL_MEMORY_KHR error so implementations
    can give a more precise reason for flink:vkAllocateDescriptorSets
    failures.
  * Add a new command flink:vkTrimCommandPoolKHR which gives the
    implementation an opportunity to release any unused command pool memory
    back to the system.

=== Promotion to Vulkan 1.1

All functionality in this extension is included in core Vulkan 1.1, with the
KHR suffix omitted.
The original type, enum and command names are still available as aliases of
the core functionality.

include::{generated}/interfaces/VK_KHR_maintenance1.txt[]

=== Issues

  . Are viewports with zero height allowed?
+
*RESOLVED*: Yes, although they have low utility.

=== Version History

 * Revision 1, 2016-10-26 (Piers Daniell)
   - Internal revisions
 * Revision 2, 2018-03-13 (Jon Leech)
   - Add issue for zero-height viewports
