MCPcopy Create free account
hub / github.com/KhronosGroup/KTX-Software / ktxTexture2_CompressAstcEx

Function ktxTexture2_CompressAstcEx

lib/astc_codec.cpp:929–1167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

927 * not happen in release package.
928 */
929extern "C" KTX_error_code
930ktxTexture2_CompressAstcEx(ktxTexture2* This, ktxAstcParams* params) {
931 assert(This->classId == ktxTexture2_c && "Only support ktx2 ASTC.");
932
933 ktx_error_code_e result;
934 ktx_pack_astc_encoder_mode_e mode;
935
936 if (!params)
937 return KTX_INVALID_VALUE;
938
939 if (params->structSize != sizeof(struct ktxAstcParams))
940 return KTX_INVALID_VALUE;
941
942 if (This->generateMipmaps)
943 return KTX_INVALID_OPERATION;
944
945 if (This->supercompressionScheme != KTX_SS_NONE)
946 return KTX_INVALID_OPERATION; // Can't apply multiple schemes.
947
948 if (This->isCompressed)
949 return KTX_INVALID_OPERATION; // Only non-block compressed formats
950 // can be encoded into an ASTC format.
951
952 if (This->_protected->_formatSize.flags & KTX_FORMAT_SIZE_PACKED_BIT)
953 return KTX_INVALID_OPERATION;
954
955 // Basic descriptor block begins after the total size field.
956 const uint32_t* BDB = This->pDfd+1;
957
958 uint32_t num_components, component_size;
959 getDFDComponentInfoUnpacked(This->pDfd, &num_components, &component_size);
960 ktx_uint32_t transfer = KHR_DFDVAL(BDB, TRANSFER);
961 bool sRGB = transfer == KHR_DF_TRANSFER_SRGB;
962
963 if (component_size != 1)
964 return KTX_UNSUPPORTED_FEATURE; // Can only deal with 8-bit components at the moment
965 if (params->mode == KTX_PACK_ASTC_ENCODER_MODE_DEFAULT) {
966 if (component_size == 1 || sRGB)
967 mode = KTX_PACK_ASTC_ENCODER_MODE_LDR;
968 else
969 mode = KTX_PACK_ASTC_ENCODER_MODE_HDR;
970 } else {
971 mode = static_cast<ktx_pack_astc_encoder_mode_e>(params->mode);
972 }
973
974 if (mode == KTX_PACK_ASTC_ENCODER_MODE_HDR && sRGB)
975 return KTX_INVALID_OPERATION;
976
977 if (!(sRGB || transfer == KHR_DF_TRANSFER_LINEAR))
978 return KTX_INVALID_OPERATION;
979
980 if (This->pData == NULL) {
981 result = ktxTexture2_LoadImageData((ktxTexture2*)This, nullptr, 0);
982
983 if (result != KTX_SUCCESS)
984 return result;
985 }
986

Callers 8

executeEncodeMethod · 0.85
encodeASTCMethod · 0.85
encodeMethod · 0.85
compressAstcMethod · 0.85
ktxTexture2_CompressAstcFunction · 0.85
runTestMethod · 0.85

Calls 15

assertFunction · 0.85
astcVkFormatFunction · 0.85
ktxTexture2_CreateFunction · 0.85
astcBlockDimensionsFunction · 0.85
astcQualityFunction · 0.85
astcProfileFunction · 0.85
astcSwizzleFunction · 0.85
astcenc_config_initFunction · 0.85
mapAstcErrorFunction · 0.85
astcenc_context_allocFunction · 0.85

Tested by 1

runTestMethod · 0.68