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