146 lines
5.9 KiB
C
146 lines
5.9 KiB
C
/*
|
|
* Copyright (c) 2023, Shukant Pal and Contributors
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <ktx.h>
|
|
#include "ktx_texture2.h"
|
|
#include <stddef.h>
|
|
|
|
ktxTextureMixed PY_ktxTexture2_Create(ktx_uint32_t glInternalformat,
|
|
ktx_uint32_t vkFormat,
|
|
ktx_uint32_t *pDfd,
|
|
ktx_uint32_t baseWidth,
|
|
ktx_uint32_t baseHeight,
|
|
ktx_uint32_t baseDepth,
|
|
ktx_uint32_t numDimensions,
|
|
ktx_uint32_t numLevels,
|
|
ktx_uint32_t numLayers,
|
|
ktx_uint32_t numFaces,
|
|
ktx_bool_t isArray,
|
|
ktx_bool_t generateMipmaps,
|
|
ktxTextureCreateStorageEnum storageAllocation)
|
|
{
|
|
ktxTextureCreateInfo createInfo = {
|
|
glInternalformat,
|
|
vkFormat,
|
|
pDfd,
|
|
baseWidth,
|
|
baseHeight,
|
|
baseDepth,
|
|
numDimensions,
|
|
numLevels,
|
|
numLayers,
|
|
numFaces,
|
|
isArray,
|
|
generateMipmaps
|
|
};
|
|
|
|
ktxTexture2* newTex = NULL;
|
|
KTX_error_code err = ktxTexture2_Create(&createInfo,
|
|
storageAllocation,
|
|
&newTex);
|
|
|
|
return (ktxTextureMixed) {
|
|
err,
|
|
(ktxTexture*) newTex
|
|
};
|
|
}
|
|
|
|
KTX_error_code PY_ktxTexture2_CompressAstcEx(ktxTexture2 *texture,
|
|
ktx_bool_t verbose,
|
|
ktx_uint32_t threadCount,
|
|
ktx_uint32_t blockDimension,
|
|
ktx_uint32_t mode,
|
|
ktx_uint32_t qualityLevel,
|
|
ktx_bool_t normalMap,
|
|
ktx_bool_t perceptual,
|
|
char *inputSwizzle)
|
|
{
|
|
ktxAstcParams params = {
|
|
.structSize = sizeof(ktxAstcParams),
|
|
.verbose = verbose,
|
|
.threadCount = threadCount,
|
|
.blockDimension = blockDimension,
|
|
.mode = mode,
|
|
.qualityLevel = qualityLevel,
|
|
.normalMap = normalMap,
|
|
.perceptual = perceptual,
|
|
};
|
|
|
|
params.inputSwizzle[0] = inputSwizzle[0];
|
|
params.inputSwizzle[1] = inputSwizzle[1];
|
|
params.inputSwizzle[2] = inputSwizzle[2];
|
|
params.inputSwizzle[3] = inputSwizzle[3];
|
|
|
|
KTX_error_code err = ktxTexture2_CompressAstcEx(texture, ¶ms);
|
|
|
|
return err;
|
|
}
|
|
|
|
KTX_error_code PY_ktxTexture2_CompressBasisEx(ktxTexture2 *texture,
|
|
ktx_bool_t uastc,
|
|
ktx_bool_t verbose,
|
|
ktx_bool_t noSSE,
|
|
ktx_uint32_t threadCount,
|
|
ktx_uint32_t compressionLevel,
|
|
ktx_uint32_t qualityLevel,
|
|
ktx_uint32_t maxEndpoints,
|
|
float endpointRDOThreshold,
|
|
ktx_uint32_t maxSelectors,
|
|
float selectorRDOThreshold,
|
|
char *inputSwizzle,
|
|
ktx_bool_t normalMap,
|
|
ktx_bool_t separateRGToRGB_A,
|
|
ktx_bool_t preSwizzle,
|
|
ktx_bool_t noEndpointRDO,
|
|
ktx_bool_t noSelectorRDO,
|
|
int uastcFlags,
|
|
ktx_bool_t uastcRDO,
|
|
float uastcRDOQualityScalar,
|
|
ktx_uint32_t uastcRDODictSize,
|
|
float uastcRDOMaxSmoothBlockErrorScale,
|
|
float uastcRDOMaxSmoothBlockStdDev,
|
|
ktx_bool_t uastcRDODontFavorSimplerModes,
|
|
ktx_bool_t uastcRDONoMultithreading)
|
|
{
|
|
ktxBasisParams params = {
|
|
.structSize = sizeof(ktxBasisParams),
|
|
.uastc = uastc,
|
|
.verbose = verbose,
|
|
.noSSE = noSSE,
|
|
.threadCount = threadCount,
|
|
.compressionLevel = compressionLevel,
|
|
.qualityLevel = qualityLevel,
|
|
.maxEndpoints = maxEndpoints,
|
|
.endpointRDOThreshold = endpointRDOThreshold,
|
|
.maxSelectors = maxSelectors,
|
|
.selectorRDOThreshold = selectorRDOThreshold,
|
|
// inputSwizzle skipped here
|
|
.normalMap = normalMap,
|
|
.separateRGToRGB_A = separateRGToRGB_A,
|
|
.preSwizzle = preSwizzle,
|
|
.noEndpointRDO = noEndpointRDO,
|
|
.noSelectorRDO = noSelectorRDO,
|
|
.uastcFlags = uastcFlags,
|
|
.uastcRDO = uastcRDO,
|
|
.uastcRDOQualityScalar = uastcRDOQualityScalar,
|
|
.uastcRDOMaxSmoothBlockErrorScale = uastcRDOMaxSmoothBlockErrorScale,
|
|
.uastcRDOMaxSmoothBlockStdDev = uastcRDOMaxSmoothBlockStdDev,
|
|
.uastcRDODontFavorSimplerModes = uastcRDODontFavorSimplerModes,
|
|
.uastcRDONoMultithreading = uastcRDONoMultithreading
|
|
};
|
|
|
|
params.inputSwizzle[0] = inputSwizzle[0];
|
|
params.inputSwizzle[1] = inputSwizzle[1];
|
|
params.inputSwizzle[2] = inputSwizzle[2];
|
|
params.inputSwizzle[3] = inputSwizzle[3];
|
|
|
|
KTX_error_code err = ktxTexture2_CompressBasisEx(texture, ¶ms);
|
|
|
|
return err;
|
|
}
|
|
|
|
KTX2_IMPL(ktx_uint32_t, vkFormat)
|
|
KTX2_IMPL(ktx_uint32_t, supercompressionScheme)
|