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

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

=== Other Extension Metadata

*Last Modified Date*::
    2018-12-19
*IP Status*::
    No known IP claims.
*Contributors*::
  - Courtney Goeltzenleuchter, Google

=== Description

This extension defines two new structures and a function to assign SMPTE
(the Society of Motion Picture and Television Engineers) 2086 metadata and
CTA (Consumer Technology Association) 861.3 metadata to a swapchain.
The metadata includes the color primaries, white point, and luminance range
of the reference monitor, which all together define the color volume that
contains all the possible colors the reference monitor can produce.
The reference monitor is the display where creative work is done and
creative intent is established.
To preserve such creative intent as much as possible and achieve consistent
color reproduction on different viewing displays, it is useful for the
display pipeline to know the color volume of the original reference monitor
where content was created or tuned.
This avoids performing unnecessary mapping of colors that are not
displayable on the original reference monitor.
The metadata also includes the pname:maxContentLightLevel and
pname:maxFrameAverageLightLevel as defined by CTA 861.3.

While the general purpose of the metadata is to assist in the transformation
between different color volumes of different displays and help achieve
better color reproduction, it is not in the scope of this extension to
define how exactly the metadata should be used in such a process.
It is up to the implementation to determine how to make use of the metadata.

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

=== Issues

1) Do we need a query function?

*PROPOSED*: No, Vulkan does not provide queries for state that the
application can track on its own.

2) Should we specify default if not specified by the application?

*PROPOSED*: No, that leaves the default up to the display.

=== Version History

  * Revision 1, 2016-12-27 (Courtney Goeltzenleuchter)
    - Initial version
  * Revision 2, 2018-12-19 (Courtney Goeltzenleuchter)
    - Correct implicit validity for VkHdrMetadataEXT structure
