xref: /aosp_15_r20/external/deqp/framework/common/tcuTexVerifierUtil.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _TCUTEXVERIFIERUTIL_HPP
2*35238bceSAndroid Build Coastguard Worker #define _TCUTEXVERIFIERUTIL_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 Internal utilities shared between TexLookup and TexCompare verifiers.
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 namespace tcu
30*35238bceSAndroid Build Coastguard Worker {
31*35238bceSAndroid Build Coastguard Worker namespace TexVerifierUtil
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker 
34*35238bceSAndroid Build Coastguard Worker // Error bound utilities
35*35238bceSAndroid Build Coastguard Worker 
36*35238bceSAndroid Build Coastguard Worker float computeFloatingPointError(const float value, const int numAccurateBits);
37*35238bceSAndroid Build Coastguard Worker float computeFixedPointError(const int numAccurateBits);
38*35238bceSAndroid Build Coastguard Worker float computeColorBitsError(const int bits, const int numAccurateBits);
39*35238bceSAndroid Build Coastguard Worker 
40*35238bceSAndroid Build Coastguard Worker template <int Size>
computeFloatingPointError(const Vector<float,Size> & value,const Vector<int32_t,Size> & numAccurateBits)41*35238bceSAndroid Build Coastguard Worker inline Vector<float, Size> computeFloatingPointError(const Vector<float, Size> &value,
42*35238bceSAndroid Build Coastguard Worker                                                      const Vector<int32_t, Size> &numAccurateBits)
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker     Vector<float, Size> res;
45*35238bceSAndroid Build Coastguard Worker     for (int ndx = 0; ndx < Size; ndx++)
46*35238bceSAndroid Build Coastguard Worker         res[ndx] = computeFloatingPointError(value[ndx], numAccurateBits[ndx]);
47*35238bceSAndroid Build Coastguard Worker     return res;
48*35238bceSAndroid Build Coastguard Worker }
49*35238bceSAndroid Build Coastguard Worker 
50*35238bceSAndroid Build Coastguard Worker template <int Size>
computeFixedPointError(const Vector<int32_t,Size> & numAccurateBits)51*35238bceSAndroid Build Coastguard Worker inline Vector<float, Size> computeFixedPointError(const Vector<int32_t, Size> &numAccurateBits)
52*35238bceSAndroid Build Coastguard Worker {
53*35238bceSAndroid Build Coastguard Worker     Vector<float, Size> res;
54*35238bceSAndroid Build Coastguard Worker     for (int ndx = 0; ndx < Size; ndx++)
55*35238bceSAndroid Build Coastguard Worker         res[ndx] = computeFixedPointError(numAccurateBits[ndx]);
56*35238bceSAndroid Build Coastguard Worker     return res;
57*35238bceSAndroid Build Coastguard Worker }
58*35238bceSAndroid Build Coastguard Worker 
59*35238bceSAndroid Build Coastguard Worker template <int Size>
computeColorBitsError(const Vector<int32_t,Size> & bits,const Vector<int32_t,Size> & numAccurateBits)60*35238bceSAndroid Build Coastguard Worker inline Vector<float, Size> computeColorBitsError(const Vector<int32_t, Size> &bits,
61*35238bceSAndroid Build Coastguard Worker                                                  const Vector<int32_t, Size> &numAccurateBits)
62*35238bceSAndroid Build Coastguard Worker {
63*35238bceSAndroid Build Coastguard Worker     Vector<float, Size> res;
64*35238bceSAndroid Build Coastguard Worker     for (int ndx = 0; ndx < Size; ndx++)
65*35238bceSAndroid Build Coastguard Worker         res[ndx] = computeColorBitsError(bits[ndx], numAccurateBits[ndx]);
66*35238bceSAndroid Build Coastguard Worker     return res;
67*35238bceSAndroid Build Coastguard Worker }
68*35238bceSAndroid Build Coastguard Worker 
69*35238bceSAndroid Build Coastguard Worker // Sampler introspection
70*35238bceSAndroid Build Coastguard Worker 
isNearestMipmapFilter(const Sampler::FilterMode mode)71*35238bceSAndroid Build Coastguard Worker inline bool isNearestMipmapFilter(const Sampler::FilterMode mode)
72*35238bceSAndroid Build Coastguard Worker {
73*35238bceSAndroid Build Coastguard Worker     return mode == Sampler::NEAREST_MIPMAP_NEAREST || mode == Sampler::LINEAR_MIPMAP_NEAREST ||
74*35238bceSAndroid Build Coastguard Worker            mode == Sampler::CUBIC_MIPMAP_NEAREST;
75*35238bceSAndroid Build Coastguard Worker }
76*35238bceSAndroid Build Coastguard Worker 
isLinearMipmapFilter(const Sampler::FilterMode mode)77*35238bceSAndroid Build Coastguard Worker inline bool isLinearMipmapFilter(const Sampler::FilterMode mode)
78*35238bceSAndroid Build Coastguard Worker {
79*35238bceSAndroid Build Coastguard Worker     return mode == Sampler::NEAREST_MIPMAP_LINEAR || mode == Sampler::LINEAR_MIPMAP_LINEAR ||
80*35238bceSAndroid Build Coastguard Worker            mode == Sampler::CUBIC_MIPMAP_LINEAR;
81*35238bceSAndroid Build Coastguard Worker }
82*35238bceSAndroid Build Coastguard Worker 
isMipmapFilter(const Sampler::FilterMode mode)83*35238bceSAndroid Build Coastguard Worker inline bool isMipmapFilter(const Sampler::FilterMode mode)
84*35238bceSAndroid Build Coastguard Worker {
85*35238bceSAndroid Build Coastguard Worker     return isNearestMipmapFilter(mode) || isLinearMipmapFilter(mode);
86*35238bceSAndroid Build Coastguard Worker }
87*35238bceSAndroid Build Coastguard Worker 
isNearestFilter(const Sampler::FilterMode mode)88*35238bceSAndroid Build Coastguard Worker inline bool isNearestFilter(const Sampler::FilterMode mode)
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker     return mode == Sampler::NEAREST || mode == Sampler::NEAREST_MIPMAP_NEAREST ||
91*35238bceSAndroid Build Coastguard Worker            mode == Sampler::NEAREST_MIPMAP_LINEAR;
92*35238bceSAndroid Build Coastguard Worker }
93*35238bceSAndroid Build Coastguard Worker 
isLinearFilter(const Sampler::FilterMode mode)94*35238bceSAndroid Build Coastguard Worker inline bool isLinearFilter(const Sampler::FilterMode mode)
95*35238bceSAndroid Build Coastguard Worker {
96*35238bceSAndroid Build Coastguard Worker     return mode == Sampler::LINEAR || mode == Sampler::LINEAR_MIPMAP_NEAREST || mode == Sampler::LINEAR_MIPMAP_LINEAR;
97*35238bceSAndroid Build Coastguard Worker }
98*35238bceSAndroid Build Coastguard Worker 
isCubicFilter(const Sampler::FilterMode mode)99*35238bceSAndroid Build Coastguard Worker inline bool isCubicFilter(const Sampler::FilterMode mode)
100*35238bceSAndroid Build Coastguard Worker {
101*35238bceSAndroid Build Coastguard Worker     return mode == Sampler::CUBIC || mode == Sampler::CUBIC_MIPMAP_NEAREST || mode == Sampler::CUBIC_MIPMAP_LINEAR;
102*35238bceSAndroid Build Coastguard Worker }
103*35238bceSAndroid Build Coastguard Worker 
getLevelFilter(const Sampler::FilterMode mode)104*35238bceSAndroid Build Coastguard Worker inline Sampler::FilterMode getLevelFilter(const Sampler::FilterMode mode)
105*35238bceSAndroid Build Coastguard Worker {
106*35238bceSAndroid Build Coastguard Worker     if (isNearestFilter(mode))
107*35238bceSAndroid Build Coastguard Worker         return Sampler::NEAREST;
108*35238bceSAndroid Build Coastguard Worker     if (isLinearFilter(mode))
109*35238bceSAndroid Build Coastguard Worker         return Sampler::LINEAR;
110*35238bceSAndroid Build Coastguard Worker     return Sampler::CUBIC;
111*35238bceSAndroid Build Coastguard Worker }
112*35238bceSAndroid Build Coastguard Worker 
isWrapModeSupported(const Sampler::WrapMode mode)113*35238bceSAndroid Build Coastguard Worker inline bool isWrapModeSupported(const Sampler::WrapMode mode)
114*35238bceSAndroid Build Coastguard Worker {
115*35238bceSAndroid Build Coastguard Worker     return mode != Sampler::MIRRORED_REPEAT_CL && mode != Sampler::REPEAT_CL;
116*35238bceSAndroid Build Coastguard Worker }
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker // Misc utilities
119*35238bceSAndroid Build Coastguard Worker 
120*35238bceSAndroid Build Coastguard Worker Vec2 computeNonNormalizedCoordBounds(const bool normalizedCoords, const int dim, const float coord, const int coordBits,
121*35238bceSAndroid Build Coastguard Worker                                      const int uvBits);
122*35238bceSAndroid Build Coastguard Worker void getPossibleCubeFaces(const Vec3 &coord, const IVec3 &bits, CubeFace *faces, int &numFaces);
123*35238bceSAndroid Build Coastguard Worker 
124*35238bceSAndroid Build Coastguard Worker Sampler getUnnormalizedCoordSampler(const Sampler &sampler);
125*35238bceSAndroid Build Coastguard Worker int wrap(Sampler::WrapMode mode, int c, int size);
126*35238bceSAndroid Build Coastguard Worker 
127*35238bceSAndroid Build Coastguard Worker } // namespace TexVerifierUtil
128*35238bceSAndroid Build Coastguard Worker } // namespace tcu
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker #endif // _TCUTEXVERIFIERUTIL_HPP
131