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

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

=== Other Extension Metadata

*Last Modified Date*::
    2016-11-02
*IP Status*::
    No known IP claims.
*Contributors*::
  - Ian Elliott, Google
  - Jesse Hall, Google
  - Alon Or-bach, Samsung
  - James Jones, NVIDIA
  - Daniel Rakos, AMD
  - Ray Smith, ARM
  - Mika Isojarvi, Google
  - Jeff Juliano, NVIDIA
  - Jeff Bolz, NVIDIA

=== Description

This device extension extends flink:vkQueuePresentKHR, from the
`apiext:VK_KHR_swapchain` extension, allowing an application to specify a
list of rectangular, modified regions of each image to present.
This should be used in situations where an application is only changing a
small portion of the presentable images within a swapchain, since it enables
the presentation engine to avoid wasting time presenting parts of the
surface that have not changed.

This extension is leveraged from the `EGL_KHR_swap_buffers_with_damage`
extension.

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

=== Issues

1) How should we handle steroescopic-3D swapchains? We need to add a layer
for each rectangle.
One approach is to create another struct containing the slink:VkRect2D plus
layer, and have slink:VkPresentRegionsKHR point to an array of that struct.
Another approach is to have two parallel arrays, ptext:pRectangles and
ptext:pLayers, where ptext:pRectangles[i] and ptext:pLayers[i] must be used
together.
Which approach should we use, and if the array of a new structure, what
should that be called?

*RESOLVED*: Create a new structure, which is a slink:VkRect2D plus a layer,
and will be called slink:VkRectLayerKHR.

2) Where is the origin of the slink:VkRectLayerKHR?

*RESOLVED*: The upper left corner of the presentable image(s) of the
swapchain, per the definition of framebuffer coordinates.

3) Does the rectangular region, slink:VkRectLayerKHR, specify pixels of the
swapchain's image(s), or of the surface?

*RESOLVED*: Of the image(s).
Some presentation engines may scale the pixels of a swapchain's image(s) to
the size of the surface.
The size of the swapchain's image(s) will be consistent, where the size of
the surface may vary over time.

4) What if all of the rectangles for a given swapchain contain a width
and/or height of zero?

*RESOLVED*: The application is indicating that no pixels changed since the
last present.
The presentation engine may use such a hint and not update any pixels for
the swapchain.
However, all other semantics of flink:vkQueuePresentKHR must still be
honored, including waiting for semaphores to signal.

5) When the swapchain is created with
sname:VkSwapchainCreateInfoKHR::pname:preTransform set to a value other than
ename:VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, should the rectangular region,
slink:VkRectLayerKHR, be transformed to align with the pname:preTransform?

*RESOLVED*: No.
The rectangular region in slink:VkRectLayerKHR should not be tranformed.
As such, it may not align with the extents of the swapchain's image(s).
It is the responsibility of the presentation engine to transform the
rectangular region.
This matches the behavior of the Android presentation engine, which set the
precedent.

=== Version History

 * Revision 1, 2016-11-02 (Ian Elliott)
   - Internal revisions
 * Revision 2, 2021-03-18 (Ian Elliott)
   - Clarified alignment of rectangles for presentation engines that support
     transformed swapchains.
