#include <stdint.h>
#include <stdio.h>
#include <KHR/khr_df.h>
#include "dfd.h"
uint32_t dfd1[] = {
4U + 4U * (KHR_DF_WORD_SAMPLESTART + (4U * KHR_DF_WORD_SAMPLEWORDS)),
((KHR_DF_VENDORID_KHRONOS << KHR_DF_SHIFT_VENDORID) |
(KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT << KHR_DF_SHIFT_DESCRIPTORTYPE)),
((KHR_DF_VERSIONNUMBER_LATEST << KHR_DF_SHIFT_VERSIONNUMBER) |
((4U * (KHR_DF_WORD_SAMPLESTART + (4U * KHR_DF_WORD_SAMPLEWORDS)))
<< KHR_DF_SHIFT_DESCRIPTORBLOCKSIZE)),
((KHR_DF_MODEL_RGBSDA << KHR_DF_SHIFT_MODEL) |
(KHR_DF_PRIMARIES_BT709 << KHR_DF_SHIFT_PRIMARIES) |
(KHR_DF_TRANSFER_SRGB << KHR_DF_SHIFT_TRANSFER) |
(KHR_DF_FLAG_ALPHA_PREMULTIPLIED << KHR_DF_SHIFT_FLAGS)),
0U,
4U,
0U,
((0U << KHR_DF_SAMPLESHIFT_BITOFFSET) |
(7U << KHR_DF_SAMPLESHIFT_BITLENGTH) |
(KHR_DF_CHANNEL_RGBSDA_RED << KHR_DF_SAMPLESHIFT_CHANNELID)),
0U,
0U,
255U,
((8U << KHR_DF_SAMPLESHIFT_BITOFFSET) |
(7U << KHR_DF_SAMPLESHIFT_BITLENGTH) |
(KHR_DF_CHANNEL_RGBSDA_GREEN << KHR_DF_SAMPLESHIFT_CHANNELID)),
0U,
0U,
255U,
((16U << KHR_DF_SAMPLESHIFT_BITOFFSET) |
(7U << KHR_DF_SAMPLESHIFT_BITLENGTH) |
(KHR_DF_CHANNEL_RGBSDA_BLUE << KHR_DF_SAMPLESHIFT_CHANNELID)),
0U,
0U,
255U,
((24U << KHR_DF_SAMPLESHIFT_BITOFFSET) |
(7U << KHR_DF_SAMPLESHIFT_BITLENGTH) |
((KHR_DF_CHANNEL_RGBSDA_ALPHA | KHR_DF_SAMPLE_DATATYPE_LINEAR) << KHR_DF_SAMPLESHIFT_CHANNELID))
};
uint32_t dfd2[] = {
92U,
0U,
2U | (88U << 16U),
KHR_DF_MODEL_RGBSDA | (KHR_DF_PRIMARIES_BT709 << 8) | (KHR_DF_TRANSFER_SRGB << 16) | (KHR_DF_FLAG_ALPHA_PREMULTIPLIED << 24),
0U,
8U,
0U,
0U | (15U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
0xFFFFU,
16U | (15U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
0xFFFFU,
32U | (15U << 16) | (KHR_DF_CHANNEL_RGBSDA_BLUE << 24),
0U,
0U,
0xFFFFU,
48U | (15U << 16) | ((KHR_DF_CHANNEL_RGBSDA_ALPHA | KHR_DF_SAMPLE_DATATYPE_LINEAR) << 24),
0U,
0U,
0xFFFFU
};
uint32_t dfd3[] = {
92U,
0U,
2U | (88U << 16U),
KHR_DF_MODEL_RGBSDA | (KHR_DF_PRIMARIES_BT709 << 8) | (KHR_DF_TRANSFER_SRGB << 16) | (KHR_DF_FLAG_ALPHA_PREMULTIPLIED << 24),
0U,
8U,
0U,
8U | (7U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
255U,
0U | (7U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
255U,
24U | (7U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
255U,
16U | (7U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
255U
};
uint32_t dfd4[] = {
92U,
0U,
2U | (88U << 16U),
KHR_DF_MODEL_RGBSDA | (KHR_DF_PRIMARIES_BT709 << 8) | (KHR_DF_TRANSFER_LINEAR << 16) | (KHR_DF_FLAG_ALPHA_PREMULTIPLIED << 24),
0U,
2U,
0U,
0U | (3U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
7U,
4U | (3U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
7U,
8U | (3U << 16) | (KHR_DF_CHANNEL_RGBSDA_BLUE << 24),
0U,
0U,
7U,
12U | (3U << 16) | (KHR_DF_CHANNEL_RGBSDA_ALPHA << 24),
0U,
0U,
7U
};
uint32_t dfd5[] = {
92U,
0U,
1U | (88U << 16U),
KHR_DF_MODEL_RGBSDA | (KHR_DF_PRIMARIES_BT709 << 8) | (KHR_DF_TRANSFER_SRGB << 16) | (KHR_DF_FLAG_ALPHA_PREMULTIPLIED << 24),
0U,
2U,
0U,
13U | (2U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
7U,
0U | (2U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
7U,
3U | (4U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
31U,
8U | (4U << 16) | (KHR_DF_CHANNEL_RGBSDA_BLUE << 24),
0U,
0U,
31U
};
uint32_t dfd6[] = {
92U,
0U,
2U | (88U << 16U),
KHR_DF_MODEL_RGBSDA | (KHR_DF_PRIMARIES_BT709 << 8) | (KHR_DF_TRANSFER_SRGB << 16) | (KHR_DF_FLAG_ALPHA_PREMULTIPLIED << 24),
0U,
16U,
0U,
0U | (31U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
0xFFFFFFFFU,
32U | (31U << 16) | (KHR_DF_CHANNEL_RGBSDA_RED << 24),
0U,
0U,
0xFFFFFFFFU,
64U | (31U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
0xFFFFFFFFU,
96U | (31U << 16) | (KHR_DF_CHANNEL_RGBSDA_GREEN << 24),
0U,
0U,
0xFFFFFFFFU
};
int main()
{
const char *errorText[] = {
"UNSUPPORTED_NONTRIVIAL_ENDIANNESS",
"UNSUPPORTED_MULTIPLE_SAMPLE_LOCATIONS",
"UNSUPPORTED_MULTIPLE_PLANES",
"UNSUPPORTED_CHANNEL_TYPES",
"UNSUPPORTED_MIXED_CHANNELS"};
InterpretedDFDChannel R = {0,0}, G = {0,0}, B = {0,0}, A = {0,0};
uint32_t wordSize;
enum InterpretDFDResult t;
#if 0#else
#if 0#endif
printDFD(d);
t = interpretDFD(d, &R, &G, &B, &A, &wordSize);
#endif
if (t & i_UNSUPPORTED_ERROR_BIT) {
printf("%s\n", errorText[t - i_UNSUPPORTED_ERROR_BIT]);
return 0;
} else {
if (t & i_BIG_ENDIAN_FORMAT_BIT) {
printf("Big-endian\n");
} else {
printf("Little-endian\n");
}
if (t & i_PACKED_FORMAT_BIT) {
printf("Packed\n");
if (R.size > 0) {
printf("%u red bit%s starting at %u\n", R.size, R.size>1?"s":"", R.offset);
}
if (G.size > 0) {
printf("%u green bit%s starting at %u\n", G.size, G.size>1?"s":"", G.offset);
}
if (B.size > 0) {
printf("%u blue bit%s starting at %u\n", B.size, B.size>1?"s":"", B.offset);
}
if (A.size > 0) {
printf("%u alpha bit%s starting at %u\n", A.size, A.size>1?"s":"", A.offset);
}
printf("Total word size %u\n", wordSize);
} else {
printf("Not packed\n");
if (R.size > 0) {
printf("%u red byte%s starting at %u\n", R.size, R.size>1?"s":"", R.offset);
}
if (G.size > 0) {
printf("%u green byte%s starting at %u\n", G.size, G.size>1?"s":"", G.offset);
}
if (B.size > 0) {
printf("%u blue byte%s starting at %u\n", B.size, B.size>1?"s":"", B.offset);
}
if (A.size > 0) {
printf("%u alpha byte%s starting at %u\n", A.size, A.size>1?"s":"", A.offset);
}
}
if (t & i_SRGB_FORMAT_BIT) {
printf("sRGB\n");
}
if (t & i_NORMALIZED_FORMAT_BIT) {
printf("Normalized\n");
}
if (t & i_SIGNED_FORMAT_BIT) {
printf("Signed\n");
}
if (t & i_FLOAT_FORMAT_BIT) {
printf("Float\n");
}
}
return 0;
}