diff options
Diffstat (limited to '3rdparty/bimg/src/image_encode.cpp')
-rw-r--r-- | 3rdparty/bimg/src/image_encode.cpp | 116 |
1 files changed, 15 insertions, 101 deletions
diff --git a/3rdparty/bimg/src/image_encode.cpp b/3rdparty/bimg/src/image_encode.cpp index e006940a3a8..47f5f68e016 100644 --- a/3rdparty/bimg/src/image_encode.cpp +++ b/3rdparty/bimg/src/image_encode.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2011-2022 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bimg/blob/master/LICENSE + * Copyright 2011-2021 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bimg#license-bsd-2-clause */ #include <bimg/encode.h> @@ -12,7 +12,7 @@ #include <nvtt/nvtt.h> #include <pvrtc/PvrTcEncoder.h> #include <edtaa3/edtaa3func.h> -#include <astcenc.h> +#include <astc/astc_lib.h> BX_PRAGMA_DIAGNOSTIC_PUSH(); BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4100) // warning C4100: 'alloc_context': unreferenced formal parameter @@ -41,18 +41,18 @@ namespace bimg }; BX_STATIC_ASSERT(Quality::Count == BX_COUNTOF(s_squishQuality) ); - static const float s_astcQuality[] = + static const ASTC_COMPRESS_MODE s_astcQuality[] = { // Standard - ASTCENC_PRE_MEDIUM, // Default - ASTCENC_PRE_THOROUGH, // Highest - ASTCENC_PRE_FAST, // Fastest + ASTC_COMPRESS_MEDIUM, // Default + ASTC_COMPRESS_THOROUGH, // Highest + ASTC_COMPRESS_FAST, // Fastest // Normal map - ASTCENC_PRE_MEDIUM, // Default - ASTCENC_PRE_THOROUGH, // Highest - ASTCENC_PRE_FAST, // Fastest + ASTC_COMPRESS_MEDIUM, // Default + ASTC_COMPRESS_THOROUGH, // Highest + ASTC_COMPRESS_FAST, // Fastest }; - BX_STATIC_ASSERT(Quality::Count == BX_COUNTOF(s_astcQuality) ); + BX_STATIC_ASSERT(Quality::Count == BX_COUNTOF(s_astcQuality)); void imageEncodeFromRgba8(bx::AllocatorI* _allocator, void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint32_t _depth, TextureFormat::Enum _format, Quality::Enum _quality, bx::Error* _err) { @@ -142,103 +142,25 @@ namespace bimg break; case TextureFormat::ASTC4x4: - case TextureFormat::ASTC5x4: case TextureFormat::ASTC5x5: - case TextureFormat::ASTC6x5: case TextureFormat::ASTC6x6: case TextureFormat::ASTC8x5: case TextureFormat::ASTC8x6: - case TextureFormat::ASTC8x8: case TextureFormat::ASTC10x5: - case TextureFormat::ASTC10x6: - case TextureFormat::ASTC10x8: - case TextureFormat::ASTC10x10: - case TextureFormat::ASTC12x10: - case TextureFormat::ASTC12x12: { const bimg::ImageBlockInfo& astcBlockInfo = bimg::getBlockInfo(_format); - astcenc_config config{}; - - uint32_t astcFlags = ASTCENC_FLG_SELF_DECOMPRESS_ONLY; - - if (Quality::NormalMapDefault <= _quality) - { - astcFlags |= ASTCENC_FLG_MAP_NORMAL; - } - - astcenc_error status = astcenc_config_init( - ASTCENC_PRF_LDR - , astcBlockInfo.blockWidth - , astcBlockInfo.blockHeight - , 1 - , s_astcQuality[_quality] - , astcFlags - , &config - ); - - if (status != ASTCENC_SUCCESS) - { - BX_TRACE("astc error in config init %s", astcenc_get_error_string(status) ); - BX_ERROR_SET(_err, BIMG_ERROR, "Unable to initialize astc config!"); - break; - } - - astcenc_context* context; - status = astcenc_context_alloc(&config, 1, &context); - - if (status != ASTCENC_SUCCESS) - { - BX_TRACE("astc error in context alloc %s", astcenc_get_error_string(status) ); - BX_ERROR_SET(_err, BIMG_ERROR, "Unable to alloc astc context!"); - break; - } - - astcenc_image image{}; - image.dim_x = _width; - image.dim_y = _height; - image.dim_z = 1; - image.data_type = ASTCENC_TYPE_U8; - image.data = (void**)&src; - - const size_t blockCountX = (_width + astcBlockInfo.blockWidth - 1) / astcBlockInfo.blockWidth; - const size_t blockCountY = (_height + astcBlockInfo.blockHeight - 1) / astcBlockInfo.blockHeight; - const size_t compLen = blockCountX * blockCountY * 16; + ASTC_COMPRESS_MODE compress_mode = s_astcQuality[_quality]; + ASTC_DECODE_MODE decode_mode = ASTC_DECODE_LDR_LINEAR; if (Quality::NormalMapDefault <= _quality) { - static const astcenc_swizzle swizzle - { //0001/rrrg swizzle corresponds to ASTC_ENC_NORMAL_RA - ASTCENC_SWZ_R, - ASTCENC_SWZ_R, - ASTCENC_SWZ_R, - ASTCENC_SWZ_G, - }; - - status = astcenc_compress_image(context, &image, &swizzle, dst, compLen, 0); + astc_compress(_width, _height, src, ASTC_ENC_NORMAL_RA, srcPitch, astcBlockInfo.blockWidth, astcBlockInfo.blockHeight, compress_mode, decode_mode, dst); } else { - static const astcenc_swizzle swizzle - { //0123/rgba swizzle corresponds to ASTC_RGBA - ASTCENC_SWZ_R, - ASTCENC_SWZ_G, - ASTCENC_SWZ_B, - ASTCENC_SWZ_A, - }; - - status = astcenc_compress_image(context, &image, &swizzle, dst, compLen, 0); + astc_compress(_width, _height, src, ASTC_RGBA, srcPitch, astcBlockInfo.blockWidth, astcBlockInfo.blockHeight, compress_mode, decode_mode, dst); } - - if (status != ASTCENC_SUCCESS) - { - BX_TRACE("astc error in compress image %s", astcenc_get_error_string(status) ); - BX_ERROR_SET(_err, BIMG_ERROR, "Unable to compress astc image!"); - astcenc_context_free(context); - break; - } - - astcenc_context_free(context); } break; @@ -330,19 +252,11 @@ namespace bimg case TextureFormat::PTC14: case TextureFormat::PTC14A: case TextureFormat::ASTC4x4: - case TextureFormat::ASTC5x4: case TextureFormat::ASTC5x5: - case TextureFormat::ASTC6x5: case TextureFormat::ASTC6x6: case TextureFormat::ASTC8x5: case TextureFormat::ASTC8x6: - case TextureFormat::ASTC8x8: case TextureFormat::ASTC10x5: - case TextureFormat::ASTC10x6: - case TextureFormat::ASTC10x8: - case TextureFormat::ASTC10x10: - case TextureFormat::ASTC12x10: - case TextureFormat::ASTC12x12: { uint8_t* temp = (uint8_t*)BX_ALLOC(_allocator, _width*_height*_depth*4); imageDecodeToRgba8(_allocator, temp, _src, _width, _height, _width*4, _srcFormat); |