/* -*- 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 creating data format descriptors. */ /* * Author: Andrew Garrard */ #include <assert.h> #include <stdlib.h> #include <string.h> #include <KHR/khr_df.h> #include "dfd.h" channels_infotype; static uint32_t *writeHeader(int numSamples, int bytes, int suffix, channels_infotype infotype) { … } static uint32_t setChannelFlags(uint32_t channel, enum VkSuffix suffix) { … } static void writeSample(uint32_t *DFD, int sampleNo, int channel, int bits, int offset, int topSample, int bottomSample, enum VkSuffix suffix) { … } /** * @~English * @brief Create a Data Format Descriptor for an unpacked format. * * @param bigEndian Set to 1 for big-endian byte ordering and 0 for little-endian byte ordering. * @param numChannels The number of color channels. * @param bytes The number of bytes per channel. * @param redBlueSwap Normally channels appear in consecutive R, G, B, A order * in memory; redBlueSwap inverts red and blue, allowing * B, G, R, A. * @param suffix Indicates the format suffix for the type. * * @return A data format descriptor in malloc'd data. The caller is responsible * for freeing the descriptor. **/ uint32_t *createDFDUnpacked(int bigEndian, int numChannels, int bytes, int redBlueSwap, enum VkSuffix suffix) { … } /** * @~English * @brief Create a Data Format Descriptor for a packed format. * * @param bigEndian Big-endian flag: Set to 1 for big-endian byte ordering and * 0 for little-endian byte ordering. * @param numChannels The number of color channels. * @param bits[] An array of length numChannels. * Each entry is the number of bits composing the channel, in * order starting at bit 0 of the packed type. * @param shiftBits[] An array of length numChannels. * Each entry is the number of bits each channel is shifted * and thus padded with insignificant bits. * @param channels[] An array of length numChannels. * Each entry enumerates the channel type: 0 = red, 1 = green, * 2 = blue, 15 = alpha, in order starting at bit 0 of the * packed type. These values match channel IDs for RGBSDA in * the Khronos Data Format header. To simplify iteration * through channels, channel id 3 is a synonym for alpha. * @param suffix Indicates the format suffix for the type. * * @return A data format descriptor in malloc'd data. The caller is responsible * for freeing the descriptor. **/ uint32_t *createDFDPackedShifted(int bigEndian, int numChannels, int bits[], int shiftBits[], int channels[], enum VkSuffix suffix) { … } /** * @~English * @brief Create a Data Format Descriptor for a packed format. * * @param bigEndian Big-endian flag: Set to 1 for big-endian byte ordering and * 0 for little-endian byte ordering. * @param numChannels The number of color channels. * @param bits[] An array of length numChannels. * Each entry is the number of bits composing the channel, in * order starting at bit 0 of the packed type. * @param channels[] An array of length numChannels. * Each entry enumerates the channel type: 0 = red, 1 = green, * 2 = blue, 15 = alpha, in order starting at bit 0 of the * packed type. These values match channel IDs for RGBSDA in * the Khronos Data Format header. To simplify iteration * through channels, channel id 3 is a synonym for alpha. * @param suffix Indicates the format suffix for the type. * * @return A data format descriptor in malloc'd data. The caller is responsible * for freeing the descriptor. **/ uint32_t *createDFDPacked(int bigEndian, int numChannels, int bits[], int channels[], enum VkSuffix suffix) { … } uint32_t *createDFD422(int bigEndian, int numSamples, int bits[], int shiftBits[], int channels[], int position_xs[], int position_ys[], enum VkSuffix suffix) { … } static khr_df_model_e compModelMapping[] = …; static uint32_t compSampleCount[] = …; static khr_df_model_channels_e compFirstChannel[] = …; static khr_df_model_channels_e compSecondChannel[] = …; static uint32_t compSecondChannelOffset[] = …; static uint32_t compChannelBits[] = …; static uint32_t compBytes[] = …; /** * @~English * @brief Create a Data Format Descriptor for a compressed format. * * @param compScheme Vulkan-style compression scheme enumeration. * @param bwidth Block width in texel coordinates. * @param bheight Block height in texel coordinates. * @param bdepth Block depth in texel coordinates. * @author Mark Callow, Edgewise Consulting. * @param suffix Indicates the format suffix for the type. * * @return A data format descriptor in malloc'd data. The caller is responsible * for freeing the descriptor. **/ uint32_t *createDFDCompressed(enum VkCompScheme compScheme, int bwidth, int bheight, int bdepth, enum VkSuffix suffix) { … } /** * @~English * @brief Create a Data Format Descriptor for a depth-stencil format. * * @param depthBits The numeber of bits in the depth channel. * @param stencilBits The numeber of bits in the stencil channel. * @param sizeBytes The total byte size of the texel. * * @return A data format descriptor in malloc'd data. The caller is responsible * for freeing the descriptor. **/ uint32_t *createDFDDepthStencil(int depthBits, int stencilBits, int sizeBytes) { … } /** * @~English * @brief Create a Data Format Descriptor for an alpha-only format. * * @param bigEndian Set to 1 for big-endian byte ordering and 0 for little-endian byte ordering. * @param bytes The number of bytes per channel. * @param suffix Indicates the format suffix for the type. * * @return A data format descriptor in malloc'd data. The caller is responsible * for freeing the descriptor. **/ uint32_t *createDFDAlpha(int bigEndian, int bytes, enum VkSuffix suffix) { … }