xref: /aosp_15_r20/external/deqp/framework/opengl/gluTextureTestUtil.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _GLUTEXTURETESTUTIL_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GLUTEXTURETESTUTIL_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL ES Utilities
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 Utility functions and structures for texture tests.
24*35238bceSAndroid Build Coastguard Worker  *
25*35238bceSAndroid Build Coastguard Worker  * This code is originated from the modules/glshared/glsTextureTestUtil.hpp
26*35238bceSAndroid Build Coastguard Worker  * and it is tightly coupled with the GLES and Vulkan texture tests!
27*35238bceSAndroid Build Coastguard Worker  *
28*35238bceSAndroid Build Coastguard Worker  * About coordinates:
29*35238bceSAndroid Build Coastguard Worker  *  + Quads consist of 2 triangles, rendered using explicit indices.
30*35238bceSAndroid Build Coastguard Worker  *  + All TextureTestUtil functions and classes expect texture coordinates
31*35238bceSAndroid Build Coastguard Worker  *    for quads to be specified in order (-1, -1), (-1, 1), (1, -1), (1, 1).
32*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
35*35238bceSAndroid Build Coastguard Worker #include "tcuSurfaceAccess.hpp"
36*35238bceSAndroid Build Coastguard Worker #include "tcuTestContext.hpp"
37*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
38*35238bceSAndroid Build Coastguard Worker #include "tcuTexture.hpp"
39*35238bceSAndroid Build Coastguard Worker #include "tcuTexCompareVerifier.hpp"
40*35238bceSAndroid Build Coastguard Worker #include "qpWatchDog.h"
41*35238bceSAndroid Build Coastguard Worker 
42*35238bceSAndroid Build Coastguard Worker namespace glu
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker namespace TextureTestUtil
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker enum TextureType
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_2D = 0,
49*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_CUBE,
50*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_2D_ARRAY,
51*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_3D,
52*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_CUBE_ARRAY,
53*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_1D,
54*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_1D_ARRAY,
55*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_BUFFER,
56*35238bceSAndroid Build Coastguard Worker 
57*35238bceSAndroid Build Coastguard Worker     TEXTURETYPE_LAST
58*35238bceSAndroid Build Coastguard Worker };
59*35238bceSAndroid Build Coastguard Worker 
60*35238bceSAndroid Build Coastguard Worker enum SamplerType
61*35238bceSAndroid Build Coastguard Worker {
62*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_FLOAT,
63*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_INT,
64*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_UINT,
65*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_SHADOW,
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_FETCH_FLOAT,
68*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_FETCH_INT,
69*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_FETCH_UINT,
70*35238bceSAndroid Build Coastguard Worker 
71*35238bceSAndroid Build Coastguard Worker     SAMPLERTYPE_LAST
72*35238bceSAndroid Build Coastguard Worker };
73*35238bceSAndroid Build Coastguard Worker 
74*35238bceSAndroid Build Coastguard Worker struct RenderParams
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker     enum Flags
77*35238bceSAndroid Build Coastguard Worker     {
78*35238bceSAndroid Build Coastguard Worker         PROJECTED    = (1 << 0),
79*35238bceSAndroid Build Coastguard Worker         USE_BIAS     = (1 << 1),
80*35238bceSAndroid Build Coastguard Worker         LOG_PROGRAMS = (1 << 2),
81*35238bceSAndroid Build Coastguard Worker         LOG_UNIFORMS = (1 << 3),
82*35238bceSAndroid Build Coastguard Worker 
83*35238bceSAndroid Build Coastguard Worker         LOG_ALL = LOG_PROGRAMS | LOG_UNIFORMS
84*35238bceSAndroid Build Coastguard Worker     };
85*35238bceSAndroid Build Coastguard Worker 
RenderParamsglu::TextureTestUtil::RenderParams86*35238bceSAndroid Build Coastguard Worker     RenderParams(TextureType texType_)
87*35238bceSAndroid Build Coastguard Worker         : texType(texType_)
88*35238bceSAndroid Build Coastguard Worker         , samplerType(SAMPLERTYPE_FLOAT)
89*35238bceSAndroid Build Coastguard Worker         , flags(0)
90*35238bceSAndroid Build Coastguard Worker         , w(1.0f)
91*35238bceSAndroid Build Coastguard Worker         , bias(0.0f)
92*35238bceSAndroid Build Coastguard Worker         , ref(0.0f)
93*35238bceSAndroid Build Coastguard Worker         , colorScale(1.0f)
94*35238bceSAndroid Build Coastguard Worker         , colorBias(0.0f)
95*35238bceSAndroid Build Coastguard Worker     {
96*35238bceSAndroid Build Coastguard Worker     }
97*35238bceSAndroid Build Coastguard Worker 
98*35238bceSAndroid Build Coastguard Worker     TextureType texType;     //!< Texture type.
99*35238bceSAndroid Build Coastguard Worker     SamplerType samplerType; //!< Sampler type.
100*35238bceSAndroid Build Coastguard Worker     uint32_t flags;          //!< Feature flags.
101*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 w;             //!< w coordinates for quad vertices.
102*35238bceSAndroid Build Coastguard Worker     float bias;              //!< User-supplied bias.
103*35238bceSAndroid Build Coastguard Worker     float ref;               //!< Reference value for shadow lookups.
104*35238bceSAndroid Build Coastguard Worker 
105*35238bceSAndroid Build Coastguard Worker     // color = lookup() * scale + bias
106*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 colorScale; //!< Scale for texture color values.
107*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 colorBias;  //!< Bias for texture color values.
108*35238bceSAndroid Build Coastguard Worker };
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker enum LodMode
111*35238bceSAndroid Build Coastguard Worker {
112*35238bceSAndroid Build Coastguard Worker     LODMODE_EXACT = 0, //!< Ideal lod computation.
113*35238bceSAndroid Build Coastguard Worker     LODMODE_MIN_BOUND, //!< Use estimation range minimum bound.
114*35238bceSAndroid Build Coastguard Worker     LODMODE_MAX_BOUND, //!< Use estimation range maximum bound.
115*35238bceSAndroid Build Coastguard Worker 
116*35238bceSAndroid Build Coastguard Worker     LODMODE_LAST
117*35238bceSAndroid Build Coastguard Worker };
118*35238bceSAndroid Build Coastguard Worker 
119*35238bceSAndroid Build Coastguard Worker struct ReferenceParams : public RenderParams
120*35238bceSAndroid Build Coastguard Worker {
ReferenceParamsglu::TextureTestUtil::ReferenceParams121*35238bceSAndroid Build Coastguard Worker     ReferenceParams(TextureType texType_)
122*35238bceSAndroid Build Coastguard Worker         : RenderParams(texType_)
123*35238bceSAndroid Build Coastguard Worker         , sampler()
124*35238bceSAndroid Build Coastguard Worker         , lodMode(LODMODE_EXACT)
125*35238bceSAndroid Build Coastguard Worker         , minLod(-1000.0f)
126*35238bceSAndroid Build Coastguard Worker         , maxLod(1000.0f)
127*35238bceSAndroid Build Coastguard Worker         , baseLevel(0)
128*35238bceSAndroid Build Coastguard Worker         , maxLevel(1000)
129*35238bceSAndroid Build Coastguard Worker         , unnormal(false)
130*35238bceSAndroid Build Coastguard Worker         , float16TexCoord(false)
131*35238bceSAndroid Build Coastguard Worker         , imageViewMinLod(0.0f)
132*35238bceSAndroid Build Coastguard Worker         , imageViewMinLodMode(tcu::IMAGEVIEWMINLODMODE_PREFERRED)
133*35238bceSAndroid Build Coastguard Worker         , lodTexelFetch(0)
134*35238bceSAndroid Build Coastguard Worker     {
135*35238bceSAndroid Build Coastguard Worker     }
136*35238bceSAndroid Build Coastguard Worker 
ReferenceParamsglu::TextureTestUtil::ReferenceParams137*35238bceSAndroid Build Coastguard Worker     ReferenceParams(TextureType texType_, const tcu::Sampler &sampler_, LodMode lodMode_ = LODMODE_EXACT)
138*35238bceSAndroid Build Coastguard Worker         : RenderParams(texType_)
139*35238bceSAndroid Build Coastguard Worker         , sampler(sampler_)
140*35238bceSAndroid Build Coastguard Worker         , lodMode(lodMode_)
141*35238bceSAndroid Build Coastguard Worker         , minLod(-1000.0f)
142*35238bceSAndroid Build Coastguard Worker         , maxLod(1000.0f)
143*35238bceSAndroid Build Coastguard Worker         , baseLevel(0)
144*35238bceSAndroid Build Coastguard Worker         , maxLevel(1000)
145*35238bceSAndroid Build Coastguard Worker         , unnormal(false)
146*35238bceSAndroid Build Coastguard Worker         , float16TexCoord(false)
147*35238bceSAndroid Build Coastguard Worker         , imageViewMinLod(0.0f)
148*35238bceSAndroid Build Coastguard Worker         , imageViewMinLodMode(tcu::IMAGEVIEWMINLODMODE_PREFERRED)
149*35238bceSAndroid Build Coastguard Worker         , lodTexelFetch(0)
150*35238bceSAndroid Build Coastguard Worker     {
151*35238bceSAndroid Build Coastguard Worker     }
152*35238bceSAndroid Build Coastguard Worker 
153*35238bceSAndroid Build Coastguard Worker     tcu::Sampler sampler;
154*35238bceSAndroid Build Coastguard Worker     LodMode lodMode;
155*35238bceSAndroid Build Coastguard Worker     float minLod;
156*35238bceSAndroid Build Coastguard Worker     float maxLod;
157*35238bceSAndroid Build Coastguard Worker     int baseLevel;
158*35238bceSAndroid Build Coastguard Worker     int maxLevel;
159*35238bceSAndroid Build Coastguard Worker     bool unnormal;
160*35238bceSAndroid Build Coastguard Worker     bool float16TexCoord;
161*35238bceSAndroid Build Coastguard Worker     float imageViewMinLod;
162*35238bceSAndroid Build Coastguard Worker     tcu::ImageViewMinLodMode imageViewMinLodMode;
163*35238bceSAndroid Build Coastguard Worker     int lodTexelFetch;
164*35238bceSAndroid Build Coastguard Worker };
165*35238bceSAndroid Build Coastguard Worker 
166*35238bceSAndroid Build Coastguard Worker SamplerType getSamplerType(tcu::TextureFormat format);
167*35238bceSAndroid Build Coastguard Worker SamplerType getFetchSamplerType(tcu::TextureFormat format);
168*35238bceSAndroid Build Coastguard Worker 
169*35238bceSAndroid Build Coastguard Worker // Similar to sampleTexture() except uses texelFetch.
170*35238bceSAndroid Build Coastguard Worker void fetchTexture(const tcu::SurfaceAccess &dst, const tcu::ConstPixelBufferAccess &src, const float *texCoord,
171*35238bceSAndroid Build Coastguard Worker                   const tcu::Vec4 &colorScale, const tcu::Vec4 &colorBias);
172*35238bceSAndroid Build Coastguard Worker 
173*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::PixelBufferAccess &dst, const tcu::Texture2DView &src, const float *texCoord,
174*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
175*35238bceSAndroid Build Coastguard Worker 
176*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::Texture2DView &src, const float *texCoord,
177*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
178*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::TextureCubeView &src, const float *texCoord,
179*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
180*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::Texture2DArrayView &src, const float *texCoord,
181*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
182*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::Texture3DView &src, const float *texCoord,
183*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
184*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::TextureCubeArrayView &src, const float *texCoord,
185*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
186*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::Texture1DView &src, const float *texCoord,
187*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
188*35238bceSAndroid Build Coastguard Worker void sampleTexture(const tcu::SurfaceAccess &dst, const tcu::Texture1DArrayView &src, const float *texCoord,
189*35238bceSAndroid Build Coastguard Worker                    const ReferenceParams &params);
190*35238bceSAndroid Build Coastguard Worker 
191*35238bceSAndroid Build Coastguard Worker float triangleInterpolate(float v0, float v1, float v2, float x, float y);
192*35238bceSAndroid Build Coastguard Worker float triangleInterpolate(const tcu::Vec3 &v, float x, float y);
193*35238bceSAndroid Build Coastguard Worker 
194*35238bceSAndroid Build Coastguard Worker float computeLodFromDerivates(LodMode mode, float dudx, float dudy);
195*35238bceSAndroid Build Coastguard Worker float computeLodFromDerivates(LodMode mode, float dudx, float dvdx, float dudy, float dvdy);
196*35238bceSAndroid Build Coastguard Worker float computeLodFromDerivates(LodMode mode, float dudx, float dvdx, float dwdx, float dudy, float dvdy, float dwdy);
197*35238bceSAndroid Build Coastguard Worker 
198*35238bceSAndroid Build Coastguard Worker float computeNonProjectedTriLod(LodMode mode, const tcu::IVec2 &dstSize, int32_t srcSize, const tcu::Vec3 &sq);
199*35238bceSAndroid Build Coastguard Worker float computeNonProjectedTriLod(LodMode mode, const tcu::IVec2 &dstSize, const tcu::IVec2 &srcSize, const tcu::Vec3 &sq,
200*35238bceSAndroid Build Coastguard Worker                                 const tcu::Vec3 &tq);
201*35238bceSAndroid Build Coastguard Worker float computeNonProjectedTriLod(LodMode mode, const tcu::IVec2 &dstSize, const tcu::IVec3 &srcSize, const tcu::Vec3 &sq,
202*35238bceSAndroid Build Coastguard Worker                                 const tcu::Vec3 &tq, const tcu::Vec3 &rq);
203*35238bceSAndroid Build Coastguard Worker 
204*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoord1D(std::vector<float> &dst, float left, float right);
205*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoord1DArray(std::vector<float> &dst, int layerNdx, float left, float right);
206*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoord2D(std::vector<float> &dst, const tcu::Vec2 &bottomLeft, const tcu::Vec2 &topRight);
207*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoord2D(std::vector<float> &dst, const tcu::IVec2 &bottomLeft, const tcu::IVec2 &topRight);
208*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoord2DArray(std::vector<float> &dst, int layerNdx, const tcu::Vec2 &bottomLeft,
209*35238bceSAndroid Build Coastguard Worker                                 const tcu::Vec2 &topRight);
210*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoord3D(std::vector<float> &dst, const tcu::Vec3 &p0, const tcu::Vec3 &p1, const tcu::IVec3 &dirSwz);
211*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoordCube(std::vector<float> &dst, tcu::CubeFace face);
212*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoordCube(std::vector<float> &dst, tcu::CubeFace face, const tcu::Vec2 &bottomLeft,
213*35238bceSAndroid Build Coastguard Worker                              const tcu::Vec2 &topRight);
214*35238bceSAndroid Build Coastguard Worker void computeQuadTexCoordCubeArray(std::vector<float> &dst, tcu::CubeFace face, const tcu::Vec2 &bottomLeft,
215*35238bceSAndroid Build Coastguard Worker                                   const tcu::Vec2 &topRight, const tcu::Vec2 &layerRange);
216*35238bceSAndroid Build Coastguard Worker 
217*35238bceSAndroid Build Coastguard Worker bool compareImages(tcu::TestLog &log, const char *name, const char *desc, const tcu::Surface &reference,
218*35238bceSAndroid Build Coastguard Worker                    const tcu::Surface &rendered, tcu::RGBA threshold);
219*35238bceSAndroid Build Coastguard Worker bool compareImages(tcu::TestLog &log, const tcu::Surface &reference, const tcu::Surface &rendered, tcu::RGBA threshold);
220*35238bceSAndroid Build Coastguard Worker int measureAccuracy(tcu::TestLog &log, const tcu::Surface &reference, const tcu::Surface &rendered, int bestScoreDiff,
221*35238bceSAndroid Build Coastguard Worker                     int worstScoreDiff);
222*35238bceSAndroid Build Coastguard Worker 
223*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
224*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::Texture1DView &src,
225*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
226*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
227*35238bceSAndroid Build Coastguard Worker                              qpWatchDog *watchDog);
228*35238bceSAndroid Build Coastguard Worker 
229*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
230*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::Texture2DView &src,
231*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
232*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
233*35238bceSAndroid Build Coastguard Worker                              qpWatchDog *watchDog);
234*35238bceSAndroid Build Coastguard Worker 
235*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
236*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::TextureCubeView &src,
237*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
238*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
239*35238bceSAndroid Build Coastguard Worker                              qpWatchDog *watchDog);
240*35238bceSAndroid Build Coastguard Worker 
241*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
242*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::Texture1DArrayView &src,
243*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
244*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
245*35238bceSAndroid Build Coastguard Worker                              qpWatchDog *watchDog);
246*35238bceSAndroid Build Coastguard Worker 
247*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
248*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::Texture2DArrayView &src,
249*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
250*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
251*35238bceSAndroid Build Coastguard Worker                              qpWatchDog *watchDog);
252*35238bceSAndroid Build Coastguard Worker 
253*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
254*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::Texture3DView &src,
255*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
256*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
257*35238bceSAndroid Build Coastguard Worker                              qpWatchDog *watchDog);
258*35238bceSAndroid Build Coastguard Worker 
259*35238bceSAndroid Build Coastguard Worker int computeTextureLookupDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
260*35238bceSAndroid Build Coastguard Worker                              const tcu::PixelBufferAccess &errorMask, const tcu::TextureCubeArrayView &src,
261*35238bceSAndroid Build Coastguard Worker                              const float *texCoord, const ReferenceParams &sampleParams,
262*35238bceSAndroid Build Coastguard Worker                              const tcu::LookupPrecision &lookupPrec, const tcu::IVec4 &coordBits,
263*35238bceSAndroid Build Coastguard Worker                              const tcu::LodPrecision &lodPrec, qpWatchDog *watchDog);
264*35238bceSAndroid Build Coastguard Worker 
265*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
266*35238bceSAndroid Build Coastguard Worker                          const tcu::Texture1DView &src, const float *texCoord, const ReferenceParams &sampleParams,
267*35238bceSAndroid Build Coastguard Worker                          const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
268*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
269*35238bceSAndroid Build Coastguard Worker 
270*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
271*35238bceSAndroid Build Coastguard Worker                          const tcu::Texture2DView &src, const float *texCoord, const ReferenceParams &sampleParams,
272*35238bceSAndroid Build Coastguard Worker                          const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
273*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
274*35238bceSAndroid Build Coastguard Worker 
275*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
276*35238bceSAndroid Build Coastguard Worker                          const tcu::TextureCubeView &src, const float *texCoord, const ReferenceParams &sampleParams,
277*35238bceSAndroid Build Coastguard Worker                          const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
278*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
279*35238bceSAndroid Build Coastguard Worker 
280*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
281*35238bceSAndroid Build Coastguard Worker                          const tcu::Texture1DArrayView &src, const float *texCoord, const ReferenceParams &sampleParams,
282*35238bceSAndroid Build Coastguard Worker                          const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
283*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
284*35238bceSAndroid Build Coastguard Worker 
285*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
286*35238bceSAndroid Build Coastguard Worker                          const tcu::Texture2DArrayView &src, const float *texCoord, const ReferenceParams &sampleParams,
287*35238bceSAndroid Build Coastguard Worker                          const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
288*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
289*35238bceSAndroid Build Coastguard Worker 
290*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
291*35238bceSAndroid Build Coastguard Worker                          const tcu::Texture3DView &src, const float *texCoord, const ReferenceParams &sampleParams,
292*35238bceSAndroid Build Coastguard Worker                          const tcu::LookupPrecision &lookupPrec, const tcu::LodPrecision &lodPrec,
293*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
294*35238bceSAndroid Build Coastguard Worker 
295*35238bceSAndroid Build Coastguard Worker bool verifyTextureResult(tcu::TestContext &testCtx, const tcu::ConstPixelBufferAccess &result,
296*35238bceSAndroid Build Coastguard Worker                          const tcu::TextureCubeArrayView &src, const float *texCoord,
297*35238bceSAndroid Build Coastguard Worker                          const ReferenceParams &sampleParams, const tcu::LookupPrecision &lookupPrec,
298*35238bceSAndroid Build Coastguard Worker                          const tcu::IVec4 &coordBits, const tcu::LodPrecision &lodPrec,
299*35238bceSAndroid Build Coastguard Worker                          const tcu::PixelFormat &pixelFormat);
300*35238bceSAndroid Build Coastguard Worker 
301*35238bceSAndroid Build Coastguard Worker int computeTextureCompareDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
302*35238bceSAndroid Build Coastguard Worker                               const tcu::PixelBufferAccess &errorMask, const tcu::Texture2DView &src,
303*35238bceSAndroid Build Coastguard Worker                               const float *texCoord, const ReferenceParams &sampleParams,
304*35238bceSAndroid Build Coastguard Worker                               const tcu::TexComparePrecision &comparePrec, const tcu::LodPrecision &lodPrec,
305*35238bceSAndroid Build Coastguard Worker                               const tcu::Vec3 &nonShadowThreshold);
306*35238bceSAndroid Build Coastguard Worker 
307*35238bceSAndroid Build Coastguard Worker int computeTextureCompareDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
308*35238bceSAndroid Build Coastguard Worker                               const tcu::PixelBufferAccess &errorMask, const tcu::TextureCubeView &src,
309*35238bceSAndroid Build Coastguard Worker                               const float *texCoord, const ReferenceParams &sampleParams,
310*35238bceSAndroid Build Coastguard Worker                               const tcu::TexComparePrecision &comparePrec, const tcu::LodPrecision &lodPrec,
311*35238bceSAndroid Build Coastguard Worker                               const tcu::Vec3 &nonShadowThreshold);
312*35238bceSAndroid Build Coastguard Worker 
313*35238bceSAndroid Build Coastguard Worker int computeTextureCompareDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
314*35238bceSAndroid Build Coastguard Worker                               const tcu::PixelBufferAccess &errorMask, const tcu::Texture2DArrayView &src,
315*35238bceSAndroid Build Coastguard Worker                               const float *texCoord, const ReferenceParams &sampleParams,
316*35238bceSAndroid Build Coastguard Worker                               const tcu::TexComparePrecision &comparePrec, const tcu::LodPrecision &lodPrec,
317*35238bceSAndroid Build Coastguard Worker                               const tcu::Vec3 &nonShadowThreshold);
318*35238bceSAndroid Build Coastguard Worker 
319*35238bceSAndroid Build Coastguard Worker int computeTextureCompareDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
320*35238bceSAndroid Build Coastguard Worker                               const tcu::PixelBufferAccess &errorMask, const tcu::Texture1DView &src,
321*35238bceSAndroid Build Coastguard Worker                               const float *texCoord, const ReferenceParams &sampleParams,
322*35238bceSAndroid Build Coastguard Worker                               const tcu::TexComparePrecision &comparePrec, const tcu::LodPrecision &lodPrec,
323*35238bceSAndroid Build Coastguard Worker                               const tcu::Vec3 &nonShadowThreshold);
324*35238bceSAndroid Build Coastguard Worker 
325*35238bceSAndroid Build Coastguard Worker int computeTextureCompareDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
326*35238bceSAndroid Build Coastguard Worker                               const tcu::PixelBufferAccess &errorMask, const tcu::Texture1DArrayView &src,
327*35238bceSAndroid Build Coastguard Worker                               const float *texCoord, const ReferenceParams &sampleParams,
328*35238bceSAndroid Build Coastguard Worker                               const tcu::TexComparePrecision &comparePrec, const tcu::LodPrecision &lodPrec,
329*35238bceSAndroid Build Coastguard Worker                               const tcu::Vec3 &nonShadowThreshold);
330*35238bceSAndroid Build Coastguard Worker 
331*35238bceSAndroid Build Coastguard Worker int computeTextureCompareDiff(const tcu::ConstPixelBufferAccess &result, const tcu::ConstPixelBufferAccess &reference,
332*35238bceSAndroid Build Coastguard Worker                               const tcu::PixelBufferAccess &errorMask, const tcu::TextureCubeArrayView &src,
333*35238bceSAndroid Build Coastguard Worker                               const float *texCoord, const ReferenceParams &sampleParams,
334*35238bceSAndroid Build Coastguard Worker                               const tcu::TexComparePrecision &comparePrec, const tcu::LodPrecision &lodPrec,
335*35238bceSAndroid Build Coastguard Worker                               const tcu::Vec3 &nonShadowThreshold);
336*35238bceSAndroid Build Coastguard Worker 
getBitsVec(const tcu::PixelFormat & format)337*35238bceSAndroid Build Coastguard Worker inline tcu::IVec4 getBitsVec(const tcu::PixelFormat &format)
338*35238bceSAndroid Build Coastguard Worker {
339*35238bceSAndroid Build Coastguard Worker     return tcu::IVec4(format.redBits, format.greenBits, format.blueBits, format.alphaBits);
340*35238bceSAndroid Build Coastguard Worker }
341*35238bceSAndroid Build Coastguard Worker 
getCompareMask(const tcu::PixelFormat & format)342*35238bceSAndroid Build Coastguard Worker inline tcu::BVec4 getCompareMask(const tcu::PixelFormat &format)
343*35238bceSAndroid Build Coastguard Worker {
344*35238bceSAndroid Build Coastguard Worker     return tcu::BVec4(format.redBits > 0, format.greenBits > 0, format.blueBits > 0, format.alphaBits > 0);
345*35238bceSAndroid Build Coastguard Worker }
346*35238bceSAndroid Build Coastguard Worker 
347*35238bceSAndroid Build Coastguard Worker // Mipmap generation comparison.
348*35238bceSAndroid Build Coastguard Worker 
349*35238bceSAndroid Build Coastguard Worker struct GenMipmapPrecision
350*35238bceSAndroid Build Coastguard Worker {
351*35238bceSAndroid Build Coastguard Worker     tcu::IVec3 filterBits;    //!< Bits in filtering parameters (fixed-point).
352*35238bceSAndroid Build Coastguard Worker     tcu::Vec4 colorThreshold; //!< Threshold for color value comparison.
353*35238bceSAndroid Build Coastguard Worker     tcu::BVec4 colorMask;     //!< Color channel comparison mask.
354*35238bceSAndroid Build Coastguard Worker };
355*35238bceSAndroid Build Coastguard Worker 
356*35238bceSAndroid Build Coastguard Worker qpTestResult compareGenMipmapResult(tcu::TestLog &log, const tcu::Texture2D &resultTexture,
357*35238bceSAndroid Build Coastguard Worker                                     const tcu::Texture2D &level0Reference, const GenMipmapPrecision &precision);
358*35238bceSAndroid Build Coastguard Worker qpTestResult compareGenMipmapResult(tcu::TestLog &log, const tcu::TextureCube &resultTexture,
359*35238bceSAndroid Build Coastguard Worker                                     const tcu::TextureCube &level0Reference, const GenMipmapPrecision &precision);
360*35238bceSAndroid Build Coastguard Worker 
361*35238bceSAndroid Build Coastguard Worker // Utility for logging texture gradient ranges.
362*35238bceSAndroid Build Coastguard Worker struct LogGradientFmt
363*35238bceSAndroid Build Coastguard Worker {
LogGradientFmtglu::TextureTestUtil::LogGradientFmt364*35238bceSAndroid Build Coastguard Worker     LogGradientFmt(const tcu::Vec4 *min_, const tcu::Vec4 *max_) : valueMin(min_), valueMax(max_)
365*35238bceSAndroid Build Coastguard Worker     {
366*35238bceSAndroid Build Coastguard Worker     }
367*35238bceSAndroid Build Coastguard Worker     const tcu::Vec4 *valueMin;
368*35238bceSAndroid Build Coastguard Worker     const tcu::Vec4 *valueMax;
369*35238bceSAndroid Build Coastguard Worker };
370*35238bceSAndroid Build Coastguard Worker 
371*35238bceSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &str, const LogGradientFmt &fmt);
formatGradient(const tcu::Vec4 * minVal,const tcu::Vec4 * maxVal)372*35238bceSAndroid Build Coastguard Worker inline LogGradientFmt formatGradient(const tcu::Vec4 *minVal, const tcu::Vec4 *maxVal)
373*35238bceSAndroid Build Coastguard Worker {
374*35238bceSAndroid Build Coastguard Worker     return LogGradientFmt(minVal, maxVal);
375*35238bceSAndroid Build Coastguard Worker }
376*35238bceSAndroid Build Coastguard Worker 
377*35238bceSAndroid Build Coastguard Worker } // namespace TextureTestUtil
378*35238bceSAndroid Build Coastguard Worker } // namespace glu
379*35238bceSAndroid Build Coastguard Worker 
380*35238bceSAndroid Build Coastguard Worker #endif // _GLUTEXTURETESTUTIL_HPP
381