xref: /aosp_15_r20/external/deqp/framework/common/tcuCompressedTexture.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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 &params = 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 &params = 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