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

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

=== Other Extension Metadata

*Last Modified Date*::
    2021-09-29
*IP Status*::
    No known IP claims.
*Contributors*::
  - Jan-Harald Fredriksen, Arm
  - Graeme Leese, Broadcom
  - Spencer Fricke, Samsung

=== Description

This extension enables the
ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 format to be used without
a <<samplers-YCbCr-conversion, sampler {YCbCr} conversion>> enabled.

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

=== Issues

1) Should we reuse the existing format enumeration or introduce a new one?

*RESOLVED*: We reuse an existing format enumeration,
ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, that was previously
exclusively used for YCbCr and therefore had a set of limitations related to
that usage.
The alternative was to introduce a new format token with exactly the same
bit representation as the existing token, but without the limitations.

2) Should we only introduce
ename:VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 or also 1-3 component
variations?

*RESOLVED*: Only the 4-component format is introduced because the 1- and 2-
component variations are already not exclusive to YCbCr, and the 3-component
variation is not a good match for hardware capabilities.

=== Version History

 * Revision 1, 2021-09-29 (Jan-Harald Fredriksen)
   - Initial EXT version
