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 */ 
26typedef 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 
51typedef 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 
74typedef 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 */ 
112typedef 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 
126typedef 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 
141typedef 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 */ 
193typedef 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 */ 
200typedef 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 */ 
215typedef 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. */ 
229typedef 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 */ 
323typedef 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. */ 
538typedef 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. */ 
574typedef 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 
618typedef 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 
623typedef 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