98 lines
3.6 KiB
C
98 lines
3.6 KiB
C
/* -*- tab-width: 4; -*- */
|
|
/* vi: set sw=2 ts=4 expandtab: */
|
|
|
|
/* Copyright 2019-2020 The Khronos Group Inc.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* @~English
|
|
* @brief Utilities for printing data format descriptors.
|
|
*/
|
|
|
|
/*
|
|
* Author: Andrew Garrard
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <KHR/khr_df.h>
|
|
#include "dfd.h"
|
|
|
|
/**
|
|
* @~English
|
|
* @brief Print a human-readable interpretation of a data format descriptor.
|
|
*
|
|
* @param DFD Pointer to a data format descriptor.
|
|
**/
|
|
void printDFD(uint32_t *DFD)
|
|
{
|
|
uint32_t *BDB = DFD+1;
|
|
int samples = (KHR_DFDVAL(BDB, DESCRIPTORBLOCKSIZE) - 4 * KHR_DF_WORD_SAMPLESTART) / (4 * KHR_DF_WORD_SAMPLEWORDS);
|
|
int sample;
|
|
int model = KHR_DFDVAL(BDB, MODEL);
|
|
printf("DFD total bytes: %d\n", DFD[0]);
|
|
printf("BDB descriptor type 0x%04x vendor id = 0x%05x\n",
|
|
KHR_DFDVAL(BDB, DESCRIPTORTYPE),
|
|
KHR_DFDVAL(BDB, VENDORID));
|
|
printf("Descriptor block size %d (%d samples) versionNumber = 0x%04x\n",
|
|
KHR_DFDVAL(BDB, DESCRIPTORBLOCKSIZE),
|
|
samples,
|
|
KHR_DFDVAL(BDB, VERSIONNUMBER));
|
|
printf("Flags 0x%02x Xfer %02d Primaries %02d Model %03d\n",
|
|
KHR_DFDVAL(BDB, FLAGS),
|
|
KHR_DFDVAL(BDB, TRANSFER),
|
|
KHR_DFDVAL(BDB, PRIMARIES),
|
|
model);
|
|
printf("Dimensions: %d,%d,%d,%d\n",
|
|
KHR_DFDVAL(BDB, TEXELBLOCKDIMENSION0) + 1,
|
|
KHR_DFDVAL(BDB, TEXELBLOCKDIMENSION1) + 1,
|
|
KHR_DFDVAL(BDB, TEXELBLOCKDIMENSION2) + 1,
|
|
KHR_DFDVAL(BDB, TEXELBLOCKDIMENSION3) + 1);
|
|
printf("Plane bytes: %d,%d,%d,%d,%d,%d,%d,%d\n",
|
|
KHR_DFDVAL(BDB, BYTESPLANE0),
|
|
KHR_DFDVAL(BDB, BYTESPLANE1),
|
|
KHR_DFDVAL(BDB, BYTESPLANE2),
|
|
KHR_DFDVAL(BDB, BYTESPLANE3),
|
|
KHR_DFDVAL(BDB, BYTESPLANE4),
|
|
KHR_DFDVAL(BDB, BYTESPLANE5),
|
|
KHR_DFDVAL(BDB, BYTESPLANE6),
|
|
KHR_DFDVAL(BDB, BYTESPLANE7));
|
|
for (sample = 0; sample < samples; ++sample) {
|
|
int channelId = KHR_DFDSVAL(BDB, sample, CHANNELID);
|
|
printf(" Sample %d\n", sample);
|
|
printf("Qualifiers %x", KHR_DFDSVAL(BDB, sample, QUALIFIERS) >> 4);
|
|
printf(" Channel 0x%x", channelId);
|
|
if (model == KHR_DF_MODEL_UASTC) {
|
|
printf(" (%s)",
|
|
channelId == KHR_DF_CHANNEL_UASTC_RRRG ? "RRRG"
|
|
: channelId == KHR_DF_CHANNEL_UASTC_RGBA ? "RGBA"
|
|
: channelId == KHR_DF_CHANNEL_UASTC_RRR ? "RRR"
|
|
: channelId == KHR_DF_CHANNEL_UASTC_RGB ? "RGB"
|
|
: channelId == KHR_DF_CHANNEL_UASTC_RG ? "RG"
|
|
: "unknown");
|
|
} else if (model == KHR_DF_MODEL_ETC1S) {
|
|
printf(" (%s)",
|
|
channelId == KHR_DF_CHANNEL_ETC1S_AAA ? "AAA"
|
|
: channelId == KHR_DF_CHANNEL_ETC1S_GGG ? "GGG"
|
|
: channelId == KHR_DF_CHANNEL_ETC1S_RRR ? "RRR"
|
|
: channelId == KHR_DF_CHANNEL_ETC1S_RGB ? "RGB"
|
|
: "unknown");
|
|
} else {
|
|
printf(" (%c)",
|
|
"RGB3456789abcdeA"[channelId]);
|
|
}
|
|
printf(" Length %d bits Offset %d\n",
|
|
KHR_DFDSVAL(BDB, sample, BITLENGTH) + 1,
|
|
KHR_DFDSVAL(BDB, sample, BITOFFSET));
|
|
printf("Position: %d,%d,%d,%d\n",
|
|
KHR_DFDSVAL(BDB, sample, SAMPLEPOSITION0),
|
|
KHR_DFDSVAL(BDB, sample, SAMPLEPOSITION1),
|
|
KHR_DFDSVAL(BDB, sample, SAMPLEPOSITION2),
|
|
KHR_DFDSVAL(BDB, sample, SAMPLEPOSITION3));
|
|
printf("Lower 0x%08x\nUpper 0x%08x\n",
|
|
KHR_DFDSVAL(BDB, sample, SAMPLELOWER),
|
|
KHR_DFDSVAL(BDB, sample, SAMPLEUPPER));
|
|
}
|
|
}
|