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