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

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

=== Other Extension Metadata

*Last Modified Date*::
    2020-07-06
*Interactions and External Dependencies*::
  - None
*Contributors*::
  - Jeff Leger, Qualcomm
  - Tobias Hector, AMD
  - Jan-Harald Fredriksen, ARM
  - Tom Olson, ARM


=== Description

This extension provides extensible versions of the Vulkan buffer and image
copy commands.
The new commands are functionally identical to the core commands, except
that their copy parameters are specified using extensible structures that
can be used to pass extension-specific information.

The following extensible copy commands are introduced with this extension:
flink:vkCmdCopyBuffer2KHR, flink:vkCmdCopyImage2KHR,
flink:vkCmdCopyBufferToImage2KHR, flink:vkCmdCopyImageToBuffer2KHR,
flink:vkCmdBlitImage2KHR, and flink:vkCmdResolveImage2KHR.
Each command contains an stext:*Info2KHR structure parameter that includes
ptext:sType/ptext:pNext members.
Lower level structures that describe each region to be copied are also
extended with ptext:sType/ptext:pNext members.

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

=== Version History

 * Revision 1, 2020-07-06 (Jeff Leger)
   - Internal revisions
