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

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

=== Other Extension Metadata

*Last Modified Date*::
    2021-08-18
*Interactions and External Dependencies*::
  - Requires SPIR-V 1.2 for code:LocalSizeId
*Contributors*::
  - Lionel Duc, NVIDIA
  - Jason Ekstrand, Intel
  - Spencer Fricke, Samsung
  - Tobias Hector, AMD
  - Lionel Landwerlin, Intel
  - Graeme Leese, Broadcom
  - Tom Olson, Arm
  - Stu Smith, AMD

=== Description

`VK_KHR_maintenance4` adds a collection of minor features, none of which
would warrant an entire extension of their own.

The new features are as follows:

  * Allow the application to destroy their slink:VkPipelineLayout object
    immediately after it was used to create another object.
    It is no longer necessary to keep its handle valid while the created
    object is in use.
  * Add a new <<limits-maxBufferSize, pname:maxBufferSize>>
    implementation-defined limit for the maximum size sname:VkBuffer that
    can: be created.
  * Add support for the SPIR-V 1.2 code:LocalSizeId execution mode, which
    can be used as an alternative to code:LocalSize to specify the local
    workgroup size with specialization constants.
  * Add a guarantee that images created with identical creation parameters
    will always have the same alignment requirements.
  * Add new flink:vkGetDeviceBufferMemoryRequirementsKHR,
    flink:vkGetDeviceImageMemoryRequirementsKHR, and
    flink:vkGetDeviceImageSparseMemoryRequirementsKHR to allow the
    application to query the image memory requirements without having to
    create an image object and query it.
  * Relax the requirement that push constants must be initialized before
    they are dynamically accessed.
  * Relax the interface matching rules to allow a larger output vector to
    match with a smaller input vector, with additional values being
    discarded.
  
include::{generated}/interfaces/VK_KHR_maintenance4.txt[]

=== Issues

None.

=== Version History

 * Revision 1, 2021-08-18 (Piers Daniell)
    - Internal revisions
