// Copyright (c) 2020 Qualcomm Technologies, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-09-18
*Interactions and External Dependencies*::
  - None
*Contributors*::
  - Jeff Leger, Qualcomm Technologies, Inc.

=== Description

This extension extends adds an optional rotation transform to copy commands
flink:vkCmdBlitImage2KHR, flink:vkCmdCopyImageToBuffer2KHR and
flink:vkCmdCopyBufferToImage2KHR.
When copying between two resources, where one resource contains rotated
content and the other does not, a rotated copy may be desired.
This extension may be used in combination with VK_QCOM_render_pass_transform
which adds rotated render passes.

This extension adds an extension structure to the following commands:
vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
vkCmdCopyBufferToImage2KHR


=== Issues

1) What is an appropriate name for the added extension structure? The style
guide says "`Structures which extend other structures through the
pname:pNext chain should reflect the name of the base structure they
extend.`", but in this case a single extension structure is used to extend
three base structures (vkCmdBlitImage2KHR, vkCmdCopyImageToBuffer2KHR and
vkCmdCopyBufferToImage2KHR).
Creating three identical structures with unique names seemed undesirable.

*RESOLVED*: Deviate from the style guide for extension structure naming.


2) Should this extension add a rotation capability to vkCmdCopyImage2KHR?

*RESOLVED*: No.
Use of rotated vkCmdBlitImage2KHR can fully address this use-case.

3) Should this extension add a rotation capability to vkCmdResolveImage2KHR?

*RESOLVED* No.
Use of vkCmdResolveImage2KHR is very slow and extremely bandwidth intensive
on Qualcomm's GPU architecture and use of pResolveAttachments in
vkRenderPass is the strongly preferred approach.
Therefore, we choose not to introduce a rotation capability to
vkCmdResolveImage2KHR.

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

=== Version History

  * Revision 1, 2020-09-19 (Jeff Leger)
