1*35238bceSAndroid Build Coastguard Worker #ifndef _TCUCOMPRESSEDTEXTURE_HPP 2*35238bceSAndroid Build Coastguard Worker #define _TCUCOMPRESSEDTEXTURE_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program Tester Core 5*35238bceSAndroid Build Coastguard Worker * ---------------------------------------- 6*35238bceSAndroid Build Coastguard Worker * 7*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker * 9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker * 13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker * 15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker * limitations under the License. 20*35238bceSAndroid Build Coastguard Worker * 21*35238bceSAndroid Build Coastguard Worker *//*! 22*35238bceSAndroid Build Coastguard Worker * \file 23*35238bceSAndroid Build Coastguard Worker * \brief Compressed Texture Utilities. 24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp" 28*35238bceSAndroid Build Coastguard Worker 29*35238bceSAndroid Build Coastguard Worker #include <vector> 30*35238bceSAndroid Build Coastguard Worker 31*35238bceSAndroid Build Coastguard Worker namespace tcu 32*35238bceSAndroid Build Coastguard Worker { 33*35238bceSAndroid Build Coastguard Worker 34*35238bceSAndroid Build Coastguard Worker enum CompressedTexFormat 35*35238bceSAndroid Build Coastguard Worker { 36*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC1_RGB8 = 0, 37*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_EAC_R11, 38*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_EAC_SIGNED_R11, 39*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_EAC_RG11, 40*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_EAC_SIGNED_RG11, 41*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC2_RGB8, 42*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC2_SRGB8, 43*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1, 44*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1, 45*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC2_EAC_RGBA8, 46*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ETC2_EAC_SRGB8_ALPHA8, 47*35238bceSAndroid Build Coastguard Worker 48*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA, 49*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA, 50*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA, 51*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA, 52*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA, 53*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA, 54*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA, 55*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA, 56*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x5_RGBA, 57*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x6_RGBA, 58*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x8_RGBA, 59*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x10_RGBA, 60*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_12x10_RGBA, 61*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_12x12_RGBA, 62*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8, 63*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8, 64*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8, 65*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_6x5_SRGB8_ALPHA8, 66*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8, 67*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8, 68*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8, 69*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_8x8_SRGB8_ALPHA8, 70*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x5_SRGB8_ALPHA8, 71*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x6_SRGB8_ALPHA8, 72*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x8_SRGB8_ALPHA8, 73*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_10x10_SRGB8_ALPHA8, 74*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_12x10_SRGB8_ALPHA8, 75*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_ASTC_12x12_SRGB8_ALPHA8, 76*35238bceSAndroid Build Coastguard Worker 77*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC1_RGB_UNORM_BLOCK, 78*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC1_RGB_SRGB_BLOCK, 79*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC1_RGBA_UNORM_BLOCK, 80*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC1_RGBA_SRGB_BLOCK, 81*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC2_UNORM_BLOCK, 82*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC2_SRGB_BLOCK, 83*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC3_UNORM_BLOCK, 84*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC3_SRGB_BLOCK, 85*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC4_UNORM_BLOCK, 86*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC4_SNORM_BLOCK, 87*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC5_UNORM_BLOCK, 88*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC5_SNORM_BLOCK, 89*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC6H_UFLOAT_BLOCK, 90*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC6H_SFLOAT_BLOCK, 91*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC7_UNORM_BLOCK, 92*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_BC7_SRGB_BLOCK, 93*35238bceSAndroid Build Coastguard Worker 94*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_AHB_RAW10, 95*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_AHB_RAW12, 96*35238bceSAndroid Build Coastguard Worker 97*35238bceSAndroid Build Coastguard Worker COMPRESSEDTEXFORMAT_LAST 98*35238bceSAndroid Build Coastguard Worker }; 99*35238bceSAndroid Build Coastguard Worker 100*35238bceSAndroid Build Coastguard Worker int getBlockSize(CompressedTexFormat format); 101*35238bceSAndroid Build Coastguard Worker IVec3 getBlockPixelSize(CompressedTexFormat format); 102*35238bceSAndroid Build Coastguard Worker 103*35238bceSAndroid Build Coastguard Worker bool isEtcFormat(CompressedTexFormat format); 104*35238bceSAndroid Build Coastguard Worker bool isAstcFormat(CompressedTexFormat format); 105*35238bceSAndroid Build Coastguard Worker bool isAstcSRGBFormat(CompressedTexFormat format); 106*35238bceSAndroid Build Coastguard Worker bool isBcFormat(CompressedTexFormat format); 107*35238bceSAndroid Build Coastguard Worker bool isBcBitExactFormat(CompressedTexFormat format); 108*35238bceSAndroid Build Coastguard Worker bool isBcSRGBFormat(CompressedTexFormat format); 109*35238bceSAndroid Build Coastguard Worker bool isAhbRawFormat(CompressedTexFormat format); 110*35238bceSAndroid Build Coastguard Worker 111*35238bceSAndroid Build Coastguard Worker TextureFormat getUncompressedFormat(CompressedTexFormat format); 112*35238bceSAndroid Build Coastguard Worker CompressedTexFormat getAstcFormatByBlockSize(const IVec3 &size, bool isSRGB); 113*35238bceSAndroid Build Coastguard Worker 114*35238bceSAndroid Build Coastguard Worker struct TexDecompressionParams 115*35238bceSAndroid Build Coastguard Worker { 116*35238bceSAndroid Build Coastguard Worker enum AstcMode 117*35238bceSAndroid Build Coastguard Worker { 118*35238bceSAndroid Build Coastguard Worker ASTCMODE_LDR = 0, 119*35238bceSAndroid Build Coastguard Worker ASTCMODE_HDR, 120*35238bceSAndroid Build Coastguard Worker ASTCMODE_LAST 121*35238bceSAndroid Build Coastguard Worker }; 122*35238bceSAndroid Build Coastguard Worker TexDecompressionParamstcu::TexDecompressionParams123*35238bceSAndroid Build Coastguard Worker TexDecompressionParams(AstcMode astcMode_ = ASTCMODE_LAST) : astcMode(astcMode_) 124*35238bceSAndroid Build Coastguard Worker { 125*35238bceSAndroid Build Coastguard Worker } 126*35238bceSAndroid Build Coastguard Worker 127*35238bceSAndroid Build Coastguard Worker AstcMode astcMode; 128*35238bceSAndroid Build Coastguard Worker }; 129*35238bceSAndroid Build Coastguard Worker 130*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*! 131*35238bceSAndroid Build Coastguard Worker * \brief Compressed texture 132*35238bceSAndroid Build Coastguard Worker * 133*35238bceSAndroid Build Coastguard Worker * This class implements container for common compressed texture formats. 134*35238bceSAndroid Build Coastguard Worker * Reference decoding to uncompressed formats is supported. 135*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 136*35238bceSAndroid Build Coastguard Worker class CompressedTexture 137*35238bceSAndroid Build Coastguard Worker { 138*35238bceSAndroid Build Coastguard Worker public: 139*35238bceSAndroid Build Coastguard Worker CompressedTexture(CompressedTexFormat format, int width, int height, int depth = 1); 140*35238bceSAndroid Build Coastguard Worker CompressedTexture(void); 141*35238bceSAndroid Build Coastguard Worker ~CompressedTexture(void); 142*35238bceSAndroid Build Coastguard Worker 143*35238bceSAndroid Build Coastguard Worker void setStorage(CompressedTexFormat format, int width, int height, int depth = 1); 144*35238bceSAndroid Build Coastguard Worker getWidth(void) const145*35238bceSAndroid Build Coastguard Worker int getWidth(void) const 146*35238bceSAndroid Build Coastguard Worker { 147*35238bceSAndroid Build Coastguard Worker return m_width; 148*35238bceSAndroid Build Coastguard Worker } getHeight(void) const149*35238bceSAndroid Build Coastguard Worker int getHeight(void) const 150*35238bceSAndroid Build Coastguard Worker { 151*35238bceSAndroid Build Coastguard Worker return m_height; 152*35238bceSAndroid Build Coastguard Worker } getDepth(void) const153*35238bceSAndroid Build Coastguard Worker int getDepth(void) const 154*35238bceSAndroid Build Coastguard Worker { 155*35238bceSAndroid Build Coastguard Worker return m_depth; 156*35238bceSAndroid Build Coastguard Worker } getFormat(void) const157*35238bceSAndroid Build Coastguard Worker CompressedTexFormat getFormat(void) const 158*35238bceSAndroid Build Coastguard Worker { 159*35238bceSAndroid Build Coastguard Worker return m_format; 160*35238bceSAndroid Build Coastguard Worker } getDataSize(void) const161*35238bceSAndroid Build Coastguard Worker int getDataSize(void) const 162*35238bceSAndroid Build Coastguard Worker { 163*35238bceSAndroid Build Coastguard Worker return (int)m_data.size(); 164*35238bceSAndroid Build Coastguard Worker } getData(void) const165*35238bceSAndroid Build Coastguard Worker const void *getData(void) const 166*35238bceSAndroid Build Coastguard Worker { 167*35238bceSAndroid Build Coastguard Worker return &m_data[0]; 168*35238bceSAndroid Build Coastguard Worker } getData(void)169*35238bceSAndroid Build Coastguard Worker void *getData(void) 170*35238bceSAndroid Build Coastguard Worker { 171*35238bceSAndroid Build Coastguard Worker return &m_data[0]; 172*35238bceSAndroid Build Coastguard Worker } 173*35238bceSAndroid Build Coastguard Worker 174*35238bceSAndroid Build Coastguard Worker void decompress(const PixelBufferAccess &dst, 175*35238bceSAndroid Build Coastguard Worker const TexDecompressionParams ¶ms = TexDecompressionParams()) const; 176*35238bceSAndroid Build Coastguard Worker 177*35238bceSAndroid Build Coastguard Worker private: 178*35238bceSAndroid Build Coastguard Worker CompressedTexFormat m_format; 179*35238bceSAndroid Build Coastguard Worker int m_width; 180*35238bceSAndroid Build Coastguard Worker int m_height; 181*35238bceSAndroid Build Coastguard Worker int m_depth; 182*35238bceSAndroid Build Coastguard Worker std::vector<uint8_t> m_data; 183*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE; 184*35238bceSAndroid Build Coastguard Worker 185*35238bceSAndroid Build Coastguard Worker void decompress(const PixelBufferAccess &dst, CompressedTexFormat fmt, const uint8_t *src, 186*35238bceSAndroid Build Coastguard Worker const TexDecompressionParams ¶ms = TexDecompressionParams()); 187*35238bceSAndroid Build Coastguard Worker 188*35238bceSAndroid Build Coastguard Worker } // namespace tcu 189*35238bceSAndroid Build Coastguard Worker 190*35238bceSAndroid Build Coastguard Worker #endif // _TCUCOMPRESSEDTEXTURE_HPP 191