| 1 | /* The Khronos Data Format Specification (version 1.3) */  |
| 2 | /*  |
| 3 | ** Copyright 2015-2020 The Khronos Group Inc.  |
| 4 | ** SPDX-License-Identifier: Apache-2.0  |
| 5 | */  |
| 6 |   |
| 7 | /* This header defines a structure that can describe the layout of image  |
| 8 | formats in memory. This means that the data format is transparent to  |
| 9 | the application, and the expectation is that this should be used when  |
| 10 | the layout is defined external to the API. Many Khronos APIs deliberately  |
| 11 | keep the internal layout of images opaque, to allow proprietary layouts  |
| 12 | and optimisations. This structure is not appropriate for describing  |
| 13 | opaque layouts. */  |
| 14 |   |
| 15 | /* We stick to standard C89 constructs for simplicity and portability. */  |
| 16 |   |
| 17 | #ifndef _KHR_DATA_FORMAT_H_  |
| 18 | #define _KHR_DATA_FORMAT_H_  |
| 19 |   |
| 20 | /** @file  |
| 21 | * @~English  |
| 22 | * @brief Data Format enums and macros.  |
| 23 | */  |
| 24 |   |
| 25 | /* Accessors */  |
| 26 | typedef enum _khr_word_e {  |
| 27 | KHR_DF_WORD_VENDORID = 0U,  |
| 28 | KHR_DF_WORD_DESCRIPTORTYPE = 0U,  |
| 29 | KHR_DF_WORD_VERSIONNUMBER = 1U,  |
| 30 | KHR_DF_WORD_DESCRIPTORBLOCKSIZE = 1U,  |
| 31 | KHR_DF_WORD_MODEL = 2U,  |
| 32 | KHR_DF_WORD_PRIMARIES = 2U,  |
| 33 | KHR_DF_WORD_TRANSFER = 2U,  |
| 34 | KHR_DF_WORD_FLAGS = 2U,  |
| 35 | KHR_DF_WORD_TEXELBLOCKDIMENSION0 = 3U,  |
| 36 | KHR_DF_WORD_TEXELBLOCKDIMENSION1 = 3U,  |
| 37 | KHR_DF_WORD_TEXELBLOCKDIMENSION2 = 3U,  |
| 38 | KHR_DF_WORD_TEXELBLOCKDIMENSION3 = 3U,  |
| 39 | KHR_DF_WORD_BYTESPLANE0 = 4U,  |
| 40 | KHR_DF_WORD_BYTESPLANE1 = 4U,  |
| 41 | KHR_DF_WORD_BYTESPLANE2 = 4U,  |
| 42 | KHR_DF_WORD_BYTESPLANE3 = 4U,  |
| 43 | KHR_DF_WORD_BYTESPLANE4 = 5U,  |
| 44 | KHR_DF_WORD_BYTESPLANE5 = 5U,  |
| 45 | KHR_DF_WORD_BYTESPLANE6 = 5U,  |
| 46 | KHR_DF_WORD_BYTESPLANE7 = 5U,  |
| 47 | KHR_DF_WORD_SAMPLESTART = 6U,  |
| 48 | KHR_DF_WORD_SAMPLEWORDS = 4U  |
| 49 | } khr_df_word_e;  |
| 50 |   |
| 51 | typedef enum _khr_df_shift_e {  |
| 52 | KHR_DF_SHIFT_VENDORID = 0U,  |
| 53 | KHR_DF_SHIFT_DESCRIPTORTYPE = 17U,  |
| 54 | KHR_DF_SHIFT_VERSIONNUMBER = 0U,  |
| 55 | KHR_DF_SHIFT_DESCRIPTORBLOCKSIZE = 16U,  |
| 56 | KHR_DF_SHIFT_MODEL = 0U,  |
| 57 | KHR_DF_SHIFT_PRIMARIES = 8U,  |
| 58 | KHR_DF_SHIFT_TRANSFER = 16U,  |
| 59 | KHR_DF_SHIFT_FLAGS = 24U,  |
| 60 | KHR_DF_SHIFT_TEXELBLOCKDIMENSION0 = 0U,  |
| 61 | KHR_DF_SHIFT_TEXELBLOCKDIMENSION1 = 8U,  |
| 62 | KHR_DF_SHIFT_TEXELBLOCKDIMENSION2 = 16U,  |
| 63 | KHR_DF_SHIFT_TEXELBLOCKDIMENSION3 = 24U,  |
| 64 | KHR_DF_SHIFT_BYTESPLANE0 = 0U,  |
| 65 | KHR_DF_SHIFT_BYTESPLANE1 = 8U,  |
| 66 | KHR_DF_SHIFT_BYTESPLANE2 = 16U,  |
| 67 | KHR_DF_SHIFT_BYTESPLANE3 = 24U,  |
| 68 | KHR_DF_SHIFT_BYTESPLANE4 = 0U,  |
| 69 | KHR_DF_SHIFT_BYTESPLANE5 = 8U,  |
| 70 | KHR_DF_SHIFT_BYTESPLANE6 = 16U,  |
| 71 | KHR_DF_SHIFT_BYTESPLANE7 = 24U  |
| 72 | } khr_df_shift_e;  |
| 73 |   |
| 74 | typedef enum _khr_df_mask_e {  |
| 75 | KHR_DF_MASK_VENDORID = 0x1FFFFU,  |
| 76 | KHR_DF_MASK_DESCRIPTORTYPE = 0x7FFFU,  |
| 77 | KHR_DF_MASK_VERSIONNUMBER = 0xFFFFU,  |
| 78 | KHR_DF_MASK_DESCRIPTORBLOCKSIZE = 0xFFFFU,  |
| 79 | KHR_DF_MASK_MODEL = 0xFFU,  |
| 80 | KHR_DF_MASK_PRIMARIES = 0xFFU,  |
| 81 | KHR_DF_MASK_TRANSFER = 0xFFU,  |
| 82 | KHR_DF_MASK_FLAGS = 0xFFU,  |
| 83 | KHR_DF_MASK_TEXELBLOCKDIMENSION0 = 0xFFU,  |
| 84 | KHR_DF_MASK_TEXELBLOCKDIMENSION1 = 0xFFU,  |
| 85 | KHR_DF_MASK_TEXELBLOCKDIMENSION2 = 0xFFU,  |
| 86 | KHR_DF_MASK_TEXELBLOCKDIMENSION3 = 0xFFU,  |
| 87 | KHR_DF_MASK_BYTESPLANE0 = 0xFFU,  |
| 88 | KHR_DF_MASK_BYTESPLANE1 = 0xFFU,  |
| 89 | KHR_DF_MASK_BYTESPLANE2 = 0xFFU,  |
| 90 | KHR_DF_MASK_BYTESPLANE3 = 0xFFU,  |
| 91 | KHR_DF_MASK_BYTESPLANE4 = 0xFFU,  |
| 92 | KHR_DF_MASK_BYTESPLANE5 = 0xFFU,  |
| 93 | KHR_DF_MASK_BYTESPLANE6 = 0xFFU,  |
| 94 | KHR_DF_MASK_BYTESPLANE7 = 0xFFU  |
| 95 | } khr_df_mask_e;  |
| 96 |   |
| 97 | /* Helper macro:  |
| 98 | Extract field X from basic descriptor block BDB */  |
| 99 | #define KHR_DFDVAL(BDB, X) \  |
| 100 | (((BDB)[KHR_DF_WORD_ ## X] >> (KHR_DF_SHIFT_ ## X)) \  |
| 101 | & (KHR_DF_MASK_ ## X))  |
| 102 |   |
| 103 | /* Helper macro:  |
| 104 | Set field X of basic descriptor block BDB */  |
| 105 | #define KHR_DFDSETVAL(BDB, X, val) \  |
| 106 | ((BDB)[KHR_DF_WORD_ ## X] = \  |
| 107 | ((BDB)[KHR_DF_WORD_ ## X] & \  |
| 108 | ~((KHR_DF_MASK_ ## X) << (KHR_DF_SHIFT_ ## X))) | \  |
| 109 | (((val) & (KHR_DF_MASK_ ## X)) << (KHR_DF_SHIFT_ ## X)))  |
| 110 |   |
| 111 | /* Offsets relative to the start of a sample */  |
| 112 | typedef enum _khr_df_sampleword_e {  |
| 113 | KHR_DF_SAMPLEWORD_BITOFFSET = 0U,  |
| 114 | KHR_DF_SAMPLEWORD_BITLENGTH = 0U,  |
| 115 | KHR_DF_SAMPLEWORD_CHANNELID = 0U,  |
| 116 | KHR_DF_SAMPLEWORD_QUALIFIERS = 0U,  |
| 117 | KHR_DF_SAMPLEWORD_SAMPLEPOSITION0 = 1U,  |
| 118 | KHR_DF_SAMPLEWORD_SAMPLEPOSITION1 = 1U,  |
| 119 | KHR_DF_SAMPLEWORD_SAMPLEPOSITION2 = 1U,  |
| 120 | KHR_DF_SAMPLEWORD_SAMPLEPOSITION3 = 1U,  |
| 121 | KHR_DF_SAMPLEWORD_SAMPLEPOSITION_ALL = 1U,  |
| 122 | KHR_DF_SAMPLEWORD_SAMPLELOWER = 2U,  |
| 123 | KHR_DF_SAMPLEWORD_SAMPLEUPPER = 3U  |
| 124 | } khr_df_sampleword_e;  |
| 125 |   |
| 126 | typedef enum _khr_df_sampleshift_e {  |
| 127 | KHR_DF_SAMPLESHIFT_BITOFFSET = 0U,  |
| 128 | KHR_DF_SAMPLESHIFT_BITLENGTH = 16U,  |
| 129 | KHR_DF_SAMPLESHIFT_CHANNELID = 24U,  |
| 130 | /* N.B. Qualifiers are defined as an offset into a byte */  |
| 131 | KHR_DF_SAMPLESHIFT_QUALIFIERS = 24U,  |
| 132 | KHR_DF_SAMPLESHIFT_SAMPLEPOSITION0 = 0U,  |
| 133 | KHR_DF_SAMPLESHIFT_SAMPLEPOSITION1 = 8U,  |
| 134 | KHR_DF_SAMPLESHIFT_SAMPLEPOSITION2 = 16U,  |
| 135 | KHR_DF_SAMPLESHIFT_SAMPLEPOSITION3 = 24U,  |
| 136 | KHR_DF_SAMPLESHIFT_SAMPLEPOSITION_ALL = 0U,  |
| 137 | KHR_DF_SAMPLESHIFT_SAMPLELOWER = 0U,  |
| 138 | KHR_DF_SAMPLESHIFT_SAMPLEUPPER = 0U  |
| 139 | } khr_df_sampleshift_e;  |
| 140 |   |
| 141 | typedef enum _khr_df_samplemask_e {  |
| 142 | KHR_DF_SAMPLEMASK_BITOFFSET = 0xFFFFU,  |
| 143 | KHR_DF_SAMPLEMASK_BITLENGTH = 0xFF,  |
| 144 | KHR_DF_SAMPLEMASK_CHANNELID = 0xF,  |
| 145 | /* N.B. Qualifiers are defined as an offset into a byte */  |
| 146 | KHR_DF_SAMPLEMASK_QUALIFIERS = 0xF0,  |
| 147 | KHR_DF_SAMPLEMASK_SAMPLEPOSITION0 = 0xFF,  |
| 148 | KHR_DF_SAMPLEMASK_SAMPLEPOSITION1 = 0xFF,  |
| 149 | KHR_DF_SAMPLEMASK_SAMPLEPOSITION2 = 0xFF,  |
| 150 | KHR_DF_SAMPLEMASK_SAMPLEPOSITION3 = 0xFF,  |
| 151 | /* ISO C restricts enum values to range of int hence the  |
| 152 | cast. We do it verbosely instead of using -1 to ensure  |
| 153 | it is a 32-bit value even if int is 64 bits. */  |
| 154 | KHR_DF_SAMPLEMASK_SAMPLEPOSITION_ALL = (int) 0xFFFFFFFFU,  |
| 155 | KHR_DF_SAMPLEMASK_SAMPLELOWER = (int) 0xFFFFFFFFU,  |
| 156 | KHR_DF_SAMPLEMASK_SAMPLEUPPER = (int) 0xFFFFFFFFU  |
| 157 | } khr_df_samplemask_e;  |
| 158 |   |
| 159 | /* Helper macro:  |
| 160 | Extract field X of sample S from basic descriptor block BDB */  |
| 161 | #define KHR_DFDSVAL(BDB, S, X) \  |
| 162 | (((BDB)[KHR_DF_WORD_SAMPLESTART + \  |
| 163 | ((S) * KHR_DF_WORD_SAMPLEWORDS) + \  |
| 164 | KHR_DF_SAMPLEWORD_ ## X] >> (KHR_DF_SAMPLESHIFT_ ## X)) \  |
| 165 | & (KHR_DF_SAMPLEMASK_ ## X))  |
| 166 |   |
| 167 | /* Helper macro:  |
| 168 | Set field X of sample S of basic descriptor block BDB */  |
| 169 | #define KHR_DFDSETSVAL(BDB, S, X, val) \  |
| 170 | ((BDB)[KHR_DF_WORD_SAMPLESTART + \  |
| 171 | ((S) * KHR_DF_WORD_SAMPLEWORDS) + \  |
| 172 | KHR_DF_SAMPLEWORD_ ## X] = \  |
| 173 | ((BDB)[KHR_DF_WORD_SAMPLESTART + \  |
| 174 | ((S) * KHR_DF_WORD_SAMPLEWORDS) + \  |
| 175 | KHR_DF_SAMPLEWORD_ ## X] & \  |
| 176 | ~((uint32_t)(KHR_DF_SAMPLEMASK_ ## X) << (KHR_DF_SAMPLESHIFT_ ## X))) | \  |
| 177 | (((val) & (uint32_t)(KHR_DF_SAMPLEMASK_ ## X)) << (KHR_DF_SAMPLESHIFT_ ## X)))  |
| 178 |   |
| 179 | /* Helper macro:  |
| 180 | Number of samples in basic descriptor block BDB */  |
| 181 | #define KHR_DFDSAMPLECOUNT(BDB) \  |
| 182 | (((KHR_DFDVAL(BDB, DESCRIPTORBLOCKSIZE) >> 2) - \  |
| 183 | KHR_DF_WORD_SAMPLESTART) \  |
| 184 | / KHR_DF_WORD_SAMPLEWORDS)  |
| 185 |   |
| 186 | /* Helper macro:  |
| 187 | Size in words of basic descriptor block for S samples */  |
| 188 | #define KHR_DFDSIZEWORDS(S) \  |
| 189 | (KHR_DF_WORD_SAMPLESTART + \  |
| 190 | (S) * KHR_DF_WORD_SAMPLEWORDS)  |
| 191 |   |
| 192 | /* Vendor ids */  |
| 193 | typedef enum _khr_df_vendorid_e {  |
| 194 | /* Standard Khronos descriptor */  |
| 195 | KHR_DF_VENDORID_KHRONOS = 0U,  |
| 196 | KHR_DF_VENDORID_MAX = 0x1FFFFU  |
| 197 | } khr_df_vendorid_e;  |
| 198 |   |
| 199 | /* Descriptor types */  |
| 200 | typedef enum _khr_df_khr_descriptortype_e {  |
| 201 | /* Default Khronos basic descriptor block */  |
| 202 | KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0U,  |
| 203 | /* Extension descriptor block for additional planes */  |
| 204 | KHR_DF_KHR_DESCRIPTORTYPE_ADDITIONAL_PLANES = 0x6001U,  |
| 205 | /* Extension descriptor block for additional dimensions */  |
| 206 | KHR_DF_KHR_DESCRIPTORTYPE_ADDITIONAL_DIMENSIONS = 0x6002U,  |
| 207 | /* Bit indicates modifying requires understanding this extension */  |
| 208 | KHR_DF_KHR_DESCRIPTORTYPE_NEEDED_FOR_WRITE_BIT = 0x2000U,  |
| 209 | /* Bit indicates processing requires understanding this extension */  |
| 210 | KHR_DF_KHR_DESCRIPTORTYPE_NEEDED_FOR_DECODE_BIT = 0x4000U,  |
| 211 | KHR_DF_KHR_DESCRIPTORTYPE_MAX = 0x7FFFU  |
| 212 | } khr_df_khr_descriptortype_e;  |
| 213 |   |
| 214 | /* Descriptor block version */  |
| 215 | typedef enum _khr_df_versionnumber_e {  |
| 216 | /* Standard Khronos descriptor */  |
| 217 | KHR_DF_VERSIONNUMBER_1_0 = 0U, /* Version 1.0 of the specification */  |
| 218 | KHR_DF_VERSIONNUMBER_1_1 = 0U, /* Version 1.1 did not bump the version number */  |
| 219 | KHR_DF_VERSIONNUMBER_1_2 = 1U, /* Version 1.2 increased the version number */  |
| 220 | KHR_DF_VERSIONNUMBER_1_3 = 2U, /* Version 1.3 increased the version number */  |
| 221 | KHR_DF_VERSIONNUMBER_LATEST = KHR_DF_VERSIONNUMBER_1_3,  |
| 222 | KHR_DF_VERSIONNUMBER_MAX = 0xFFFFU  |
| 223 | } khr_df_versionnumber_e;  |
| 224 |   |
| 225 | /** @~English  |
| 226 | @brief Model in which the color coordinate space is defined.  |
| 227 | There is no requirement that a color format use all the  |
| 228 | channel types that are defined in the color model. */  |
| 229 | typedef enum _khr_df_model_e {  |
| 230 | /** No interpretation of color channels defined */  |
| 231 | KHR_DF_MODEL_UNSPECIFIED = 0U,  |
| 232 | /** Color primaries (red, green, blue) + alpha, depth and stencil */  |
| 233 | KHR_DF_MODEL_RGBSDA = 1U,  |
| 234 | /** Color differences (Y', Cb, Cr) + alpha, depth and stencil */  |
| 235 | KHR_DF_MODEL_YUVSDA = 2U,  |
| 236 | /** Color differences (Y', I, Q) + alpha, depth and stencil */  |
| 237 | KHR_DF_MODEL_YIQSDA = 3U,  |
| 238 | /** Perceptual color (CIE L*a*b*) + alpha, depth and stencil */  |
| 239 | KHR_DF_MODEL_LABSDA = 4U,  |
| 240 | /** Subtractive colors (cyan, magenta, yellow, black) + alpha */  |
| 241 | KHR_DF_MODEL_CMYKA = 5U,  |
| 242 | /** Non-color coordinate data (X, Y, Z, W) */  |
| 243 | KHR_DF_MODEL_XYZW = 6U,  |
| 244 | /** Hue, saturation, value, hue angle on color circle, plus alpha */  |
| 245 | KHR_DF_MODEL_HSVA_ANG = 7U,  |
| 246 | /** Hue, saturation, lightness, hue angle on color circle, plus alpha */  |
| 247 | KHR_DF_MODEL_HSLA_ANG = 8U,  |
| 248 | /** Hue, saturation, value, hue on color hexagon, plus alpha */  |
| 249 | KHR_DF_MODEL_HSVA_HEX = 9U,  |
| 250 | /** Hue, saturation, lightness, hue on color hexagon, plus alpha */  |
| 251 | KHR_DF_MODEL_HSLA_HEX = 10U,  |
| 252 | /** Lightweight approximate color difference (luma, orange, green) */  |
| 253 | KHR_DF_MODEL_YCGCOA = 11U,  |
| 254 | /** ITU BT.2020 constant luminance YcCbcCrc */  |
| 255 | KHR_DF_MODEL_YCCBCCRC = 12U,  |
| 256 | /** ITU BT.2100 constant intensity ICtCp */  |
| 257 | KHR_DF_MODEL_ICTCP = 13U,  |
| 258 | /** CIE 1931 XYZ color coordinates (X, Y, Z) */  |
| 259 | KHR_DF_MODEL_CIEXYZ = 14U,  |
| 260 | /** CIE 1931 xyY color coordinates (X, Y, Y) */  |
| 261 | KHR_DF_MODEL_CIEXYY = 15U,  |
| 262 |   |
| 263 | /* Compressed formats start at 128. */  |
| 264 | /* These compressed formats should generally have a single sample,  |
| 265 | sited at the 0,0 position of the texel block. Where multiple  |
| 266 | channels are used to distinguish formats, these should be cosited. */  |
| 267 | /* Direct3D (and S3) compressed formats */  |
| 268 | /* Note that premultiplied status is recorded separately */  |
| 269 | /** DXT1 "channels" are RGB (0), Alpha (1)  |
| 270 | DXT1/BC1 with one channel is opaque  |
| 271 | DXT1/BC1 with a cosited alpha sample is transparent */  |
| 272 | KHR_DF_MODEL_DXT1A = 128U,  |
| 273 | KHR_DF_MODEL_BC1A = 128U,  |
| 274 | /** DXT2/DXT3/BC2, with explicit 4-bit alpha */  |
| 275 | KHR_DF_MODEL_DXT2 = 129U,  |
| 276 | KHR_DF_MODEL_DXT3 = 129U,  |
| 277 | KHR_DF_MODEL_BC2 = 129U,  |
| 278 | /** DXT4/DXT5/BC3, with interpolated alpha */  |
| 279 | KHR_DF_MODEL_DXT4 = 130U,  |
| 280 | KHR_DF_MODEL_DXT5 = 130U,  |
| 281 | KHR_DF_MODEL_BC3 = 130U,  |
| 282 | /** BC4 - single channel interpolated 8-bit data  |
| 283 | (The UNORM/SNORM variation is recorded in the channel data) */  |
| 284 | KHR_DF_MODEL_BC4 = 131U,  |
| 285 | /** BC5 - two channel interpolated 8-bit data  |
| 286 | (The UNORM/SNORM variation is recorded in the channel data) */  |
| 287 | KHR_DF_MODEL_BC5 = 132U,  |
| 288 | /** BC6H - DX11 format for 16-bit float channels */  |
| 289 | KHR_DF_MODEL_BC6H = 133U,  |
| 290 | /** BC7 - DX11 format */  |
| 291 | KHR_DF_MODEL_BC7 = 134U,  |
| 292 | /* Gap left for future desktop expansion */  |
| 293 |   |
| 294 | /* Mobile compressed formats follow */  |
| 295 | /** A format of ETC1 indicates that the format shall be decodable  |
| 296 | by an ETC1-compliant decoder and not rely on ETC2 features */  |
| 297 | KHR_DF_MODEL_ETC1 = 160U,  |
| 298 | /** A format of ETC2 is permitted to use ETC2 encodings on top of  |
| 299 | the baseline ETC1 specification.  |
| 300 | The ETC2 format has channels "red", "green", "RGB" and "alpha",  |
| 301 | which should be cosited samples.  |
| 302 | Punch-through alpha can be distinguished from full alpha by  |
| 303 | the plane size in bytes required for the texel block */  |
| 304 | KHR_DF_MODEL_ETC2 = 161U,  |
| 305 | /** Adaptive Scalable Texture Compression */  |
| 306 | /** ASTC HDR vs LDR is determined by the float flag in the channel */  |
| 307 | /** ASTC block size can be distinguished by texel block size */  |
| 308 | KHR_DF_MODEL_ASTC = 162U,  |
| 309 | /** ETC1S is a simplified subset of ETC1 */  |
| 310 | KHR_DF_MODEL_ETC1S = 163U,  |
| 311 | /** PowerVR Texture Compression v1 */  |
| 312 | KHR_DF_MODEL_PVRTC = 164U,  |
| 313 | /** PowerVR Texture Compression v2 */  |
| 314 | KHR_DF_MODEL_PVRTC2 = 165U,  |
| 315 | /** UASTC is a transcodable subset of ASTC  |
| 316 | with additions to support the transcoding. */  |
| 317 | KHR_DF_MODEL_UASTC = 166U,  |
| 318 | /* Proprietary formats (ATITC, etc.) should follow */  |
| 319 | KHR_DF_MODEL_MAX = 0xFFU  |
| 320 | } khr_df_model_e;  |
| 321 |   |
| 322 | /* Definition of channel names for each color model */  |
| 323 | typedef enum _khr_df_model_channels_e {  |
| 324 | /* Unspecified format with nominal channel numbering */  |
| 325 | KHR_DF_CHANNEL_UNSPECIFIED_0 = 0U,  |
| 326 | KHR_DF_CHANNEL_UNSPECIFIED_1 = 1U,  |
| 327 | KHR_DF_CHANNEL_UNSPECIFIED_2 = 2U,  |
| 328 | KHR_DF_CHANNEL_UNSPECIFIED_3 = 3U,  |
| 329 | KHR_DF_CHANNEL_UNSPECIFIED_4 = 4U,  |
| 330 | KHR_DF_CHANNEL_UNSPECIFIED_5 = 5U,  |
| 331 | KHR_DF_CHANNEL_UNSPECIFIED_6 = 6U,  |
| 332 | KHR_DF_CHANNEL_UNSPECIFIED_7 = 7U,  |
| 333 | KHR_DF_CHANNEL_UNSPECIFIED_8 = 8U,  |
| 334 | KHR_DF_CHANNEL_UNSPECIFIED_9 = 9U,  |
| 335 | KHR_DF_CHANNEL_UNSPECIFIED_10 = 10U,  |
| 336 | KHR_DF_CHANNEL_UNSPECIFIED_11 = 11U,  |
| 337 | KHR_DF_CHANNEL_UNSPECIFIED_12 = 12U,  |
| 338 | KHR_DF_CHANNEL_UNSPECIFIED_13 = 13U,  |
| 339 | KHR_DF_CHANNEL_UNSPECIFIED_14 = 14U,  |
| 340 | KHR_DF_CHANNEL_UNSPECIFIED_15 = 15U,  |
| 341 | /* MODEL_RGBSDA - red, green, blue, stencil, depth, alpha */  |
| 342 | KHR_DF_CHANNEL_RGBSDA_RED = 0U,  |
| 343 | KHR_DF_CHANNEL_RGBSDA_R = 0U,  |
| 344 | KHR_DF_CHANNEL_RGBSDA_GREEN = 1U,  |
| 345 | KHR_DF_CHANNEL_RGBSDA_G = 1U,  |
| 346 | KHR_DF_CHANNEL_RGBSDA_BLUE = 2U,  |
| 347 | KHR_DF_CHANNEL_RGBSDA_B = 2U,  |
| 348 | KHR_DF_CHANNEL_RGBSDA_STENCIL = 13U,  |
| 349 | KHR_DF_CHANNEL_RGBSDA_S = 13U,  |
| 350 | KHR_DF_CHANNEL_RGBSDA_DEPTH = 14U,  |
| 351 | KHR_DF_CHANNEL_RGBSDA_D = 14U,  |
| 352 | KHR_DF_CHANNEL_RGBSDA_ALPHA = 15U,  |
| 353 | KHR_DF_CHANNEL_RGBSDA_A = 15U,  |
| 354 | /* MODEL_YUVSDA - luma, Cb, Cr, stencil, depth, alpha */  |
| 355 | KHR_DF_CHANNEL_YUVSDA_Y = 0U,  |
| 356 | KHR_DF_CHANNEL_YUVSDA_CB = 1U,  |
| 357 | KHR_DF_CHANNEL_YUVSDA_U = 1U,  |
| 358 | KHR_DF_CHANNEL_YUVSDA_CR = 2U,  |
| 359 | KHR_DF_CHANNEL_YUVSDA_V = 2U,  |
| 360 | KHR_DF_CHANNEL_YUVSDA_STENCIL = 13U,  |
| 361 | KHR_DF_CHANNEL_YUVSDA_S = 13U,  |
| 362 | KHR_DF_CHANNEL_YUVSDA_DEPTH = 14U,  |
| 363 | KHR_DF_CHANNEL_YUVSDA_D = 14U,  |
| 364 | KHR_DF_CHANNEL_YUVSDA_ALPHA = 15U,  |
| 365 | KHR_DF_CHANNEL_YUVSDA_A = 15U,  |
| 366 | /* MODEL_YIQSDA - luma, in-phase, quadrature, stencil, depth, alpha */  |
| 367 | KHR_DF_CHANNEL_YIQSDA_Y = 0U,  |
| 368 | KHR_DF_CHANNEL_YIQSDA_I = 1U,  |
| 369 | KHR_DF_CHANNEL_YIQSDA_Q = 2U,  |
| 370 | KHR_DF_CHANNEL_YIQSDA_STENCIL = 13U,  |
| 371 | KHR_DF_CHANNEL_YIQSDA_S = 13U,  |
| 372 | KHR_DF_CHANNEL_YIQSDA_DEPTH = 14U,  |
| 373 | KHR_DF_CHANNEL_YIQSDA_D = 14U,  |
| 374 | KHR_DF_CHANNEL_YIQSDA_ALPHA = 15U,  |
| 375 | KHR_DF_CHANNEL_YIQSDA_A = 15U,  |
| 376 | /* MODEL_LABSDA - CIELAB/L*a*b* luma, red-green, blue-yellow, stencil, depth, alpha */  |
| 377 | KHR_DF_CHANNEL_LABSDA_L = 0U,  |
| 378 | KHR_DF_CHANNEL_LABSDA_A = 1U,  |
| 379 | KHR_DF_CHANNEL_LABSDA_B = 2U,  |
| 380 | KHR_DF_CHANNEL_LABSDA_STENCIL = 13U,  |
| 381 | KHR_DF_CHANNEL_LABSDA_S = 13U,  |
| 382 | KHR_DF_CHANNEL_LABSDA_DEPTH = 14U,  |
| 383 | KHR_DF_CHANNEL_LABSDA_D = 14U,  |
| 384 | KHR_DF_CHANNEL_LABSDA_ALPHA = 15U,  |
| 385 | /* NOTE: KHR_DF_CHANNEL_LABSDA_A is not a synonym for alpha! */  |
| 386 | /* MODEL_CMYKA - cyan, magenta, yellow, key/blacK, alpha */  |
| 387 | KHR_DF_CHANNEL_CMYKSDA_CYAN = 0U,  |
| 388 | KHR_DF_CHANNEL_CMYKSDA_C = 0U,  |
| 389 | KHR_DF_CHANNEL_CMYKSDA_MAGENTA = 1U,  |
| 390 | KHR_DF_CHANNEL_CMYKSDA_M = 1U,  |
| 391 | KHR_DF_CHANNEL_CMYKSDA_YELLOW = 2U,  |
| 392 | KHR_DF_CHANNEL_CMYKSDA_Y = 2U,  |
| 393 | KHR_DF_CHANNEL_CMYKSDA_KEY = 3U,  |
| 394 | KHR_DF_CHANNEL_CMYKSDA_BLACK = 3U,  |
| 395 | KHR_DF_CHANNEL_CMYKSDA_K = 3U,  |
| 396 | KHR_DF_CHANNEL_CMYKSDA_ALPHA = 15U,  |
| 397 | KHR_DF_CHANNEL_CMYKSDA_A = 15U,  |
| 398 | /* MODEL_XYZW - coordinates x, y, z, w */  |
| 399 | KHR_DF_CHANNEL_XYZW_X = 0U,  |
| 400 | KHR_DF_CHANNEL_XYZW_Y = 1U,  |
| 401 | KHR_DF_CHANNEL_XYZW_Z = 2U,  |
| 402 | KHR_DF_CHANNEL_XYZW_W = 3U,  |
| 403 | /* MODEL_HSVA_ANG - value (luma), saturation, hue, alpha, angular projection, conical space */  |
| 404 | KHR_DF_CHANNEL_HSVA_ANG_VALUE = 0U,  |
| 405 | KHR_DF_CHANNEL_HSVA_ANG_V = 0U,  |
| 406 | KHR_DF_CHANNEL_HSVA_ANG_SATURATION = 1U,  |
| 407 | KHR_DF_CHANNEL_HSVA_ANG_S = 1U,  |
| 408 | KHR_DF_CHANNEL_HSVA_ANG_HUE = 2U,  |
| 409 | KHR_DF_CHANNEL_HSVA_ANG_H = 2U,  |
| 410 | KHR_DF_CHANNEL_HSVA_ANG_ALPHA = 15U,  |
| 411 | KHR_DF_CHANNEL_HSVA_ANG_A = 15U,  |
| 412 | /* MODEL_HSLA_ANG - lightness (luma), saturation, hue, alpha, angular projection, double conical space */  |
| 413 | KHR_DF_CHANNEL_HSLA_ANG_LIGHTNESS = 0U,  |
| 414 | KHR_DF_CHANNEL_HSLA_ANG_L = 0U,  |
| 415 | KHR_DF_CHANNEL_HSLA_ANG_SATURATION = 1U,  |
| 416 | KHR_DF_CHANNEL_HSLA_ANG_S = 1U,  |
| 417 | KHR_DF_CHANNEL_HSLA_ANG_HUE = 2U,  |
| 418 | KHR_DF_CHANNEL_HSLA_ANG_H = 2U,  |
| 419 | KHR_DF_CHANNEL_HSLA_ANG_ALPHA = 15U,  |
| 420 | KHR_DF_CHANNEL_HSLA_ANG_A = 15U,  |
| 421 | /* MODEL_HSVA_HEX - value (luma), saturation, hue, alpha, hexagonal projection, conical space */  |
| 422 | KHR_DF_CHANNEL_HSVA_HEX_VALUE = 0U,  |
| 423 | KHR_DF_CHANNEL_HSVA_HEX_V = 0U,  |
| 424 | KHR_DF_CHANNEL_HSVA_HEX_SATURATION = 1U,  |
| 425 | KHR_DF_CHANNEL_HSVA_HEX_S = 1U,  |
| 426 | KHR_DF_CHANNEL_HSVA_HEX_HUE = 2U,  |
| 427 | KHR_DF_CHANNEL_HSVA_HEX_H = 2U,  |
| 428 | KHR_DF_CHANNEL_HSVA_HEX_ALPHA = 15U,  |
| 429 | KHR_DF_CHANNEL_HSVA_HEX_A = 15U,  |
| 430 | /* MODEL_HSLA_HEX - lightness (luma), saturation, hue, alpha, hexagonal projection, double conical space */  |
| 431 | KHR_DF_CHANNEL_HSLA_HEX_LIGHTNESS = 0U,  |
| 432 | KHR_DF_CHANNEL_HSLA_HEX_L = 0U,  |
| 433 | KHR_DF_CHANNEL_HSLA_HEX_SATURATION = 1U,  |
| 434 | KHR_DF_CHANNEL_HSLA_HEX_S = 1U,  |
| 435 | KHR_DF_CHANNEL_HSLA_HEX_HUE = 2U,  |
| 436 | KHR_DF_CHANNEL_HSLA_HEX_H = 2U,  |
| 437 | KHR_DF_CHANNEL_HSLA_HEX_ALPHA = 15U,  |
| 438 | KHR_DF_CHANNEL_HSLA_HEX_A = 15U,  |
| 439 | /* MODEL_YCGCOA - luma, green delta, orange delta, alpha */  |
| 440 | KHR_DF_CHANNEL_YCGCOA_Y = 0U,  |
| 441 | KHR_DF_CHANNEL_YCGCOA_CG = 1U,  |
| 442 | KHR_DF_CHANNEL_YCGCOA_CO = 2U,  |
| 443 | KHR_DF_CHANNEL_YCGCOA_ALPHA = 15U,  |
| 444 | KHR_DF_CHANNEL_YCGCOA_A = 15U,  |
| 445 | /* MODEL_CIEXYZ - CIE 1931 X, Y, Z */  |
| 446 | KHR_DF_CHANNEL_CIEXYZ_X = 0U,  |
| 447 | KHR_DF_CHANNEL_CIEXYZ_Y = 1U,  |
| 448 | KHR_DF_CHANNEL_CIEXYZ_Z = 2U,  |
| 449 | /* MODEL_CIEXYY - CIE 1931 x, y, Y */  |
| 450 | KHR_DF_CHANNEL_CIEXYY_X = 0U,  |
| 451 | KHR_DF_CHANNEL_CIEXYY_YCHROMA = 1U,  |
| 452 | KHR_DF_CHANNEL_CIEXYY_YLUMA = 2U,  |
| 453 |   |
| 454 | /* Compressed formats */  |
| 455 | /* MODEL_DXT1A/MODEL_BC1A */  |
| 456 | KHR_DF_CHANNEL_DXT1A_COLOR = 0U,  |
| 457 | KHR_DF_CHANNEL_BC1A_COLOR = 0U,  |
| 458 | KHR_DF_CHANNEL_DXT1A_ALPHAPRESENT = 1U,  |
| 459 | KHR_DF_CHANNEL_DXT1A_ALPHA = 1U,  |
| 460 | KHR_DF_CHANNEL_BC1A_ALPHAPRESENT = 1U,  |
| 461 | KHR_DF_CHANNEL_BC1A_ALPHA = 1U,  |
| 462 | /* MODEL_DXT2/3/MODEL_BC2 */  |
| 463 | KHR_DF_CHANNEL_DXT2_COLOR = 0U,  |
| 464 | KHR_DF_CHANNEL_DXT3_COLOR = 0U,  |
| 465 | KHR_DF_CHANNEL_BC2_COLOR = 0U,  |
| 466 | KHR_DF_CHANNEL_DXT2_ALPHA = 15U,  |
| 467 | KHR_DF_CHANNEL_DXT3_ALPHA = 15U,  |
| 468 | KHR_DF_CHANNEL_BC2_ALPHA = 15U,  |
| 469 | /* MODEL_DXT4/5/MODEL_BC3 */  |
| 470 | KHR_DF_CHANNEL_DXT4_COLOR = 0U,  |
| 471 | KHR_DF_CHANNEL_DXT5_COLOR = 0U,  |
| 472 | KHR_DF_CHANNEL_BC3_COLOR = 0U,  |
| 473 | KHR_DF_CHANNEL_DXT4_ALPHA = 15U,  |
| 474 | KHR_DF_CHANNEL_DXT5_ALPHA = 15U,  |
| 475 | KHR_DF_CHANNEL_BC3_ALPHA = 15U,  |
| 476 | /* MODEL_BC4 */  |
| 477 | KHR_DF_CHANNEL_BC4_DATA = 0U,  |
| 478 | /* MODEL_BC5 */  |
| 479 | KHR_DF_CHANNEL_BC5_RED = 0U,  |
| 480 | KHR_DF_CHANNEL_BC5_R = 0U,  |
| 481 | KHR_DF_CHANNEL_BC5_GREEN = 1U,  |
| 482 | KHR_DF_CHANNEL_BC5_G = 1U,  |
| 483 | /* MODEL_BC6H */  |
| 484 | KHR_DF_CHANNEL_BC6H_COLOR = 0U,  |
| 485 | KHR_DF_CHANNEL_BC6H_DATA = 0U,  |
| 486 | /* MODEL_BC7 */  |
| 487 | KHR_DF_CHANNEL_BC7_DATA = 0U,  |
| 488 | KHR_DF_CHANNEL_BC7_COLOR = 0U,  |
| 489 | /* MODEL_ETC1 */  |
| 490 | KHR_DF_CHANNEL_ETC1_DATA = 0U,  |
| 491 | KHR_DF_CHANNEL_ETC1_COLOR = 0U,  |
| 492 | /* MODEL_ETC2 */  |
| 493 | KHR_DF_CHANNEL_ETC2_RED = 0U,  |
| 494 | KHR_DF_CHANNEL_ETC2_R = 0U,  |
| 495 | KHR_DF_CHANNEL_ETC2_GREEN = 1U,  |
| 496 | KHR_DF_CHANNEL_ETC2_G = 1U,  |
| 497 | KHR_DF_CHANNEL_ETC2_COLOR = 2U,  |
| 498 | KHR_DF_CHANNEL_ETC2_ALPHA = 15U,  |
| 499 | KHR_DF_CHANNEL_ETC2_A = 15U,  |
| 500 | /* MODEL_ASTC */  |
| 501 | KHR_DF_CHANNEL_ASTC_DATA = 0U,  |
| 502 | /* MODEL_ETC1S */  |
| 503 | KHR_DF_CHANNEL_ETC1S_RGB = 0U,  |
| 504 | KHR_DF_CHANNEL_ETC1S_RRR = 3U,  |
| 505 | KHR_DF_CHANNEL_ETC1S_GGG = 4U,  |
| 506 | KHR_DF_CHANNEL_ETC1S_AAA = 15U,  |
| 507 | /* MODEL_PVRTC */  |
| 508 | KHR_DF_CHANNEL_PVRTC_DATA = 0U,  |
| 509 | KHR_DF_CHANNEL_PVRTC_COLOR = 0U,  |
| 510 | /* MODEL_PVRTC2 */  |
| 511 | KHR_DF_CHANNEL_PVRTC2_DATA = 0U,  |
| 512 | KHR_DF_CHANNEL_PVRTC2_COLOR = 0U,  |
| 513 | /* MODEL UASTC */  |
| 514 | KHR_DF_CHANNEL_UASTC_DATA = 0U,  |
| 515 | KHR_DF_CHANNEL_UASTC_RGB = 0U,  |
| 516 | KHR_DF_CHANNEL_UASTC_RGBA = 3U,  |
| 517 | KHR_DF_CHANNEL_UASTC_RRR = 4U,  |
| 518 | KHR_DF_CHANNEL_UASTC_RRRG = 5U,  |
| 519 | KHR_DF_CHANNEL_UASTC_RG = 6U,  |
| 520 |   |
| 521 | /* Common channel names shared by multiple formats */  |
| 522 | KHR_DF_CHANNEL_COMMON_LUMA = 0U,  |
| 523 | KHR_DF_CHANNEL_COMMON_L = 0U,  |
| 524 | KHR_DF_CHANNEL_COMMON_STENCIL = 13U,  |
| 525 | KHR_DF_CHANNEL_COMMON_S = 13U,  |
| 526 | KHR_DF_CHANNEL_COMMON_DEPTH = 14U,  |
| 527 | KHR_DF_CHANNEL_COMMON_D = 14U,  |
| 528 | KHR_DF_CHANNEL_COMMON_ALPHA = 15U,  |
| 529 | KHR_DF_CHANNEL_COMMON_A = 15U  |
| 530 | } khr_df_model_channels_e;  |
| 531 |   |
| 532 | /** @~English  |
| 533 | @brief Definition of the primary colors in color coordinates.  |
| 534 | This is implicitly responsible for defining the conversion  |
| 535 | between RGB an YUV color spaces.  |
| 536 | LAB and related absolute color models should use  |
| 537 | KHR_DF_PRIMARIES_CIEXYZ. */  |
| 538 | typedef enum _khr_df_primaries_e {  |
| 539 | /** No color primaries defined */  |
| 540 | KHR_DF_PRIMARIES_UNSPECIFIED = 0U,  |
| 541 | /** Color primaries of ITU-R BT.709 and sRGB */  |
| 542 | KHR_DF_PRIMARIES_BT709 = 1U,  |
| 543 | /** Synonym for KHR_DF_PRIMARIES_BT709 */  |
| 544 | KHR_DF_PRIMARIES_SRGB = 1U,  |
| 545 | /** Color primaries of ITU-R BT.601 (625-line EBU variant) */  |
| 546 | KHR_DF_PRIMARIES_BT601_EBU = 2U,  |
| 547 | /** Color primaries of ITU-R BT.601 (525-line SMPTE C variant) */  |
| 548 | KHR_DF_PRIMARIES_BT601_SMPTE = 3U,  |
| 549 | /** Color primaries of ITU-R BT.2020 */  |
| 550 | KHR_DF_PRIMARIES_BT2020 = 4U,  |
| 551 | /** CIE theoretical color coordinate space */  |
| 552 | KHR_DF_PRIMARIES_CIEXYZ = 5U,  |
| 553 | /** Academy Color Encoding System primaries */  |
| 554 | KHR_DF_PRIMARIES_ACES = 6U,  |
| 555 | /** Color primaries of ACEScc */  |
| 556 | KHR_DF_PRIMARIES_ACESCC = 7U,  |
| 557 | /** Legacy NTSC 1953 primaries */  |
| 558 | KHR_DF_PRIMARIES_NTSC1953 = 8U,  |
| 559 | /** Legacy PAL 525-line primaries */  |
| 560 | KHR_DF_PRIMARIES_PAL525 = 9U,  |
| 561 | /** Color primaries of Display P3 */  |
| 562 | KHR_DF_PRIMARIES_DISPLAYP3 = 10U,  |
| 563 | /** Color primaries of Adobe RGB (1998) */  |
| 564 | KHR_DF_PRIMARIES_ADOBERGB = 11U,  |
| 565 | KHR_DF_PRIMARIES_MAX = 0xFFU  |
| 566 | } khr_df_primaries_e;  |
| 567 |   |
| 568 | /** @~English  |
| 569 | @brief Definition of the optical to digital transfer function  |
| 570 | ("gamma correction"). Most transfer functions are not a pure  |
| 571 | power function and also include a linear element.  |
| 572 | LAB and related absolute color representations should use  |
| 573 | KHR_DF_TRANSFER_UNSPECIFIED. */  |
| 574 | typedef enum _khr_df_transfer_e {  |
| 575 | /** No transfer function defined */  |
| 576 | KHR_DF_TRANSFER_UNSPECIFIED = 0U,  |
| 577 | /** Linear transfer function (value proportional to intensity) */  |
| 578 | KHR_DF_TRANSFER_LINEAR = 1U,  |
| 579 | /** Perceptually-linear transfer function of sRGH (~2.4) */  |
| 580 | KHR_DF_TRANSFER_SRGB = 2U,  |
| 581 | /** Perceptually-linear transfer function of ITU BT.601, BT.709 and BT.2020 (~1/.45) */  |
| 582 | KHR_DF_TRANSFER_ITU = 3U,  |
| 583 | /** SMTPE170M (digital NTSC) defines an alias for the ITU transfer function (~1/.45) */  |
| 584 | KHR_DF_TRANSFER_SMTPE170M = 3U,  |
| 585 | /** Perceptually-linear gamma function of original NTSC (simple 2.2 gamma) */  |
| 586 | KHR_DF_TRANSFER_NTSC = 4U,  |
| 587 | /** Sony S-log used by Sony video cameras */  |
| 588 | KHR_DF_TRANSFER_SLOG = 5U,  |
| 589 | /** Sony S-log 2 used by Sony video cameras */  |
| 590 | KHR_DF_TRANSFER_SLOG2 = 6U,  |
| 591 | /** ITU BT.1886 EOTF */  |
| 592 | KHR_DF_TRANSFER_BT1886 = 7U,  |
| 593 | /** ITU BT.2100 HLG OETF */  |
| 594 | KHR_DF_TRANSFER_HLG_OETF = 8U,  |
| 595 | /** ITU BT.2100 HLG EOTF */  |
| 596 | KHR_DF_TRANSFER_HLG_EOTF = 9U,  |
| 597 | /** ITU BT.2100 PQ EOTF */  |
| 598 | KHR_DF_TRANSFER_PQ_EOTF = 10U,  |
| 599 | /** ITU BT.2100 PQ OETF */  |
| 600 | KHR_DF_TRANSFER_PQ_OETF = 11U,  |
| 601 | /** DCI P3 transfer function */  |
| 602 | KHR_DF_TRANSFER_DCIP3 = 12U,  |
| 603 | /** Legacy PAL OETF */  |
| 604 | KHR_DF_TRANSFER_PAL_OETF = 13U,  |
| 605 | /** Legacy PAL 625-line EOTF */  |
| 606 | KHR_DF_TRANSFER_PAL625_EOTF = 14U,  |
| 607 | /** Legacy ST240 transfer function */  |
| 608 | KHR_DF_TRANSFER_ST240 = 15U,  |
| 609 | /** ACEScc transfer function */  |
| 610 | KHR_DF_TRANSFER_ACESCC = 16U,  |
| 611 | /** ACEScct transfer function */  |
| 612 | KHR_DF_TRANSFER_ACESCCT = 17U,  |
| 613 | /** Adobe RGB (1998) transfer function */  |
| 614 | KHR_DF_TRANSFER_ADOBERGB = 18U,  |
| 615 | KHR_DF_TRANSFER_MAX = 0xFFU  |
| 616 | } khr_df_transfer_e;  |
| 617 |   |
| 618 | typedef enum _khr_df_flags_e {  |
| 619 | KHR_DF_FLAG_ALPHA_STRAIGHT = 0U,  |
| 620 | KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1U  |
| 621 | } khr_df_flags_e;  |
| 622 |   |
| 623 | typedef enum _khr_df_sample_datatype_qualifiers_e {  |
| 624 | KHR_DF_SAMPLE_DATATYPE_LINEAR = 1U << 4U,  |
| 625 | KHR_DF_SAMPLE_DATATYPE_EXPONENT = 1U << 5U,  |
| 626 | KHR_DF_SAMPLE_DATATYPE_SIGNED = 1U << 6U,  |
| 627 | KHR_DF_SAMPLE_DATATYPE_FLOAT = 1U << 7U  |
| 628 | } khr_df_sample_datatype_qualifiers_e;  |
| 629 |   |
| 630 | #endif  |
| 631 | |