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

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

=== Other Extension Metadata

*Last Modified Date*::
    2017-08-11
*IP Status*::
    No known IP claims.
*Interactions and External Dependencies*::
  - Promoted to Vulkan 1.1 Core
*Contributors*::
  - Andrew Garrard, Samsung Electronics
  - Tobias Hector, Imagination Technologies
  - James Jones, NVIDIA
  - Daniel Koch, NVIDIA
  - Daniel Rakos, AMD
  - Romain Guy, Google
  - Jesse Hall, Google
  - Tom Cooksey, ARM Ltd
  - Jeff Leger, Qualcomm Technologies, Inc
  - Jan-Harald Fredriksen, ARM Ltd
  - Jan Outters, Samsung Electronics
  - Alon Or-bach, Samsung Electronics
  - Michael Worcester, Imagination Technologies
  - Jeff Bolz, NVIDIA
  - Tony Zlatinski, NVIDIA
  - Matthew Netsch, Qualcomm Technologies, Inc

=== Description

The use of {YCbCr} sampler conversion is an area in 3D graphics not used by
most Vulkan developers.
It is mainly used for processing inputs from video decoders and cameras.
The use of the extension assumes basic knowledge of {YCbCr} concepts.

This extension provides the ability to perform specified color space
conversions during texture sampling operations for the {YCbCr} color space
natively.
It also adds a selection of multi-planar formats, image aspect plane, and
the ability to bind memory to the planes of an image collectively or
separately.

=== Promotion to Vulkan 1.1

All functionality in this extension is included in core Vulkan 1.1, with the
KHR suffix omitted.
However, if Vulkan 1.1 is supported and this extension is not, the
code:samplerYcbcrConversion capability is optional.
The original type, enum and command names are still available as aliases of
the core functionality.

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

=== Version History

 * Revision 1, 2017-01-24 (Andrew Garrard)
   - Initial draft
 * Revision 2, 2017-01-25 (Andrew Garrard)
   - After initial feedback
 * Revision 3, 2017-01-27 (Andrew Garrard)
   - Higher bit depth formats, renaming, swizzle
 * Revision 4, 2017-02-22 (Andrew Garrard)
   - Added query function, formats as RGB, clarifications
 * Revision 5, 2017-04-?? (Andrew Garrard)
   - Simplified query and removed output conversions
 * Revision 6, 2017-04-24 (Andrew Garrard)
   - Tidying, incorporated new image query, restored transfer functions
 * Revision 7, 2017-04-25 (Andrew Garrard)
   - Added cosited option/midpoint requirement for formats,
     "`bypassConversion`"
 * Revision 8, 2017-04-25 (Andrew Garrard)
   - Simplified further
 * Revision 9, 2017-04-27 (Andrew Garrard)
   - Disjoint no more
 * Revision 10, 2017-04-28 (Andrew Garrard)
   - Restored disjoint
 * Revision 11, 2017-04-29 (Andrew Garrard)
   - Now Ycbcr conversion, and KHR
 * Revision 12, 2017-06-06 (Andrew Garrard)
   - Added conversion to image view creation
 * Revision 13, 2017-07-13 (Andrew Garrard)
   - Allowed cosited-only chroma samples for formats
 * Revision 14, 2017-08-11 (Andrew Garrard)
   - Reflected quantization changes in BT.2100-1
