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