1 #ifndef _TCUCOMPRESSEDTEXTURE_HPP 2 #define _TCUCOMPRESSEDTEXTURE_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 5 * ---------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Compressed Texture Utilities. 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 #include "tcuTexture.hpp" 28 29 #include <vector> 30 31 namespace tcu 32 { 33 34 enum CompressedTexFormat 35 { 36 COMPRESSEDTEXFORMAT_ETC1_RGB8 = 0, 37 COMPRESSEDTEXFORMAT_EAC_R11, 38 COMPRESSEDTEXFORMAT_EAC_SIGNED_R11, 39 COMPRESSEDTEXFORMAT_EAC_RG11, 40 COMPRESSEDTEXFORMAT_EAC_SIGNED_RG11, 41 COMPRESSEDTEXFORMAT_ETC2_RGB8, 42 COMPRESSEDTEXFORMAT_ETC2_SRGB8, 43 COMPRESSEDTEXFORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1, 44 COMPRESSEDTEXFORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1, 45 COMPRESSEDTEXFORMAT_ETC2_EAC_RGBA8, 46 COMPRESSEDTEXFORMAT_ETC2_EAC_SRGB8_ALPHA8, 47 48 COMPRESSEDTEXFORMAT_ASTC_4x4_RGBA, 49 COMPRESSEDTEXFORMAT_ASTC_5x4_RGBA, 50 COMPRESSEDTEXFORMAT_ASTC_5x5_RGBA, 51 COMPRESSEDTEXFORMAT_ASTC_6x5_RGBA, 52 COMPRESSEDTEXFORMAT_ASTC_6x6_RGBA, 53 COMPRESSEDTEXFORMAT_ASTC_8x5_RGBA, 54 COMPRESSEDTEXFORMAT_ASTC_8x6_RGBA, 55 COMPRESSEDTEXFORMAT_ASTC_8x8_RGBA, 56 COMPRESSEDTEXFORMAT_ASTC_10x5_RGBA, 57 COMPRESSEDTEXFORMAT_ASTC_10x6_RGBA, 58 COMPRESSEDTEXFORMAT_ASTC_10x8_RGBA, 59 COMPRESSEDTEXFORMAT_ASTC_10x10_RGBA, 60 COMPRESSEDTEXFORMAT_ASTC_12x10_RGBA, 61 COMPRESSEDTEXFORMAT_ASTC_12x12_RGBA, 62 COMPRESSEDTEXFORMAT_ASTC_4x4_SRGB8_ALPHA8, 63 COMPRESSEDTEXFORMAT_ASTC_5x4_SRGB8_ALPHA8, 64 COMPRESSEDTEXFORMAT_ASTC_5x5_SRGB8_ALPHA8, 65 COMPRESSEDTEXFORMAT_ASTC_6x5_SRGB8_ALPHA8, 66 COMPRESSEDTEXFORMAT_ASTC_6x6_SRGB8_ALPHA8, 67 COMPRESSEDTEXFORMAT_ASTC_8x5_SRGB8_ALPHA8, 68 COMPRESSEDTEXFORMAT_ASTC_8x6_SRGB8_ALPHA8, 69 COMPRESSEDTEXFORMAT_ASTC_8x8_SRGB8_ALPHA8, 70 COMPRESSEDTEXFORMAT_ASTC_10x5_SRGB8_ALPHA8, 71 COMPRESSEDTEXFORMAT_ASTC_10x6_SRGB8_ALPHA8, 72 COMPRESSEDTEXFORMAT_ASTC_10x8_SRGB8_ALPHA8, 73 COMPRESSEDTEXFORMAT_ASTC_10x10_SRGB8_ALPHA8, 74 COMPRESSEDTEXFORMAT_ASTC_12x10_SRGB8_ALPHA8, 75 COMPRESSEDTEXFORMAT_ASTC_12x12_SRGB8_ALPHA8, 76 77 COMPRESSEDTEXFORMAT_LAST 78 }; 79 80 int getBlockSize (CompressedTexFormat format); 81 IVec3 getBlockPixelSize (CompressedTexFormat format); 82 83 bool isEtcFormat (CompressedTexFormat format); 84 bool isAstcFormat (CompressedTexFormat format); 85 bool isAstcSRGBFormat (CompressedTexFormat format); 86 87 TextureFormat getUncompressedFormat (CompressedTexFormat format); 88 CompressedTexFormat getAstcFormatByBlockSize (const IVec3& size, bool isSRGB); 89 90 struct TexDecompressionParams 91 { 92 enum AstcMode 93 { 94 ASTCMODE_LDR = 0, 95 ASTCMODE_HDR, 96 ASTCMODE_LAST 97 }; 98 TexDecompressionParamstcu::TexDecompressionParams99 TexDecompressionParams (AstcMode astcMode_ = ASTCMODE_LAST) : astcMode(astcMode_) {} 100 101 AstcMode astcMode; 102 }; 103 104 /*--------------------------------------------------------------------*//*! 105 * \brief Compressed texture 106 * 107 * This class implements container for common compressed texture formats. 108 * Reference decoding to uncompressed formats is supported. 109 *//*--------------------------------------------------------------------*/ 110 class CompressedTexture 111 { 112 public: 113 114 CompressedTexture (CompressedTexFormat format, int width, int height, int depth = 1); 115 CompressedTexture (void); 116 ~CompressedTexture (void); 117 118 void setStorage (CompressedTexFormat format, int width, int height, int depth = 1); 119 getWidth(void) const120 int getWidth (void) const { return m_width; } getHeight(void) const121 int getHeight (void) const { return m_height; } getDepth(void) const122 int getDepth (void) const { return m_depth; } getFormat(void) const123 CompressedTexFormat getFormat (void) const { return m_format; } getDataSize(void) const124 int getDataSize (void) const { return (int)m_data.size(); } getData(void) const125 const void* getData (void) const { return &m_data[0]; } getData(void)126 void* getData (void) { return &m_data[0]; } 127 128 void decompress (const PixelBufferAccess& dst, const TexDecompressionParams& params = TexDecompressionParams()) const; 129 130 private: 131 CompressedTexFormat m_format; 132 int m_width; 133 int m_height; 134 int m_depth; 135 std::vector<deUint8> m_data; 136 } DE_WARN_UNUSED_TYPE; 137 138 void decompress (const PixelBufferAccess& dst, CompressedTexFormat fmt, const deUint8* src, const TexDecompressionParams& params = TexDecompressionParams()); 139 140 } // tcu 141 142 #endif // _TCUCOMPRESSEDTEXTURE_HPP 143