106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry/*------------------------------------------------------------------------- 206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * drawElements Quality Program OpenGL ES 3.1 Module 306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * ------------------------------------------------- 406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * 506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * Copyright 2015 The Android Open Source Project 606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * 706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * Licensed under the Apache License, Version 2.0 (the "License"); 806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * you may not use this file except in compliance with the License. 906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * You may obtain a copy of the License at 1006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * 1106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * http://www.apache.org/licenses/LICENSE-2.0 1206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * 1306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * Unless required by applicable law or agreed to in writing, software 1406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * distributed under the License is distributed on an "AS IS" BASIS, 1506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * See the License for the specific language governing permissions and 1706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * limitations under the License. 1806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * 1906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry *//*! 2006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * \file 2106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry * \brief Texture border clamp tests. 2206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry *//*--------------------------------------------------------------------*/ 2306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "es31fTextureBorderClampTests.hpp" 2506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "glsTextureTestUtil.hpp" 2706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuTextureUtil.hpp" 2906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuTexLookupVerifier.hpp" 3006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuTexCompareVerifier.hpp" 3106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuCompressedTexture.hpp" 3206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuResultCollector.hpp" 3306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuSurface.hpp" 3406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuSeedBuilder.hpp" 3506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "tcuVectorUtil.hpp" 3606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 3706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "rrGenericVector.hpp" 3806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 3906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluContextInfo.hpp" 4006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluTexture.hpp" 4106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluTextureUtil.hpp" 4206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluPixelTransfer.hpp" 4306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluStrUtil.hpp" 4406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluObjectWrapper.hpp" 4506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluShaderProgram.hpp" 4606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "gluDrawUtil.hpp" 4706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 4806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "glwEnums.hpp" 4906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "glwFunctions.hpp" 5006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 5106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "deStringUtil.hpp" 5206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "deUniquePtr.hpp" 5306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include "deRandom.hpp" 5406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 5506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry#include <limits> 5606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 5706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 5806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrynamespace deqp 5906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 6006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrynamespace gles31 6106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 6206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrynamespace Functional 6306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 6406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrynamespace 6506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 6606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 6706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryenum SizeType 6806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 6906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SIZE_POT = 0, 7006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SIZE_NPOT 7106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 7206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 7306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool filterRequiresFilterability (deUint32 filter) 7406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 7506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (filter) 7606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 7706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case GL_NEAREST: 7806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case GL_NEAREST_MIPMAP_NEAREST: 7906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 8006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 8106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case GL_LINEAR: 8206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case GL_LINEAR_MIPMAP_NEAREST: 8306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case GL_NEAREST_MIPMAP_LINEAR: 8406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case GL_LINEAR_MIPMAP_LINEAR: 8506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return true; 8606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 8706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 8806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 8906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 9006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 9106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 9206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 9306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool isDepthFormat (deUint32 format, tcu::Sampler::DepthStencilMode mode) 9406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 9506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA || format == GL_ALPHA || format == GL_BGRA) 9606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 9706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Unsized formats are a special case 9806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 9906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 10006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (glu::isCompressedFormat(format)) 10106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 10206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // no known compressed depth formats 10306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 10406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 10506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 10606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 10706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat fmt = glu::mapGLInternalFormat(format); 10806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 10906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (fmt.order == tcu::TextureFormat::D) 11006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 11106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(mode == tcu::Sampler::MODE_DEPTH); 11206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return true; 11306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 11406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (fmt.order == tcu::TextureFormat::DS && mode == tcu::Sampler::MODE_DEPTH) 11506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return true; 11606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 11706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 11806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 11906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 12006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 12106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool isStencilFormat (deUint32 format, tcu::Sampler::DepthStencilMode mode) 12206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 12306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA || format == GL_ALPHA || format == GL_BGRA) 12406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 12506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Unsized formats are a special case 12606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 12706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 12806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (glu::isCompressedFormat(format)) 12906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 13006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // no known compressed stencil formats 13106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 13206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 13306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 13406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 13506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat fmt = glu::mapGLInternalFormat(format); 13606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 13706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (fmt.order == tcu::TextureFormat::S) 13806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 13906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(mode == tcu::Sampler::MODE_STENCIL); 14006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return true; 14106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 14206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (fmt.order == tcu::TextureFormat::DS && mode == tcu::Sampler::MODE_STENCIL) 14306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return true; 14406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 14506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 14606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 14706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 14806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 14906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytcu::TextureChannelClass getFormatChannelClass (deUint32 format, tcu::Sampler::DepthStencilMode mode) 15006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 15106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA || format == GL_ALPHA || format == GL_BGRA) 15206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 15306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Unsized formats are a special c, use UNORM8 15406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT; 15506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 15606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (glu::isCompressedFormat(format)) 15706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 15806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::CompressedTexFormat compressedFmt = glu::mapGLCompressedTexFormat(format); 15906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat uncompressedFmt = tcu::getUncompressedFormat(compressedFmt); 16006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return tcu::getTextureChannelClass(uncompressedFmt.type); 16106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 16206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 16306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 16406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat fmt = glu::mapGLInternalFormat(format); 16506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat effectiveFmt = tcu::getEffectiveDepthStencilTextureFormat(fmt, mode); 16606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 16706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return tcu::getTextureChannelClass(effectiveFmt.type); 16806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 16906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 17006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 17106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint getDimensionNumBlocks (int dimensionSize, int blockSize) 17206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 17306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // ceil( a / b ) 17406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (dimensionSize + blockSize - 1) / blockSize; 17506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 17606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 17706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid generateDummyCompressedData (tcu::CompressedTexture& dst, const tcu::CompressedTexFormat& format) 17806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 17906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int blockByteSize = tcu::getBlockSize(format); 18006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec3 blockPixelSize = tcu::getBlockPixelSize(format); 18106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec3 numBlocks (getDimensionNumBlocks(dst.getWidth(), blockPixelSize.x()), 18206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getDimensionNumBlocks(dst.getHeight(), blockPixelSize.y()), 18306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getDimensionNumBlocks(dst.getDepth(), blockPixelSize.z())); 18406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int numTotalBlocks = numBlocks.x() * numBlocks.y() * numBlocks.z(); 18506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int dataSize = numTotalBlocks * blockByteSize; 18606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 18706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(dst.getDataSize() == dataSize); 18806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 18906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (tcu::isAstcFormat(format)) 19006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 19106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // generate data that is valid in LDR mode 19206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int BLOCK_SIZE = 16; 19306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint8 block[BLOCK_SIZE] = { 252, 253, 255, 255, 255, 255, 255, 255, 223, 251, 28, 206, 54, 251, 160, 174 }; 19406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 19506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(blockByteSize == BLOCK_SIZE); 19606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int ndx = 0; ndx < numTotalBlocks; ++ndx) 19706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deMemcpy((deUint8*)dst.getData() + ndx * BLOCK_SIZE, block, BLOCK_SIZE); 19806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 19906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 20006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 20106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // any data is ok 20206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::Random rnd(0xabc); 20306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 20406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int ndx = 0; ndx < dataSize; ++ndx) 20506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ((deUint8*)dst.getData())[ndx] = rnd.getUint8(); 20606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 20706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 20806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 20906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytemplate <typename T> 21006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrystruct TextureTraits 21106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 21206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 21306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 21406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytemplate <> 21506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrystruct TextureTraits<glu::Texture2D> 21606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 21706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry typedef tcu::IVec2 SizeType; 21806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 21906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static de::MovePtr<glu::Texture2D> createTextureFromInternalFormat (glu::RenderContext& renderCtx, deUint32 texFormat, const tcu::IVec2& size) 22006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 22106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return de::MovePtr<glu::Texture2D>(new glu::Texture2D(renderCtx, texFormat, size.x(), size.y())); 22206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 22306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 22406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static de::MovePtr<glu::Texture2D> createTextureFromFormatAndType (glu::RenderContext& renderCtx, deUint32 texFormat, deUint32 type, const tcu::IVec2& size) 22506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 22606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return de::MovePtr<glu::Texture2D>(new glu::Texture2D(renderCtx, texFormat, type, size.x(), size.y())); 22706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 22806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 22906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static de::MovePtr<glu::Texture2D> createTextureFromCompressedData (glu::RenderContext& renderCtx, 23006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glu::ContextInfo& ctxInfo, 23106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::CompressedTexture& compressedLevel, 23206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexDecompressionParams& decompressionParams) 23306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 23406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return de::MovePtr<glu::Texture2D>(new glu::Texture2D(renderCtx, 23506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ctxInfo, 23606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1, 23706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &compressedLevel, 23806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry decompressionParams)); 23906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 24006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 24106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static int getTextureNumLayers (const tcu::IVec2& size) 24206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 24306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // 2D textures have one layer 24406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_UNREF(size); 24506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return 1; 24606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 24706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 24806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 24906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytemplate <> 25006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrystruct TextureTraits<glu::Texture3D> 25106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 25206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry typedef tcu::IVec3 SizeType; 25306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 25406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static de::MovePtr<glu::Texture3D> createTextureFromInternalFormat (glu::RenderContext& renderCtx, deUint32 texFormat, const tcu::IVec3& size) 25506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 25606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return de::MovePtr<glu::Texture3D>(new glu::Texture3D(renderCtx, texFormat, size.x(), size.y(), size.z())); 25706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 25806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 25906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static de::MovePtr<glu::Texture3D> createTextureFromFormatAndType (glu::RenderContext& renderCtx, deUint32 texFormat, deUint32 type, const tcu::IVec3& size) 26006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 26106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return de::MovePtr<glu::Texture3D>(new glu::Texture3D(renderCtx, texFormat, type, size.x(), size.y(), size.z())); 26206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 26306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 26406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static de::MovePtr<glu::Texture3D> createTextureFromCompressedData (glu::RenderContext& renderCtx, 26506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glu::ContextInfo& ctxInfo, 26606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::CompressedTexture& compressedLevel, 26706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexDecompressionParams& decompressionParams) 26806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 26906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return de::MovePtr<glu::Texture3D>(new glu::Texture3D(renderCtx, 27006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ctxInfo, 27106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1, 27206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &compressedLevel, 27306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry decompressionParams)); 27406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 27506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 27606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static int getTextureNumLayers (const tcu::IVec3& size) 27706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 27806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // 3D textures have Z layers 27906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return size.z(); 28006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 28106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 28206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 28306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytemplate <typename T> 28406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryde::MovePtr<T> genDummyTexture (glu::RenderContext& renderCtx, const glu::ContextInfo& ctxInfo, deUint32 texFormat, const typename TextureTraits<T>::SizeType& size) 28506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 28606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<T> texture; 28706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 28806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isDepthFormat(texFormat, tcu::Sampler::MODE_DEPTH) || isStencilFormat(texFormat, tcu::Sampler::MODE_STENCIL)) 28906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 29006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // fill different channels with different gradients 29106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture = TextureTraits<T>::createTextureFromInternalFormat(renderCtx, texFormat, size); 29206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture->getRefTexture().allocLevel(0); 29306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 29406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isDepthFormat(texFormat, tcu::Sampler::MODE_DEPTH)) 29506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 29606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // fill depth with 0 -> 1 29706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelBufferAccess depthAccess = tcu::getEffectiveDepthStencilAccess(texture->getRefTexture().getLevel(0), tcu::Sampler::MODE_DEPTH); 29806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::fillWithComponentGradients(depthAccess, tcu::Vec4(0.0f), tcu::Vec4(1.0f)); 29906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 30006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 30106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isStencilFormat(texFormat, tcu::Sampler::MODE_STENCIL)) 30206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 30306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // fill stencil with 0 -> max 30406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelBufferAccess stencilAccess = tcu::getEffectiveDepthStencilAccess(texture->getRefTexture().getLevel(0), tcu::Sampler::MODE_STENCIL); 30506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(stencilAccess.getFormat()); 30606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 30706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Flip y to make stencil and depth cases not look identical 30806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::fillWithComponentGradients(tcu::flipYAccess(stencilAccess), texFormatInfo.valueMax, texFormatInfo.valueMin); 30906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 31006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 31106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture->upload(); 31206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 31306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (!glu::isCompressedFormat(texFormat)) 31406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 31506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (texFormat == GL_LUMINANCE || texFormat == GL_LUMINANCE_ALPHA || texFormat == GL_ALPHA || texFormat == GL_BGRA) 31606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture = TextureTraits<T>::createTextureFromFormatAndType(renderCtx, texFormat, GL_UNSIGNED_BYTE, size); 31706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 31806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture = TextureTraits<T>::createTextureFromInternalFormat(renderCtx, texFormat, size); 31906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 32006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Fill level 0. 32106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture->getRefTexture().allocLevel(0); 32206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 32306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // fill with gradient min -> max 32406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 32506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(texture->getRefTexture().getFormat()); 32606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 rampLow = texFormatInfo.valueMin; 32706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 rampHigh = texFormatInfo.valueMax; 32806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::fillWithComponentGradients(texture->getRefTexture().getLevel(0), rampLow, rampHigh); 32906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 33006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 33106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture->upload(); 33206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 33306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 33406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 33506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::CompressedTexFormat compressedFormat = glu::mapGLCompressedTexFormat(texFormat); 33606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int numLayers = TextureTraits<T>::getTextureNumLayers(size); 33706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::CompressedTexture compressedLevel (compressedFormat, size.x(), size.y(), numLayers); 33806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isAstcFormat = tcu::isAstcFormat(compressedFormat); 33906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TexDecompressionParams decompressionParams ((isAstcFormat) ? (tcu::TexDecompressionParams::ASTCMODE_LDR) : (tcu::TexDecompressionParams::ASTCMODE_LAST)); 34006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 34106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry generateDummyCompressedData(compressedLevel, compressedFormat); 34206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 34306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texture = TextureTraits<T>::createTextureFromCompressedData(renderCtx, 34406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ctxInfo, 34506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry compressedLevel, 34606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry decompressionParams); 34706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 34806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 34906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return texture; 35006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 35106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 35206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint getNBitIntegerMaxValue (bool isSigned, int numBits) 35306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 35406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(numBits < 32); 35506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 35606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numBits == 0) 35706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return 0; 35806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (isSigned) 35906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return deIntMaxValue32(numBits); 36006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 36106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return deUintMaxValue32(numBits); 36206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 36306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 36406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint getNBitIntegerMinValue (bool isSigned, int numBits) 36506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 36606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(numBits < 32); 36706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 36806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numBits == 0) 36906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return 0; 37006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (isSigned) 37106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return deIntMinValue32(numBits); 37206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 37306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return 0; 37406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 37506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 37606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytcu::IVec4 getNBitIntegerVec4MaxValue (bool isSigned, const tcu::IVec4& numBits) 37706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 37806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return tcu::IVec4(getNBitIntegerMaxValue(isSigned, numBits[0]), 37906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getNBitIntegerMaxValue(isSigned, numBits[1]), 38006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getNBitIntegerMaxValue(isSigned, numBits[2]), 38106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getNBitIntegerMaxValue(isSigned, numBits[3])); 38206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 38306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 38406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytcu::IVec4 getNBitIntegerVec4MinValue (bool isSigned, const tcu::IVec4& numBits) 38506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 38606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return tcu::IVec4(getNBitIntegerMinValue(isSigned, numBits[0]), 38706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getNBitIntegerMinValue(isSigned, numBits[1]), 38806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getNBitIntegerMinValue(isSigned, numBits[2]), 38906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry getNBitIntegerMinValue(isSigned, numBits[3])); 39006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 39106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 39206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryrr::GenericVec4 mapToFormatColorUnits (const tcu::TextureFormat& texFormat, const tcu::Vec4& normalizedRange) 39306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 39406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(texFormat); 39506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 39606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (tcu::getTextureChannelClass(texFormat.type)) 39706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 39806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: return rr::GenericVec4(normalizedRange); 39906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: return rr::GenericVec4(normalizedRange * 2.0f - 1.0f); 40006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: return rr::GenericVec4(texFormatInfo.valueMin + normalizedRange * texFormatInfo.valueMax); 40106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: return rr::GenericVec4(tcu::mix(texFormatInfo.valueMin, texFormatInfo.valueMax, normalizedRange).cast<deInt32>()); 40206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: return rr::GenericVec4(tcu::mix(texFormatInfo.valueMin, texFormatInfo.valueMax, normalizedRange).cast<deUint32>()); 40306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 40406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 40506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 40606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return rr::GenericVec4(); 40706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 40806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 40906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 41006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryrr::GenericVec4 mapToFormatColorRepresentable (const tcu::TextureFormat& texFormat, const tcu::Vec4& normalizedRange) 41106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 41206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // make sure value is representable in the target format and clear channels 41306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // not present in the target format. 41406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 41506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const rr::GenericVec4 inFormatUnits = mapToFormatColorUnits(texFormat, normalizedRange); 41606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::BVec4 channelMask = tcu::getTextureFormatChannelMask(texFormat); 41706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::ArrayBuffer<deUint8, 4> buffer (texFormat.getPixelSize()); 41806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::PixelBufferAccess access (texFormat, tcu::IVec3(1, 1, 1), buffer.getPtr()); 41906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 420d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry if (tcu::isSRGB(texFormat)) 421d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry { 422d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry DE_ASSERT(texFormat.type == tcu::TextureFormat::UNORM_INT8); 423d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry 424d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry // make sure border color (in linear space) can be converted to 8-bit sRGB space without 425d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry // significant loss. 426d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry const tcu::Vec4 sRGB = tcu::linearToSRGB(normalizedRange); 427d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry const tcu::IVec4 sRGB8 = tcu::IVec4(tcu::floatToU8(sRGB[0]), 428d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry tcu::floatToU8(sRGB[1]), 429d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry tcu::floatToU8(sRGB[2]), 430d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry tcu::floatToU8(sRGB[3])); 4317a161d243743d8d12e12669d7464c360de1b5e97Jarkko Pöyry const tcu::Vec4 linearized = tcu::sRGBToLinear(tcu::Vec4((float)sRGB8[0] / 255.0f, 4327a161d243743d8d12e12669d7464c360de1b5e97Jarkko Pöyry (float)sRGB8[1] / 255.0f, 4337a161d243743d8d12e12669d7464c360de1b5e97Jarkko Pöyry (float)sRGB8[2] / 255.0f, 4347a161d243743d8d12e12669d7464c360de1b5e97Jarkko Pöyry (float)sRGB8[3] / 255.0f)); 435d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry 436d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry return rr::GenericVec4(tcu::select(linearized, tcu::Vec4(0.0f), channelMask)); 437d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry } 438d5be8ad612a000b4ad2caf14c8d93501f3558eb8Jarkko Pöyry 43906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (tcu::getTextureChannelClass(texFormat.type)) 44006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 44106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: 44206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: 44306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: 44406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 44506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry access.setPixel(inFormatUnits.get<float>(), 0, 0); 44606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return rr::GenericVec4(tcu::select(access.getPixel(0, 0), tcu::Vec4(0.0f), channelMask)); 44706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 44806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: 44906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 45006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry access.setPixel(inFormatUnits.get<deInt32>(), 0, 0); 45106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return rr::GenericVec4(tcu::select(access.getPixelInt(0, 0), tcu::IVec4(0), channelMask)); 45206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 45306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: 45406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 45506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry access.setPixel(inFormatUnits.get<deUint32>(), 0, 0); 45606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return rr::GenericVec4(tcu::select(access.getPixelUint(0, 0), tcu::UVec4(0u), channelMask)); 45706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 45806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 45906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 46006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 46106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return rr::GenericVec4(); 46206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 46306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 46406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 46506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 46606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool isCoreFilterableFormat (deUint32 format, tcu::Sampler::DepthStencilMode mode) 46706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 46806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isLuminanceOrAlpha = (format == GL_LUMINANCE || format == GL_ALPHA || format == GL_LUMINANCE_ALPHA); // special case for luminance/alpha 46906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isUnsizedColorFormat = (format == GL_BGRA); 47006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isCompressed = glu::isCompressedFormat(format); 47106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isDepth = isDepthFormat(format, mode); 47206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isStencil = isStencilFormat(format, mode); 47306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 47406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // special cases 47506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isLuminanceOrAlpha || isUnsizedColorFormat || isCompressed) 47606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return true; 47706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isStencil || isDepth) 47806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return false; 47906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 48006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // color case 48106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return glu::isGLInternalColorFormatFilterable(format); 48206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 48306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 48406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampTest : public TestCase 48506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 48606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 48706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry enum StateType 48806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 48906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry STATE_SAMPLER_PARAM = 0, 49006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry STATE_TEXTURE_PARAM, 49106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 49206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry STATE_LAST 49306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 49406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 49506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry enum SamplingFunction 49606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 49706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SAMPLE_FILTER = 0, 49806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SAMPLE_GATHER, 49906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 50006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SAMPLE_LAST 50106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 50206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 50306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry enum Flag 50406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 50506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry FLAG_USE_SHADOW_SAMPLER = (1u << 0), 50606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 50706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 50806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry struct IterationConfig 50906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 51006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2 p0; 51106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2 p1; 51206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry rr::GenericVec4 borderColor; 51306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec4 lookupScale; 51406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec4 lookupBias; 51506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 minFilter; 51606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 magFilter; 51706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::string description; 51806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 sWrapMode; 51906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 tWrapMode; 52006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 compareMode; 52106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry float compareRef; 52206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 52306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 52406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest (Context& context, 52506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 52606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 52706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 52806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 52906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry StateType stateType, 53006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int texWidth, 53106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int texHeight, 53206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction, 53306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 flags = 0); 53406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ~TextureBorderClampTest (void); 53506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 53606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprotected: 53706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 53806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void deinit (void); 53906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 54006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 54106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterateResult iterate (void); 54206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 54306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void logParams (const IterationConfig& config, 544c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams); 54506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 54606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void renderTo (tcu::Surface& surface, 54706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const IterationConfig& config, 548c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams); 54906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void renderQuad (const float* texCoord, 550c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams); 55106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 55206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void verifyImage (const tcu::Surface& image, 55306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const IterationConfig& config, 554c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams); 55506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 55606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool verifyTextureSampleResult (const tcu::ConstPixelBufferAccess& renderedFrame, 55706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoord, 558c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 55906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LodPrecision& lodPrecision, 56006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LookupPrecision& lookupPrecision); 56106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 562653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos bool verifyTextureCompareResult (const tcu::ConstPixelBufferAccess& renderedFrame, 56306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoord, 564c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 56506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& texComparePrecision, 56606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& lowQualityTexComparePrecision, 56706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LodPrecision& lodPrecision, 56806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LodPrecision& lowQualityLodPrecision); 56906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 57006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool verifyTextureGatherResult (const tcu::ConstPixelBufferAccess& renderedFrame, 57106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoord, 572c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 57306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LookupPrecision& lookupPrecision); 57406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 57506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool verifyTextureGatherCmpResult(const tcu::ConstPixelBufferAccess& renderedFrame, 57606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoord, 577c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 57806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& texComparePrecision, 57906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& lowQualityTexComparePrecision); 58006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 58106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 getIterationSeed (const IterationConfig& config) const; 582c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::ReferenceParams genSamplerParams (const IterationConfig& config) const; 58306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::ShaderProgram* genGatherProgram (void) const; 58406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 58506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry virtual int getNumIterations (void) const = 0; 58606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry virtual IterationConfig getIteration (int ndx) const = 0; 58706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 58806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprotected: 58906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glu::Texture2D* getTexture (void) const; 59006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 59106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_texFormat; 59206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Sampler::DepthStencilMode m_sampleMode; 59306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureChannelClass m_channelClass; 59406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const StateType m_stateType; 59506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 59606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int m_texHeight; 59706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int m_texWidth; 59806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 59906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const SamplingFunction m_samplingFunction; 60006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool m_useShadowSampler; 60106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 60206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry enum 60306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 60406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry VIEWPORT_WIDTH = 128, 60506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry VIEWPORT_HEIGHT = 128, 60606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 60706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 60806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<glu::Texture2D> m_texture; 60906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<gls::TextureTestUtil::TextureRenderer> m_renderer; 61006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<glu::ShaderProgram> m_gatherProgram; 61106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 61206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int m_iterationNdx; 61306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::ResultCollector m_result; 61406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 61506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 61606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::TextureBorderClampTest (Context& context, 61706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 61806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 61906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 62006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 62106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry StateType stateType, 62206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int texWidth, 62306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int texHeight, 62406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction, 62506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 flags) 62606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TestCase (context, name, description) 62706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_texFormat (texFormat) 62806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_sampleMode (mode) 62906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_channelClass (getFormatChannelClass(texFormat, mode)) 63006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_stateType (stateType) 63106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_texHeight (texHeight) 63206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_texWidth (texWidth) 63306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_samplingFunction (samplingFunction) 63406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_useShadowSampler ((flags & FLAG_USE_SHADOW_SAMPLER) != 0) 63506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_iterationNdx (0) 63606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_result (context.getTestContext().getLog()) 63706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 63806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(stateType < STATE_LAST); 63906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(samplingFunction < SAMPLE_LAST); 64006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // mode must be set for combined depth-stencil formats 64106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(m_channelClass != tcu::TEXTURECHANNELCLASS_LAST || mode != tcu::Sampler::MODE_LAST); 64206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 64306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 64406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::~TextureBorderClampTest (void) 64506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 64606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deinit(); 64706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 64806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 64906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampTest::init (void) 65006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 65106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // requirements 652f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)); 65306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 654f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_border_clamp")) 65506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_border_clamp extension"); 65606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 65706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (glu::isCompressedFormat(m_texFormat) && 658f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe !supportsES32 && 65906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::isAstcFormat(glu::mapGLCompressedTexFormat(m_texFormat)) && 66006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry !m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_ldr")) 66106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 66206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires GL_KHR_texture_compression_astc_ldr extension"); 66306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 66406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 66506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_texFormat == GL_BGRA && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_format_BGRA8888")) 66606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_format_BGRA8888 extension"); 66706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 66806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_context.getRenderTarget().getWidth() < VIEWPORT_WIDTH || 66906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_context.getRenderTarget().getHeight() < VIEWPORT_HEIGHT) 67006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 67106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires " + de::toString<int>(VIEWPORT_WIDTH) + "x" + de::toString<int>(VIEWPORT_HEIGHT) + " viewport"); 67206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 67306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 67406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // resources 67506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 67606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texture = genDummyTexture<glu::Texture2D>(m_context.getRenderContext(), m_context.getContextInfo(), m_texFormat, tcu::IVec2(m_texWidth, m_texHeight)); 67706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 67806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 679b2e583dfcd8aa0d4ef254f841213fcf724b2b193Jarkko Pöyry << "Created texture with format " << glu::getTextureFormatName(m_texFormat) 68006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ", size (" << m_texture->getRefTexture().getWidth() << ", " << m_texture->getRefTexture().getHeight() << ")\n" 68106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Setting sampling state using " << ((m_stateType == STATE_TEXTURE_PARAM) ? ("texture state") : ("sampler state")) 68206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 68306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 68406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_FILTER) 68506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 686f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe const glu::GLSLVersion glslVersion = glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType()); 687f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe 688f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe m_renderer = de::MovePtr<gls::TextureTestUtil::TextureRenderer>(new gls::TextureTestUtil::TextureRenderer(m_context.getRenderContext(), m_testCtx.getLog(), glslVersion, glu::PRECISION_HIGHP)); 68906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 69006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 69106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 69206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_gatherProgram = de::MovePtr<glu::ShaderProgram>(genGatherProgram()); 69306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 69406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 69506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Using texture gather to sample texture" 69606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage 69706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << *m_gatherProgram; 69806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 69906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!m_gatherProgram->isOk()) 70006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::TestError("failed to build program"); 70106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 70206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 70306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 70406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampTest::deinit (void) 70506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 70606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texture.clear(); 70706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_renderer.clear(); 70806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_gatherProgram.clear(); 70906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 71006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 71106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::IterateResult TextureBorderClampTest::iterate (void) 71206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 71306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const IterationConfig iterationConfig = getIteration(m_iterationNdx); 71406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const std::string iterationDesc = "Iteration " + de::toString(m_iterationNdx+1) + (iterationConfig.description.empty() ? ("") : (" - " + iterationConfig.description)); 71506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::ScopedLogSection section (m_testCtx.getLog(), "Iteration", iterationDesc); 71606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface renderedFrame (VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 717c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams samplerParams = genSamplerParams(iterationConfig); 71806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 71906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry logParams(iterationConfig, samplerParams); 72006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry renderTo(renderedFrame, iterationConfig, samplerParams); 72106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verifyImage(renderedFrame, iterationConfig, samplerParams); 72206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 72306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (++m_iterationNdx == getNumIterations()) 72406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 72506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_result.setTestContextResult(m_testCtx); 72606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return STOP; 72706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 72806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return CONTINUE; 72906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 73006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 731c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siketvoid TextureBorderClampTest::logParams (const IterationConfig& config, const glu::TextureTestUtil::ReferenceParams& samplerParams) 73206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 73306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const std::string borderColorString = (m_channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER) ? (de::toString(config.borderColor.get<deInt32>())) 73406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (m_channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER) ? (de::toString(config.borderColor.get<deUint32>())) 73506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (de::toString(config.borderColor.get<float>())); 73606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 73706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 73806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Rendering full screen quad, tex coords bottom-left: " << config.p0 << ", top-right " << config.p1 << "\n" 73906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Border color is " << borderColorString << "\n" 74006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Texture lookup bias: " << samplerParams.colorBias << "\n" 74106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Texture lookup scale: " << samplerParams.colorScale << "\n" 74206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Filters: min = " << glu::getTextureFilterName(glu::getGLFilterMode(samplerParams.sampler.minFilter)) 74306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ", mag = " << glu::getTextureFilterName(glu::getGLFilterMode(samplerParams.sampler.magFilter)) << "\n" 74406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Wrap mode: s = " << glu::getRepeatModeStr(config.sWrapMode) 74506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ", t = " << glu::getRepeatModeStr(config.tWrapMode) << "\n" 74606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 74706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 74806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_sampleMode == tcu::Sampler::MODE_DEPTH) 74906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "Depth stencil texture mode is DEPTH_COMPONENT" << tcu::TestLog::EndMessage; 75006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (m_sampleMode == tcu::Sampler::MODE_STENCIL) 75106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "Depth stencil texture mode is STENCIL_INDEX" << tcu::TestLog::EndMessage; 75206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 75306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (config.compareMode != GL_NONE) 75406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 75506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 75606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Texture mode is COMPARE_REF_TO_TEXTURE, mode = " << glu::getCompareFuncStr(config.compareMode) << "\n" 75706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Compare reference value = " << config.compareRef << "\n" 75806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 75906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 76006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 76106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 76206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampTest::renderTo (tcu::Surface& surface, 76306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const IterationConfig& config, 764c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams) 76506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 76606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 76706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const gls::TextureTestUtil::RandomViewport viewport (m_context.getRenderTarget(), VIEWPORT_WIDTH, VIEWPORT_HEIGHT, getIterationSeed(config)); 76806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<float> texCoord; 76906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<glu::Sampler> sampler; 77006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 771c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::computeQuadTexCoord2D(texCoord, config.p0, config.p1); 77206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 77306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Bind to unit 0. 77406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.activeTexture(GL_TEXTURE0); 77506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.bindTexture(GL_TEXTURE_2D, m_texture->getGLTexture()); 77606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 77706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_sampleMode == tcu::Sampler::MODE_DEPTH) 77806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_DEPTH_COMPONENT); 77906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (m_sampleMode == tcu::Sampler::MODE_STENCIL) 78006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_DEPTH_STENCIL_TEXTURE_MODE, GL_STENCIL_INDEX); 78106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 78206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (config.compareMode == GL_NONE) 78306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 78406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE); 78506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_ALWAYS); 78606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 78706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 78806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 78906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); 79006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, config.compareMode); 79106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 79206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 79306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_stateType == STATE_TEXTURE_PARAM) 79406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 79506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Setup filtering and wrap modes. 79606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glu::getGLWrapMode(samplerParams.sampler.wrapS)); 79706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glu::getGLWrapMode(samplerParams.sampler.wrapT)); 79806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, glu::getGLFilterMode(samplerParams.sampler.minFilter)); 79906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, glu::getGLFilterMode(samplerParams.sampler.magFilter)); 80006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 80106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (m_channelClass) 80206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 80306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: 80406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: 80506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: 80606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, config.borderColor.getAccess<float>()); 80706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 80806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 80906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: 81006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterIiv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, config.borderColor.getAccess<deInt32>()); 81106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 81206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 81306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: 81406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterIuiv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, config.borderColor.getAccess<deUint32>()); 81506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 81606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 81706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 81806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 81906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 82006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 82106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (m_stateType == STATE_SAMPLER_PARAM) 82206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 82306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 blue(0.0f, 0.0f, 1.0f, 1.0f); 82406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 82506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Setup filtering and wrap modes to bad values 82606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 82706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 82806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 82906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 83006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, blue.getPtr()); // just set some unlikely color 83106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 83206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // setup sampler to correct values 83306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry sampler = de::MovePtr<glu::Sampler>(new glu::Sampler(m_context.getRenderContext())); 83406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 83506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameteri(**sampler, GL_TEXTURE_WRAP_S, glu::getGLWrapMode(samplerParams.sampler.wrapS)); 83606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameteri(**sampler, GL_TEXTURE_WRAP_T, glu::getGLWrapMode(samplerParams.sampler.wrapT)); 83706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameteri(**sampler, GL_TEXTURE_MIN_FILTER, glu::getGLFilterMode(samplerParams.sampler.minFilter)); 83806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameteri(**sampler, GL_TEXTURE_MAG_FILTER, glu::getGLFilterMode(samplerParams.sampler.magFilter)); 83906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 84006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (m_channelClass) 84106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 84206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: 84306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: 84406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: 84506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameterfv(**sampler, GL_TEXTURE_BORDER_COLOR, config.borderColor.getAccess<float>()); 84606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 84706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 84806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: 84906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameterIiv(**sampler, GL_TEXTURE_BORDER_COLOR, config.borderColor.getAccess<deInt32>()); 85006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 85106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 85206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: 85306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.samplerParameterIuiv(**sampler, GL_TEXTURE_BORDER_COLOR, config.borderColor.getAccess<deUint32>()); 85406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 85506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 85606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 85706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 85806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 85906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 86006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.bindSampler(0, **sampler); 86106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 86206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 86306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry GLU_EXPECT_NO_ERROR(gl.getError(), "Set texturing state"); 86406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 86506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height); 86606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry renderQuad(&texCoord[0], samplerParams); 86706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::readPixels(m_context.getRenderContext(), viewport.x, viewport.y, surface.getAccess()); 86806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 86906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 870c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siketvoid TextureBorderClampTest::renderQuad (const float* texCoord, const glu::TextureTestUtil::ReferenceParams& samplerParams) 87106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 87206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // use TextureRenderer for basic rendering, use custom for gather 87306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_FILTER) 87406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_renderer->renderQuad(0, texCoord, samplerParams); 87506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 87606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 87706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const float position[] = 87806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 87906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry -1.0f, -1.0f, 0.0f, 1.0f, 88006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry -1.0f, +1.0f, 0.0f, 1.0f, 88106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry +1.0f, -1.0f, 0.0f, 1.0f, 88206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry +1.0f, +1.0f, 0.0f, 1.0f 88306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 88406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const deUint16 indices[] = 88506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 88606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 0, 1, 2, 2, 1, 3 88706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 88806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glu::VertexArrayBinding vertexArrays[] = 88906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 89006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::va::Float("a_position", 4, 4, 0, &position[0]), 89106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::va::Float("a_texcoord", 2, 4, 0, texCoord) 89206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 89306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 89406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 89506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 progId = m_gatherProgram->getProgram(); 89606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 89706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.useProgram(progId); 89806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.uniform1i(gl.getUniformLocation(progId, "u_sampler"), 0); 89906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_useShadowSampler) 90006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.uniform1f(gl.getUniformLocation(progId, "u_ref"), samplerParams.ref); 90106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.uniform4fv(gl.getUniformLocation(progId, "u_colorScale"), 1, samplerParams.colorScale.getPtr()); 90206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.uniform4fv(gl.getUniformLocation(progId, "u_colorBias"), 1, samplerParams.colorBias.getPtr()); 90306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 90406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::draw(m_context.getRenderContext(), progId, DE_LENGTH_OF_ARRAY(vertexArrays), &vertexArrays[0], 90506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::pr::Triangles(DE_LENGTH_OF_ARRAY(indices), &indices[0])); 90606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 90706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 90806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 90906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampTest::verifyImage (const tcu::Surface& renderedFrame, 91006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const IterationConfig& config, 911c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams) 91206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 91306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelFormat pixelFormat = m_context.getRenderTarget().getPixelFormat(); 91406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 915433645782506cbdf8fa8b113ea0b5aa8ae761f0cPyry Haulos tcu::LodPrecision lodPrecision; 91606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<float> texCoord; 91706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool verificationOk; 91806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 919c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::computeQuadTexCoord2D(texCoord, config.p0, config.p1); 92006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 92106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lodPrecision.derivateBits = 18; 92206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lodPrecision.lodBits = 5; 92306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 92406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (samplerParams.sampler.compare == tcu::Sampler::COMPAREMODE_NONE) 92506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 92606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = tcu::getEffectiveDepthStencilTextureFormat(m_texture->getRefTexture().getFormat(), m_sampleMode); 92706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isNearestMinFilter = samplerParams.sampler.minFilter == tcu::Sampler::NEAREST || samplerParams.sampler.minFilter == tcu::Sampler::NEAREST_MIPMAP_NEAREST; 92806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isNearestMagFilter = samplerParams.sampler.magFilter == tcu::Sampler::NEAREST; 92906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isNearestOnly = isNearestMinFilter && isNearestMagFilter; 93006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isSRGB = texFormat.order == tcu::TextureFormat::sRGB || texFormat.order == tcu::TextureFormat::sRGBA; 93106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int colorErrorBits = (isNearestOnly && !isSRGB) ? (1) : (2); 932c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const tcu::IVec4 colorBits = tcu::max(glu::TextureTestUtil::getBitsVec(pixelFormat) - tcu::IVec4(colorErrorBits), tcu::IVec4(0)); 93306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::LookupPrecision lookupPrecision; 93406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 93506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.colorThreshold = tcu::computeFixedPointThreshold(colorBits) / samplerParams.colorScale; 93606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.coordBits = tcu::IVec3(20,20,0); 93706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.uvwBits = tcu::IVec3(5,5,0); 938c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket lookupPrecision.colorMask = glu::TextureTestUtil::getCompareMask(pixelFormat); 93906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 94006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_FILTER) 94106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 94206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verificationOk = verifyTextureSampleResult(renderedFrame.getAccess(), 94306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &texCoord[0], 94406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerParams, 94506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lodPrecision, 94606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision); 94706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 94806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (m_samplingFunction == SAMPLE_GATHER) 94906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 95006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verificationOk = verifyTextureGatherResult(renderedFrame.getAccess(), 95106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &texCoord[0], 95206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerParams, 95306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision); 95406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 95506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 95606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 95706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 95806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verificationOk = false; 95906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 96006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 96106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 96206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 963653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos tcu::TexComparePrecision texComparePrecision; 96406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TexComparePrecision lowQualityTexComparePrecision; 965653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos tcu::LodPrecision lowQualityLodPrecision = lodPrecision; 96606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 96706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision.coordBits = tcu::IVec3(20,20,0); 96806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision.uvwBits = tcu::IVec3(7,7,0); 96906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision.pcfBits = 5; 97006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision.referenceBits = 16; 97106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision.resultBits = de::max(0, pixelFormat.redBits - 1); 97206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 97306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision.coordBits = tcu::IVec3(20,20,0); 97406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision.uvwBits = tcu::IVec3(4,4,0); 97506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision.pcfBits = 0; 97606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision.referenceBits = 16; 97706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision.resultBits = de::max(0, pixelFormat.redBits - 1); 97806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 97906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityLodPrecision.lodBits = 4; 98006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 98106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_FILTER) 98206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 98306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verificationOk = verifyTextureCompareResult(renderedFrame.getAccess(), 98406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &texCoord[0], 98506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerParams, 98606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision, 98706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision, 98806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lodPrecision, 98906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityLodPrecision); 99006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 99106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (m_samplingFunction == SAMPLE_GATHER) 99206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 99306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verificationOk = verifyTextureGatherCmpResult(renderedFrame.getAccess(), 99406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &texCoord[0], 99506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerParams, 99606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texComparePrecision, 99706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQualityTexComparePrecision); 99806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 99906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 100006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 100106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 100206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verificationOk = false; 100306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 100406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 100506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 100606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!verificationOk) 100706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_result.fail("Image verification failed"); 100806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 100906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 101006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool TextureBorderClampTest::verifyTextureSampleResult (const tcu::ConstPixelBufferAccess& renderedFrame, 101106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoord, 1012c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 101306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LodPrecision& lodPrecision, 101406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LookupPrecision& lookupPrecision) 101506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 101606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelFormat pixelFormat = m_context.getRenderTarget().getPixelFormat(); 101706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface reference (renderedFrame.getWidth(), renderedFrame.getHeight()); 101806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface errorMask (renderedFrame.getWidth(), renderedFrame.getHeight()); 101906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int numFailedPixels; 102006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1021c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::sampleTexture(tcu::SurfaceAccess(reference, pixelFormat), m_texture->getRefTexture(), texCoord, samplerParams); 102206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1023c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket numFailedPixels = glu::TextureTestUtil::computeTextureLookupDiff(renderedFrame, reference.getAccess(), errorMask.getAccess(), m_texture->getRefTexture(), 102406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texCoord, samplerParams, lookupPrecision, lodPrecision, m_testCtx.getWatchDog()); 102506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 102606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 102706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Result verification failed, got " << numFailedPixels << " invalid pixels!" << tcu::TestLog::EndMessage; 102806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::ImageSet("VerifyResult", "Verification result") 102906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("Rendered", "Rendered image", renderedFrame); 103006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 103106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 103206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Image("Reference", "Ideal reference image", reference) 103306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("ErrorMask", "Error mask", errorMask); 103406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 103506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::EndImageSet; 103606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 103706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (numFailedPixels == 0); 103806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 103906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 104006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool TextureBorderClampTest::verifyTextureCompareResult (const tcu::ConstPixelBufferAccess& renderedFrame, 104106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoord, 1042c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 104306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& texComparePrecision, 104406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& lowQualityTexComparePrecision, 104506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LodPrecision& lodPrecision, 104606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LodPrecision& lowQualityLodPrecision) 104706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 104806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelFormat pixelFormat = m_context.getRenderTarget().getPixelFormat(); 104906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int colorErrorBits = 1; 1050c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const tcu::IVec4 nonShadowBits = tcu::max(glu::TextureTestUtil::getBitsVec(pixelFormat) - tcu::IVec4(colorErrorBits), tcu::IVec4(0)); 105106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec3 nonShadowThreshold = tcu::computeFixedPointThreshold(nonShadowBits).swizzle(1,2,3); 105206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<tcu::ConstPixelBufferAccess> srcLevelStorage; 105306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Texture2DView effectiveView = tcu::getEffectiveTextureView(m_texture->getRefTexture(), srcLevelStorage, samplerParams.sampler); 105406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface reference (renderedFrame.getWidth(), renderedFrame.getHeight()); 105506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface errorMask (renderedFrame.getWidth(), renderedFrame.getHeight()); 105606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int numFailedPixels; 105706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1058c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::sampleTexture(tcu::SurfaceAccess(reference, pixelFormat), effectiveView, texCoord, samplerParams); 105906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1060c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket numFailedPixels = glu::TextureTestUtil::computeTextureCompareDiff(renderedFrame, reference.getAccess(), errorMask.getAccess(), effectiveView, 106106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texCoord, samplerParams, texComparePrecision, lodPrecision, nonShadowThreshold); 106206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 106306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 106406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 106506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 106606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Warning: Verification assuming high-quality PCF filtering failed." 106706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 106806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1069c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket numFailedPixels = glu::TextureTestUtil::computeTextureCompareDiff(renderedFrame, reference.getAccess(), errorMask.getAccess(), effectiveView, 107006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texCoord, samplerParams, lowQualityTexComparePrecision, lowQualityLodPrecision, nonShadowThreshold); 107106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 107206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 107306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Verification against low precision requirements failed, failing test case." << tcu::TestLog::EndMessage; 107406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (m_testCtx.getTestResult() == QP_TEST_RESULT_PASS) 107506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_result.addResult(QP_TEST_RESULT_QUALITY_WARNING, "Low-quality result"); 107606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 107706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 107806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 107906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Result verification failed, got " << numFailedPixels << " invalid pixels!" << tcu::TestLog::EndMessage; 108006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::ImageSet("VerifyResult", "Verification result") 108106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("Rendered", "Rendered image", renderedFrame); 108206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 108306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 108406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Image("Reference", "Ideal reference image", reference) 108506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("ErrorMask", "Error mask", errorMask); 108606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 108706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::EndImageSet; 108806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 108906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (numFailedPixels == 0); 109006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 109106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 109206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrytemplate <typename T> 109306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrystatic inline T triQuadInterpolate (const T (&values)[4], float xFactor, float yFactor) 109406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 109506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (xFactor + yFactor < 1.0f) 109606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return values[0] + (values[2]-values[0])*xFactor + (values[1]-values[0])*yFactor; 109706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 109806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return values[3] + (values[1]-values[3])*(1.0f-xFactor) + (values[2]-values[3])*(1.0f-yFactor); 109906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 110006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 110106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool TextureBorderClampTest::verifyTextureGatherResult (const tcu::ConstPixelBufferAccess& renderedFrame, 110206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoordArray, 1103c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 110406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::LookupPrecision& lookupPrecision) 110506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 110606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec2 texCoords[4] = 110706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 110806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[0], texCoordArray[1]), 110906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[2], texCoordArray[3]), 111006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[4], texCoordArray[5]), 111106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[6], texCoordArray[7]), 111206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 111306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 111406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelFormat pixelFormat = m_context.getRenderTarget().getPixelFormat(); 1115c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const deUint8 fbColormask = tcu::getColorMask(pixelFormat); 111606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 111706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<tcu::ConstPixelBufferAccess> srcLevelStorage; 111806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Texture2DView effectiveView = tcu::getEffectiveTextureView(m_texture->getRefTexture(), srcLevelStorage, samplerParams.sampler); 111906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 112006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface reference (renderedFrame.getWidth(), renderedFrame.getHeight()); 112106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface errorMask (renderedFrame.getWidth(), renderedFrame.getHeight()); 112206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int numFailedPixels = 0; 112306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1124c215aaa83047ebbaabafef7acd71275a256da6abDejan Mircevski tcu::clear(errorMask.getAccess(), tcu::RGBA::green().toVec()); 112506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 112606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int py = 0; py < reference.getHeight(); ++py) 112706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int px = 0; px < reference.getWidth(); ++px) 112806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 112906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec2 viewportCoord = (tcu::Vec2((float)px, (float)py) + tcu::Vec2(0.5f)) / tcu::Vec2((float)reference.getWidth(), (float)reference.getHeight()); 113006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec2 texCoord = triQuadInterpolate(texCoords, viewportCoord.x(), viewportCoord.y()); 113106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 referenceValue = effectiveView.gatherOffsets(samplerParams.sampler, texCoord.x(), texCoord.y(), 0, glu::getDefaultGatherOffsets()); 113206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 referencePixel = referenceValue * samplerParams.colorScale + samplerParams.colorBias; 113306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 resultPixel = renderedFrame.getPixel(px, py); 113406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 resultValue = (resultPixel - samplerParams.colorBias) / samplerParams.colorScale; 113506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1136c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket reference.setPixel(px, py, tcu::toRGBAMasked(referenceValue, fbColormask)); 113706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 113806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (tcu::boolAny(tcu::logicalAnd(lookupPrecision.colorMask, 113906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::greaterThan(tcu::absDiff(resultPixel, referencePixel), 114006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.colorThreshold)))) 114106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 114206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!tcu::isGatherOffsetsResultValid(effectiveView, samplerParams.sampler, lookupPrecision, texCoord, 0, glu::getDefaultGatherOffsets(), resultValue)) 114306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 1144c215aaa83047ebbaabafef7acd71275a256da6abDejan Mircevski errorMask.setPixel(px, py, tcu::RGBA::red()); 114506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ++numFailedPixels; 114606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 114706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 114806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 114906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 115006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 115106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Result verification failed, got " << numFailedPixels << " invalid pixels!" << tcu::TestLog::EndMessage; 115206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::ImageSet("VerifyResult", "Verification result") 115306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("Rendered", "Rendered image", renderedFrame); 115406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 115506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 115606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Image("Reference", "Ideal reference image", reference) 115706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("ErrorMask", "Error mask", errorMask); 115806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 115906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::EndImageSet; 116006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 116106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (numFailedPixels == 0); 116206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 116306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 116406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrybool TextureBorderClampTest::verifyTextureGatherCmpResult (const tcu::ConstPixelBufferAccess& renderedFrame, 116506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float* texCoordArray, 1166c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams, 116706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& texComparePrecision, 116806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TexComparePrecision& lowQualityTexComparePrecision) 116906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 117006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec2 texCoords[4] = 117106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 117206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[0], texCoordArray[1]), 117306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[2], texCoordArray[3]), 117406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[4], texCoordArray[5]), 117506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec2(texCoordArray[6], texCoordArray[7]), 117606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 117706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 117806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<tcu::ConstPixelBufferAccess> srcLevelStorage; 117906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Texture2DView effectiveView = tcu::getEffectiveTextureView(m_texture->getRefTexture(), srcLevelStorage, samplerParams.sampler); 118006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 118106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelFormat pixelFormat = m_context.getRenderTarget().getPixelFormat(); 1182c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const tcu::BVec4 colorMask = glu::TextureTestUtil::getCompareMask(pixelFormat); 1183c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const deUint8 fbColormask = tcu::getColorMask(pixelFormat); 118406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface reference (renderedFrame.getWidth(), renderedFrame.getHeight()); 118506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface errorMask (renderedFrame.getWidth(), renderedFrame.getHeight()); 118606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int numFailedPixels = 0; 118706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool lowQuality = false; 118806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1189c215aaa83047ebbaabafef7acd71275a256da6abDejan Mircevski tcu::clear(errorMask.getAccess(), tcu::RGBA::green().toVec()); 119006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 119106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int py = 0; py < reference.getHeight(); ++py) 119206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int px = 0; px < reference.getWidth(); ++px) 119306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 119406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec2 viewportCoord = (tcu::Vec2((float)px, (float)py) + tcu::Vec2(0.5f)) / tcu::Vec2((float)reference.getWidth(), (float)reference.getHeight()); 119506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec2 texCoord = triQuadInterpolate(texCoords, viewportCoord.x(), viewportCoord.y()); 119606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float refZ = samplerParams.ref; 119706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 referenceValue = effectiveView.gatherOffsetsCompare(samplerParams.sampler, refZ, texCoord.x(), texCoord.y(), glu::getDefaultGatherOffsets()); 119806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 resultValue = renderedFrame.getPixel(px, py); 119906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1200c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket reference.setPixel(px, py, tcu::toRGBAMasked(referenceValue, fbColormask)); 120106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 120206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (tcu::boolAny(tcu::logicalAnd(colorMask, tcu::notEqual(referenceValue, resultValue)))) 120306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 120406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!tcu::isGatherOffsetsCompareResultValid(effectiveView, samplerParams.sampler, texComparePrecision, texCoord, glu::getDefaultGatherOffsets(), refZ, resultValue)) 120506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 120606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lowQuality = true; 120706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 120806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // fall back to low quality verification 120906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!tcu::isGatherOffsetsCompareResultValid(effectiveView, samplerParams.sampler, lowQualityTexComparePrecision, texCoord, glu::getDefaultGatherOffsets(), refZ, resultValue)) 121006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 1211c215aaa83047ebbaabafef7acd71275a256da6abDejan Mircevski errorMask.setPixel(px, py, tcu::RGBA::red()); 121206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry ++numFailedPixels; 121306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 121406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 121506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 121606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 121706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 121806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 121906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Result verification failed, got " << numFailedPixels << " invalid pixels!" << tcu::TestLog::EndMessage; 122006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (lowQuality) 122106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 122206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "Warning: Verification assuming high-quality PCF filtering failed." << tcu::TestLog::EndMessage; 122306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_result.addResult(QP_TEST_RESULT_QUALITY_WARNING, "Low-quality result"); 122406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 122506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 122606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::ImageSet("VerifyResult", "Verification result") 122706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("Rendered", "Rendered image", renderedFrame); 122806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 122906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 123006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Image("Reference", "Ideal reference image", reference) 123106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("ErrorMask", "Error mask", errorMask); 123206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 123306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::EndImageSet; 123406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 123506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (numFailedPixels == 0); 123606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 123706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 123806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryconst glu::Texture2D* TextureBorderClampTest::getTexture (void) const 123906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 124006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return m_texture.get(); 124106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 124206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 124306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyrydeUint32 TextureBorderClampTest::getIterationSeed (const IterationConfig& config) const 124406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 124506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::SeedBuilder builder; 124606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry builder << std::string(getName()) 124706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_iterationNdx 124806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_texFormat 124906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << config.minFilter << config.magFilter 125006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_texture->getRefTexture().getWidth() << m_texture->getRefTexture().getHeight(); 125106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return builder.get(); 125206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 125306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1254c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siketglu::TextureTestUtil::ReferenceParams TextureBorderClampTest::genSamplerParams (const IterationConfig& config) const 125506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 125606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = tcu::getEffectiveDepthStencilTextureFormat(m_texture->getRefTexture().getFormat(), m_sampleMode); 1257c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::ReferenceParams refParams (glu::TextureTestUtil::TEXTURETYPE_2D); 125806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 125906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.sampler = glu::mapGLSampler(config.sWrapMode, config.tWrapMode, config.minFilter, config.magFilter); 126006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.sampler.borderColor = config.borderColor; 126106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.sampler.compare = (!m_useShadowSampler) ? (tcu::Sampler::COMPAREMODE_NONE) : (glu::mapGLCompareFunc(config.compareMode)); 126206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.sampler.depthStencilMode = m_sampleMode; 1263c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket refParams.lodMode = glu::TextureTestUtil::LODMODE_EXACT; 1264c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket refParams.samplerType = (!m_useShadowSampler) ? (glu::TextureTestUtil::getSamplerType(texFormat)) : (glu::TextureTestUtil::SAMPLERTYPE_SHADOW); 126506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.colorScale = config.lookupScale; 126606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.colorBias = config.lookupBias; 126706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.ref = config.compareRef; 126806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 126906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // compare can only be used with depth textures 127006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!isDepthFormat(m_texFormat, m_sampleMode)) 127106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(refParams.sampler.compare == tcu::Sampler::COMPAREMODE_NONE); 127206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 127306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // sampler type must match compare mode 127406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(m_useShadowSampler == (config.compareMode != GL_NONE)); 127506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 127606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // in gather, weird mapping is most likely an error 127706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_GATHER) 127806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 127906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(refParams.colorScale == tcu::Vec4(refParams.colorScale.x())); 128006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(refParams.colorBias == tcu::Vec4(refParams.colorBias.x())); 128106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 128206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 128306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return refParams; 128406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 128506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 128606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryglu::ShaderProgram* TextureBorderClampTest::genGatherProgram (void) const 128706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 1288f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe const std::string glslVersionDecl = glu::getGLSLVersionDeclaration(glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType())); 1289653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos const std::string vtxSource = glslVersionDecl + "\n" 1290f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe "in highp vec4 a_position;\n" 1291f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe "in highp vec2 a_texcoord;\n" 1292f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe "out highp vec2 v_texcoord;\n" 1293f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe "void main()\n" 1294f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe "{\n" 1295f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe " gl_Position = a_position;\n" 1296f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe " v_texcoord = a_texcoord;\n" 1297f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe "}\n"; 1298653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos const char* samplerType; 1299653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos const char* lookup; 130006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::ostringstream fragSource; 130106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 130206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_useShadowSampler) 130306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 130406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerType = "sampler2DShadow"; 130506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookup = "textureGather(u_sampler, v_texcoord, u_ref)"; 130606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 130706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 130806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 130906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (m_channelClass) 131006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 131106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: 131206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: 131306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: 131406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerType = "sampler2D"; 131506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookup = "textureGather(u_sampler, v_texcoord)"; 131606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 131706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 131806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: 131906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerType = "isampler2D"; 132006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookup = "vec4(textureGather(u_sampler, v_texcoord))"; 132106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 132206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 132306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: 132406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerType = "usampler2D"; 132506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookup = "vec4(textureGather(u_sampler, v_texcoord))"; 132606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 132706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 132806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 1329ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry samplerType = ""; 1330ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry lookup = ""; 133106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 133206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 133306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 133406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 1335f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe fragSource << glslVersionDecl + "\n" 133606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "uniform highp " << samplerType << " u_sampler;\n" 133706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "uniform highp vec4 u_colorScale;\n" 133806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "uniform highp vec4 u_colorBias;\n" 133906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ((m_useShadowSampler) ? ("uniform highp float u_ref;\n") : ("")) 134006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "in highp vec2 v_texcoord;\n" 134106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "layout(location=0) out highp vec4 o_color;\n" 134206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "void main()\n" 134306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "{\n" 134406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry " o_color = " << lookup << " * u_colorScale + u_colorBias;\n" 134506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "}\n"; 134606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 134706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return new glu::ShaderProgram(m_context.getRenderContext(), glu::ProgramSources() << glu::VertexSource(vtxSource) << glu::FragmentSource(fragSource.str())); 134806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 134906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 135006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampFormatCase : public TextureBorderClampTest 135106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 135206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 135306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampFormatCase (Context& context, 135406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 135506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 135606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 135706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 135806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry StateType stateType, 135906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SizeType sizeType, 136006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter, 136106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction); 136206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 136306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 136406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 136506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 136606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int getNumIterations (void) const; 136706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig getIteration (int ndx) const; 136806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 136906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const SizeType m_sizeType; 137006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_filter; 137106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 137206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<IterationConfig> m_iterations; 137306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 137406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 137506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 137606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampFormatCase::TextureBorderClampFormatCase (Context& context, 137706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 137806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 137906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 138006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 138106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry StateType stateType, 138206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SizeType sizeType, 138306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter, 138406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction) 138506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TextureBorderClampTest(context, 138606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry name, 138706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry description, 138806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texFormat, 138906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry mode, 139006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry stateType, 139106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (sizeType == SIZE_POT) ? (32) : (17), 139206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (sizeType == SIZE_POT) ? (16) : (31), 139306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplingFunction) 139406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_sizeType (sizeType) 139506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_filter (filter) 139606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 139706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_sizeType == SIZE_POT) 139806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(deIsPowerOfTwo32(m_texWidth) && deIsPowerOfTwo32(m_texHeight)); 139906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 140006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(!deIsPowerOfTwo32(m_texWidth) && !deIsPowerOfTwo32(m_texHeight)); 140106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 140206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (glu::isCompressedFormat(texFormat)) 140306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 140406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::CompressedTexFormat compressedFormat = glu::mapGLCompressedTexFormat(texFormat); 140506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec3 blockPixelSize = tcu::getBlockPixelSize(compressedFormat); 140606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 140706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // is (not) multiple of a block size 140806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_sizeType == SIZE_POT) 140906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT((m_texWidth % blockPixelSize.x()) == 0 && (m_texHeight % blockPixelSize.y()) == 0); 141006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 141106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT((m_texWidth % blockPixelSize.x()) != 0 && (m_texHeight % blockPixelSize.y()) != 0); 1412b5c8f10b44f5306e816ca9f7d5efa0a4150f0f48Jarkko Pöyry 1413b5c8f10b44f5306e816ca9f7d5efa0a4150f0f48Jarkko Pöyry DE_UNREF(blockPixelSize); 141406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 141506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 141606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 141706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampFormatCase::init (void) 141806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 141906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::init(); 142006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 142106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // \note TextureBorderClampTest::init() creates texture 142206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = tcu::getEffectiveDepthStencilTextureFormat(getTexture()->getRefTexture().getFormat(), m_sampleMode); 142306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(texFormat); 142406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 142506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // iterations 142606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 142706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 142806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 142906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-1.5f, -3.0f); 143006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.5f, 2.5f); 143106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = mapToFormatColorRepresentable(texFormat, tcu::Vec4(0.3f, 0.7f, 0.2f, 0.5f)); 143206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 143306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 143406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 143506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 143606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.5f, 0.75f); 143706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2(0.25f, 1.25f); 143806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = mapToFormatColorRepresentable(texFormat, tcu::Vec4(0.9f, 0.2f, 0.4f, 0.6f)); 143906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 144006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 144106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 144206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // common parameters 144306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int ndx = 0; ndx < (int)m_iterations.size(); ++ndx) 144406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 144506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig& iteration = m_iterations[ndx]; 144606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 144706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_GATHER) 144806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 144906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(texFormatInfo.lookupScale.x()); 145006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(texFormatInfo.lookupBias.x()); 145106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 145206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 145306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 145406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = texFormatInfo.lookupScale; 145506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = texFormatInfo.lookupBias; 145606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 145706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 145806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.minFilter = m_filter; 145906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.magFilter = m_filter; 146006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.sWrapMode = GL_CLAMP_TO_BORDER; 146106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.tWrapMode = GL_CLAMP_TO_BORDER; 146206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_NONE; 146306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 0.0f; 146406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 146506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 146606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 146706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint TextureBorderClampFormatCase::getNumIterations (void) const 146806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 146906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (int)m_iterations.size(); 147006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 147106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 147206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::IterationConfig TextureBorderClampFormatCase::getIteration (int ndx) const 147306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 147406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return m_iterations[ndx]; 147506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 147606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 147706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampRangeClampCase : public TextureBorderClampTest 147806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 147906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 148006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampRangeClampCase (Context& context, 148106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 148206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 148306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 148406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 148506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter); 148606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 148706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 148806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 148906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 149006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int getNumIterations (void) const; 149106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig getIteration (int ndx) const; 149206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 149306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_filter; 149406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<IterationConfig> m_iterations; 149506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 149606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 149706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampRangeClampCase::TextureBorderClampRangeClampCase (Context& context, 149806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 149906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 150006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 150106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 150206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter) 150306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TextureBorderClampTest(context, name, description, texFormat, mode, TextureBorderClampTest::STATE_TEXTURE_PARAM, 8, 32, SAMPLE_FILTER) 150406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_filter (filter) 150506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 150606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 150706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 150806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampRangeClampCase::init (void) 150906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 151006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::init(); 151106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 151206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = tcu::getEffectiveDepthStencilTextureFormat(getTexture()->getRefTexture().getFormat(), m_sampleMode); 151306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isDepth = isDepthFormat(m_texFormat, m_sampleMode); 151406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isFloat = m_channelClass == tcu::TEXTURECHANNELCLASS_FLOATING_POINT; 151506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isFixed = m_channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT || m_channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT; 151606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isPureInteger = m_channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER || m_channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER; 151706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 151806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isDepth || isFloat) 151906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 152006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // infinities are commonly used values on depth/float borders 152106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 152206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 152306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-1.2f, -3.0f); 152406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.2f, 2.5f); 152506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(std::numeric_limits<float>::infinity())); 152606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(0.5f); // scale & bias to [0.25, 0.5] range to make out-of-range values visible 152706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(0.25f); 152806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border value infinity"; 152906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 153006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 153106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 153206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 153306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.25f, -0.75f); 153406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 2.25f, 1.25f); 153506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(-std::numeric_limits<float>::infinity())); 153606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(0.5f); 153706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(0.25f); 153806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border value negative infinity"; 153906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 154006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 154106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 154206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (isPureInteger) 154306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 154406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 numBits = tcu::getTextureFormatBitDepth(texFormat); 154506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isSigned = m_channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER; 154606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 154706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // can't overflow 32bit integers with 32bit integers 154806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int ndx = 0; ndx < 4; ++ndx) 154906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(numBits[ndx] == 0 || numBits[ndx] == 8 || numBits[ndx] == 16); 155006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 155106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 minValue = getNBitIntegerVec4MinValue(isSigned, numBits); 155206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 maxValue = getNBitIntegerVec4MaxValue(isSigned, numBits); 155306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 valueRange = maxValue - minValue; 155406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 divSafeRange ((valueRange[0]==0) ? (1) : (valueRange[0]), 155506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (valueRange[1]==0) ? (1) : (valueRange[1]), 155606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (valueRange[2]==0) ? (1) : (valueRange[2]), 155706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (valueRange[3]==0) ? (1) : (valueRange[3])); 155806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 155906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // format max 156006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 156106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 value = maxValue + tcu::IVec4(1); 156206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 156306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 156406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-1.2f, -3.0f); 156506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.2f, 2.5f); 156606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = (isSigned) ? (rr::GenericVec4(value)) : (rr::GenericVec4(value.cast<deUint32>())); 156706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(0.5f) / divSafeRange.cast<float>(); 156806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = (isSigned) ? (tcu::Vec4(0.5f)) : (tcu::Vec4(0.25f)); 156906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border values one larger than maximum"; 157006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 157106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 157206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // format min 157306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isSigned) 157406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 157506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 value = minValue - tcu::IVec4(1); 157606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 157706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 157806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.25f, -0.75f); 157906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 2.25f, 1.25f); 158006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(value); 158106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(0.5f) / divSafeRange.cast<float>(); 158206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(0.5f); 158306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border values one less than minimum"; 158406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 158506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 158606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // (u)int32 max 158706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 158806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 value = (isSigned) ? (tcu::IVec4(std::numeric_limits<deInt32>::max())) : (tcu::IVec4(std::numeric_limits<deUint32>::max())); 158906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 159006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 159106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-1.6f, -2.1f); 159206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.2f, 3.5f); 159306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = (isSigned) ? (rr::GenericVec4(value)) : (rr::GenericVec4(value.cast<deUint32>())); 159406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(0.5f) / divSafeRange.cast<float>(); 159506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(0.25f); 159606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border values 32-bit maximum"; 159706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 159806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 159906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // int32 min 160006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (isSigned) 160106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 160206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec4 value = tcu::IVec4(std::numeric_limits<deInt32>::min()); 160306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 160406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 160506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-2.6f, -4.0f); 160606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.1f, 1.5f); 160706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(value); 160806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(0.5f) / divSafeRange.cast<float>(); 160906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(0.25f); 161006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border values 0"; 161106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 161206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 161306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 161406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (isFixed) 161506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 161606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isSigned = m_channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT;; 161706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 lookupBias = (isSigned) ? (tcu::Vec4(0.5f)) : (tcu::Vec4(0.25f)); // scale & bias to [0.25, 0.5] range to make out-of-range values visible 161806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Vec4 lookupScale = (isSigned) ? (tcu::Vec4(0.25f)) : (tcu::Vec4(0.5f)); 161906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 162006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 162106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 162206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-1.2f, -3.0f); 162306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.2f, 2.5f); 162406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = mapToFormatColorUnits(texFormat, tcu::Vec4(1.1f, 1.3f, 2.2f, 1.3f)); 162506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = lookupScale; 162606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = lookupBias; 162706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border values larger than maximum"; 162806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 162906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 163006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 163106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 163206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.25f, -0.75f); 163306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 2.25f, 1.25f); 163406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = mapToFormatColorUnits(texFormat, tcu::Vec4(-0.2f, -0.9f, -2.4f, -0.6f)); 163506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = lookupScale; 163606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = lookupBias; 163706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "border values less than minimum"; 163806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 163906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 164006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 164106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 164206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 164306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 164406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // common parameters 164506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int ndx = 0; ndx < (int)m_iterations.size(); ++ndx) 164606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 164706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig& iteration = m_iterations[ndx]; 164806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 164906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.minFilter = m_filter; 165006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.magFilter = m_filter; 165106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.sWrapMode = GL_CLAMP_TO_BORDER; 165206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.tWrapMode = GL_CLAMP_TO_BORDER; 165306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_NONE; 165406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 0.0f; 165506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 165606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 165706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 165806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint TextureBorderClampRangeClampCase::getNumIterations (void) const 165906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 166006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (int)m_iterations.size(); 166106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 166206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 166306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::IterationConfig TextureBorderClampRangeClampCase::getIteration (int ndx) const 166406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 166506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return m_iterations[ndx]; 166606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 166706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 166806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampPerAxisCase2D : public TextureBorderClampTest 166906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 167006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 167106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampPerAxisCase2D (Context& context, 167206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 167306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 167406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 167506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 167606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SizeType sizeType, 167706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter, 167806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texSWrap, 167906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texTWrap, 168006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction); 168106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 168206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 168306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 168406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 168506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int getNumIterations (void) const; 168606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig getIteration (int ndx) const; 168706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 168806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_texSWrap; 168906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_texTWrap; 169006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_filter; 169106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 169206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<IterationConfig> m_iterations; 169306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 169406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 169506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampPerAxisCase2D::TextureBorderClampPerAxisCase2D (Context& context, 169606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 169706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 169806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 169906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode, 170006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SizeType sizeType, 170106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter, 170206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texSWrap, 170306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texTWrap, 170406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction) 170506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TextureBorderClampTest(context, 170606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry name, 170706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry description, 170806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texFormat, 170906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry mode, 171006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::STATE_TEXTURE_PARAM, 171106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (sizeType == SIZE_POT) ? (16) : (7), 171206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (sizeType == SIZE_POT) ? (8) : (9), 171306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplingFunction) 171406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_texSWrap (texSWrap) 171506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_texTWrap (texTWrap) 171606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_filter (filter) 171706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 171806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 171906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 172006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampPerAxisCase2D::init (void) 172106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 172206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::init(); 172306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 172406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // \note TextureBorderClampTest::init() creates texture 172506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = tcu::getEffectiveDepthStencilTextureFormat(getTexture()->getRefTexture().getFormat(), m_sampleMode); 172606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(texFormat); 172706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 172806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 172906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.25f, -0.75f); 173006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 2.25f, 1.25f); 173106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = mapToFormatColorRepresentable(texFormat, tcu::Vec4(0.4f, 0.9f, 0.1f, 0.2f)); 173206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 173306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_samplingFunction == SAMPLE_GATHER) 173406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 173506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(texFormatInfo.lookupScale.x()); 173606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(texFormatInfo.lookupBias.x()); 173706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 173806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 173906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 174006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = texFormatInfo.lookupScale; 174106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = texFormatInfo.lookupBias; 174206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 174306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 174406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.minFilter = m_filter; 174506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.magFilter = m_filter; 174606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.sWrapMode = m_texSWrap; 174706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.tWrapMode = m_texTWrap; 174806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_NONE; 174906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 0.0f; 175006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 175106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 175206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 175306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 175406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint TextureBorderClampPerAxisCase2D::getNumIterations (void) const 175506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 175606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (int)m_iterations.size(); 175706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 175806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 175906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::IterationConfig TextureBorderClampPerAxisCase2D::getIteration (int ndx) const 176006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 176106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return m_iterations[ndx]; 176206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 176306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 176406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampDepthCompareCase : public TextureBorderClampTest 176506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 176606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 176706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampDepthCompareCase (Context& context, 176806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 176906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 177006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 177106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SizeType sizeType, 177206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter, 177306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction); 177406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 177506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 177606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 177706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 177806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int getNumIterations (void) const; 177906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig getIteration (int ndx) const; 178006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 178106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_filter; 178206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<IterationConfig> m_iterations; 178306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 178406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 178506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampDepthCompareCase::TextureBorderClampDepthCompareCase (Context& context, 178606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 178706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 178806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 178906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SizeType sizeType, 179006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter, 179106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SamplingFunction samplingFunction) 179206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TextureBorderClampTest(context, 179306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry name, 179406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry description, 179506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texFormat, 179606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::MODE_DEPTH, 179706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::STATE_TEXTURE_PARAM, 179806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (sizeType == SIZE_POT) ? (32) : (13), 179906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (sizeType == SIZE_POT) ? (16) : (17), 180006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplingFunction, 180106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry FLAG_USE_SHADOW_SAMPLER) 180206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_filter (filter) 180306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 180406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 180506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 180606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampDepthCompareCase::init (void) 180706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 180806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::init(); 180906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 181006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // 0.5 <= 0.7 181106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 181206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 181306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.15f, -0.35f); 181406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.25f, 1.1f); 181506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(0.7f, 0.0f, 0.0f, 0.0f)); 181606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "Border color in [0, 1] range"; 181706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_LEQUAL; 181806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 0.5f; 181906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 182006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 182106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 182206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // 1.5 <= 1.0 182306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 182406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 182506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.15f, -0.35f); 182606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.25f, 1.1f); 182706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(1.5f, 0.0f, 0.0f, 0.0f)); 182806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "Border color > 1, should be clamped"; 182906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_LEQUAL; 183006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 1.0f; 183106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 183206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 183306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 183406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // -0.5 >= 0.0 183506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 183606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 183706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.15f, -0.35f); 183806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.25f, 1.1f); 183906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(-0.5f, 0.0f, 0.0f, 0.0f)); 184006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "Border color < 0, should be clamped"; 184106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_GEQUAL; 184206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 0.0f; 184306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 184406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 184506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 184606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // inf < 1.25 184706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 184806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 184906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.15f, -0.35f); 185006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.25f, 1.1f); 185106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(std::numeric_limits<float>::infinity(), 0.0f, 0.0f, 0.0f)); 185206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "Border color == inf, should be clamped; ref > 1"; 185306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_LESS; 185406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 1.25f; 185506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 185606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 185706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 185806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // -inf > -0.5 185906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 186006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 186106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.15f, -0.35f); 186206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 1.25f, 1.1f); 186306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = rr::GenericVec4(tcu::Vec4(-std::numeric_limits<float>::infinity(), 0.0f, 0.0f, 0.0f)); 186406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "Border color == inf, should be clamped; ref < 0"; 186506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_GREATER; 186606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = -0.5f; 186706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 186806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 186906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 187006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // common parameters 187106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int ndx = 0; ndx < (int)m_iterations.size(); ++ndx) 187206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 187306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig& iteration = m_iterations[ndx]; 187406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 187506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = tcu::Vec4(1.0); 187606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = tcu::Vec4(0.0); 187706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.minFilter = m_filter; 187806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.magFilter = m_filter; 187906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.sWrapMode = GL_CLAMP_TO_BORDER; 188006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.tWrapMode = GL_CLAMP_TO_BORDER; 188106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 188206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 188306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 188406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint TextureBorderClampDepthCompareCase::getNumIterations (void) const 188506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 188606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (int)m_iterations.size(); 188706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 188806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 188906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::IterationConfig TextureBorderClampDepthCompareCase::getIteration (int ndx) const 189006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 189106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return m_iterations[ndx]; 189206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 189306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 189406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampUnusedChannelCase : public TextureBorderClampTest 189506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 189606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 189706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampUnusedChannelCase (Context& context, 189806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 189906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 190006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 190106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode depthStencilMode); 190206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 190306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 190406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 190506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 190606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int getNumIterations (void) const; 190706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig getIteration (int ndx) const; 190806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 190906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<IterationConfig> m_iterations; 191006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 191106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 191206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampUnusedChannelCase::TextureBorderClampUnusedChannelCase (Context& context, 191306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name, 191406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* description, 191506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 texFormat, 191606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode depthStencilMode) 191706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TextureBorderClampTest(context, 191806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry name, 191906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry description, 192006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry texFormat, 192106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry depthStencilMode, 192206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::STATE_TEXTURE_PARAM, 192306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 8, 192406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 8, 192506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SAMPLE_FILTER) 192606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 192706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 192806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 192906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrystatic rr::GenericVec4 selectComponents (const rr::GenericVec4& trueComponents, const rr::GenericVec4& falseComponents, const tcu::BVec4& m) 193006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 193106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return rr::GenericVec4(tcu::select(trueComponents.get<deUint32>(), falseComponents.get<deUint32>(), m)); 193206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 193306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 193406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampUnusedChannelCase::init (void) 193506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 193606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::init(); 193706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 193806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // \note TextureBorderClampTest::init() creates texture 193906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = tcu::getEffectiveDepthStencilTextureFormat(getTexture()->getRefTexture().getFormat(), m_sampleMode); 194006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(texFormat); 194106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::BVec4 channelMask = tcu::getTextureFormatChannelMask(texFormat); 194206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const float maxChannelValue = (channelMask[0]) ? (texFormatInfo.valueMax[0]) 194306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (channelMask[1]) ? (texFormatInfo.valueMax[1]) 194406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (channelMask[2]) ? (texFormatInfo.valueMax[2]) 194506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (texFormatInfo.valueMax[3]); 194606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 194706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const rr::GenericVec4 effectiveColors = mapToFormatColorRepresentable(texFormat, tcu::Vec4(0.6f)); 194806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry rr::GenericVec4 nonEffectiveColors; 194906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 195006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (m_channelClass) 195106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 195206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: 195306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: 195406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: 195506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry nonEffectiveColors = rr::GenericVec4(tcu::Vec4(maxChannelValue * 0.8f)); 195606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 195706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 195806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: 195906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry nonEffectiveColors = rr::GenericVec4(tcu::Vec4(maxChannelValue * 0.8f).cast<deInt32>()); 196006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 196106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 196206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: 196306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry nonEffectiveColors = rr::GenericVec4(tcu::Vec4(maxChannelValue * 0.8f).cast<deUint32>()); 196406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 196506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 196606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 196706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 196806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 196906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterationConfig iteration; 197006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p0 = tcu::Vec2(-0.25f, -0.75f); 197106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.p1 = tcu::Vec2( 2.25f, 1.25f); 197206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.borderColor = selectComponents(effectiveColors, nonEffectiveColors, channelMask); 197306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupScale = texFormatInfo.lookupScale; 197406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.lookupBias = texFormatInfo.lookupBias; 197506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.minFilter = GL_NEAREST; 197606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.magFilter = GL_NEAREST; 197706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.sWrapMode = GL_CLAMP_TO_BORDER; 197806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.tWrapMode = GL_CLAMP_TO_BORDER; 197906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareMode = GL_NONE; 198006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.compareRef = 0.0f; 198106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry iteration.description = "Setting values to unused border color components"; 198206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 198306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_iterations.push_back(iteration); 198406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 198506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 198606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryint TextureBorderClampUnusedChannelCase::getNumIterations (void) const 198706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 198806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return (int)m_iterations.size(); 198906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 199006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 199106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTest::IterationConfig TextureBorderClampUnusedChannelCase::getIteration (int ndx) const 199206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 199306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return m_iterations[ndx]; 199406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 199506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 199606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryclass TextureBorderClampPerAxisCase3D : public TestCase 199706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 199806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyrypublic: 1999ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry TextureBorderClampPerAxisCase3D (Context& context, 2000ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry const char* name, 2001ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry const char* description, 2002ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 texFormat, 2003ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry SizeType size, 2004ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 filter, 2005ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 sWrap, 2006ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 tWrap, 2007ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 rWrap); 200806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 200906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryprivate: 201006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void init (void); 201106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void deinit (void); 201206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry IterateResult iterate (void); 201306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 201406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void renderTo (tcu::Surface& surface, 2015c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams); 201606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2017c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket void logParams (const glu::TextureTestUtil::ReferenceParams& samplerParams); 201806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 201906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry void verifyImage (const tcu::Surface& image, 2020c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams); 202106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2022c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::ReferenceParams getSamplerParams (void) const; 202306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 getCaseSeed (void) const; 202406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 202506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry enum 202606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 202706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry VIEWPORT_WIDTH = 128, 202806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry VIEWPORT_HEIGHT = 128, 202906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 203006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 203106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_texFormat; 203206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureChannelClass m_channelClass; 203306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::IVec3 m_size; 203406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_filter; 203506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_sWrap; 203606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_tWrap; 203706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 m_rWrap; 203806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 203906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<glu::Texture3D> m_texture; 204006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry de::MovePtr<gls::TextureTestUtil::TextureRenderer> m_renderer; 204106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 204206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry rr::GenericVec4 m_borderColor; 204306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry std::vector<float> m_texCoords; 204406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec4 m_lookupScale; 204506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Vec4 m_lookupBias; 204606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry}; 204706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2048ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko PöyryTextureBorderClampPerAxisCase3D::TextureBorderClampPerAxisCase3D (Context& context, 2049ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry const char* name, 2050ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry const char* description, 2051ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 texFormat, 2052ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry SizeType size, 2053ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 filter, 2054ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 sWrap, 2055ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 tWrap, 2056ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry deUint32 rWrap) 205706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TestCase (context, name, description) 205806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_texFormat (texFormat) 2059ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry , m_channelClass (getFormatChannelClass(texFormat, tcu::Sampler::MODE_LAST)) 206006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_size ((size == SIZE_POT) ? (tcu::IVec3(8, 16, 4)) : (tcu::IVec3(13, 5, 7))) 206106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_filter (filter) 206206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_sWrap (sWrap) 206306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_tWrap (tWrap) 206406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry , m_rWrap (rWrap) 206506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 206606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 206706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 206806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampPerAxisCase3D::init (void) 206906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 2070f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)); 2071f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe const glu::GLSLVersion glslVersion = glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType()); 2072f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe 2073f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe if (!supportsES32 && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_border_clamp")) 207406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_border_clamp extension"); 207506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 207606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (glu::isCompressedFormat(m_texFormat) && 2077f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe !supportsES32 && 207806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::isAstcFormat(glu::mapGLCompressedTexFormat(m_texFormat)) && 207906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry !m_context.getContextInfo().isExtensionSupported("GL_KHR_texture_compression_astc_ldr")) 208006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 208106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires GL_KHR_texture_compression_astc_ldr extension"); 208206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 208306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_texFormat == GL_BGRA && !m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_format_BGRA8888")) 208406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_format_BGRA8888 extension"); 208506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (m_context.getRenderTarget().getWidth() < VIEWPORT_WIDTH || 208606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_context.getRenderTarget().getHeight() < VIEWPORT_HEIGHT) 208706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 208806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry throw tcu::NotSupportedError("Test requires " + de::toString<int>(VIEWPORT_WIDTH) + "x" + de::toString<int>(VIEWPORT_HEIGHT) + " viewport"); 208906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 209006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 209106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // resources 209206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texture = genDummyTexture<glu::Texture3D>(m_context.getRenderContext(), m_context.getContextInfo(), m_texFormat, m_size); 2093f24d503d1acdb3b4461f74154d14b80d89a4397cDaniel Andrade Groppe m_renderer = de::MovePtr<gls::TextureTestUtil::TextureRenderer>(new gls::TextureTestUtil::TextureRenderer(m_context.getRenderContext(), m_testCtx.getLog(), glslVersion, glu::PRECISION_HIGHP)); 209406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 209506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // texture info 209606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 2097b2e583dfcd8aa0d4ef254f841213fcf724b2b193Jarkko Pöyry << "Created 3D texture with format " << glu::getTextureFormatName(m_texFormat) 209806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ", size (" << m_texture->getRefTexture().getWidth() << ", " << m_texture->getRefTexture().getHeight() << ", " << m_texture->getRefTexture().getDepth() << ")\n" 209906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 210006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 210106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // tex coord 210206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 210306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 210406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Setting tex coords bottom-left: (-1, -1, -1.5), top-right (2, 2, 2.5)\n" 210506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 210606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 210706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texCoords.resize(4*3); 210806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 210906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texCoords[0] = -1.0f; m_texCoords[ 1] = -1.0f; m_texCoords[ 2] = -1.5f; 211006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texCoords[3] = -1.0f; m_texCoords[ 4] = 2.0f; m_texCoords[ 5] = 0.5f; 211106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texCoords[6] = 2.0f; m_texCoords[ 7] = -1.0f; m_texCoords[ 8] = 0.5f; 211206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texCoords[9] = 2.0f; m_texCoords[10] = 2.0f; m_texCoords[11] = 2.5f; 211306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 211406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 211506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // set render params 211606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 211706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = m_texture->getRefTexture().getFormat(); 211806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormatInfo texFormatInfo = tcu::getTextureFormatInfo(texFormat); 211906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 212006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_borderColor = mapToFormatColorRepresentable(texFormat, tcu::Vec4(0.2f, 0.6f, 0.9f, 0.4f)); 212106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 212206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_lookupScale = texFormatInfo.lookupScale; 212306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_lookupBias = texFormatInfo.lookupBias; 212406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 212506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 212606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 212706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampPerAxisCase3D::deinit (void) 212806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 212906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_texture.clear(); 213006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_renderer.clear(); 213106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 213206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 213306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampPerAxisCase3D::IterateResult TextureBorderClampPerAxisCase3D::iterate (void) 213406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 213506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface renderedFrame (VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 2136c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams samplerParams = getSamplerParams(); 213706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 213806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry logParams(samplerParams); 213906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry renderTo(renderedFrame, samplerParams); 214006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry verifyImage(renderedFrame, samplerParams); 214106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 214206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return STOP; 214306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 214406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2145c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siketvoid TextureBorderClampPerAxisCase3D::logParams (const glu::TextureTestUtil::ReferenceParams& samplerParams) 214606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 214706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const std::string borderColorString = (m_channelClass == tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER) ? (de::toString(m_borderColor.get<deInt32>())) 214806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (m_channelClass == tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER) ? (de::toString(m_borderColor.get<deUint32>())) 214906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : (de::toString(m_borderColor.get<float>())); 215006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 215106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message 215206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Border color is " << borderColorString << "\n" 215306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Texture lookup bias: " << samplerParams.colorBias << "\n" 215406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Texture lookup scale: " << samplerParams.colorScale << "\n" 215506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Filter: " << glu::getTextureFilterName(m_filter) << "\n" 215606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << "Wrap mode: s = " << glu::getRepeatModeStr(m_sWrap) 215706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ", t = " << glu::getRepeatModeStr(m_tWrap) 215806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << ", r = " << glu::getRepeatModeStr(m_rWrap) << "\n" 215906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::EndMessage; 216006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 216106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 216206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampPerAxisCase3D::renderTo (tcu::Surface& surface, 2163c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams) 216406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 216506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 216606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const gls::TextureTestUtil::RandomViewport viewport (m_context.getRenderTarget(), VIEWPORT_WIDTH, VIEWPORT_HEIGHT, getCaseSeed()); 216706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 216806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Bind to unit 0. 216906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.activeTexture(GL_TEXTURE0); 217006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.bindTexture(GL_TEXTURE_3D, m_texture->getGLTexture()); 217106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 217206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // Setup filtering and wrap modes. 217306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, glu::getGLWrapMode(samplerParams.sampler.wrapS)); 217406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, glu::getGLWrapMode(samplerParams.sampler.wrapT)); 217506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, glu::getGLWrapMode(samplerParams.sampler.wrapR)); 217606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, glu::getGLFilterMode(samplerParams.sampler.minFilter)); 217706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, glu::getGLFilterMode(samplerParams.sampler.magFilter)); 217806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 217906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry switch (m_channelClass) 218006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 218106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: 218206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: 218306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: 218406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterfv(GL_TEXTURE_3D, GL_TEXTURE_BORDER_COLOR, m_borderColor.getAccess<float>()); 218506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 218606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 218706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: 218806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterIiv(GL_TEXTURE_3D, GL_TEXTURE_BORDER_COLOR, m_borderColor.getAccess<deInt32>()); 218906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 219006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 219106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: 219206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.texParameterIuiv(GL_TEXTURE_3D, GL_TEXTURE_BORDER_COLOR, m_borderColor.getAccess<deUint32>()); 219306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry break; 219406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 219506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry default: 219606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry DE_ASSERT(false); 219706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 219806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 219906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry GLU_EXPECT_NO_ERROR(gl.getError(), "Set texturing state"); 220006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 220106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height); 220206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_renderer->renderQuad(0, &m_texCoords[0], samplerParams); 220306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry glu::readPixels(m_context.getRenderContext(), viewport.x, viewport.y, surface.getAccess()); 220406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 220506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 220606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampPerAxisCase3D::verifyImage (const tcu::Surface& renderedFrame, 2207c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const glu::TextureTestUtil::ReferenceParams& samplerParams) 220806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 220906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::PixelFormat pixelFormat = m_context.getRenderTarget().getPixelFormat(); 221006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const int colorErrorBits = 2; 2211c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket const tcu::IVec4 colorBits = tcu::max(glu::TextureTestUtil::getBitsVec(pixelFormat) - tcu::IVec4(colorErrorBits), tcu::IVec4(0)); 221206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface reference (renderedFrame.getWidth(), renderedFrame.getHeight()); 221306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Surface errorMask (renderedFrame.getWidth(), renderedFrame.getHeight()); 2214433645782506cbdf8fa8b113ea0b5aa8ae761f0cPyry Haulos tcu::LodPrecision lodPrecision; 221506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::LookupPrecision lookupPrecision; 221606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry int numFailedPixels; 221706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 221806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lodPrecision.derivateBits = 18; 221906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lodPrecision.lodBits = 5; 222006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 222106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.colorThreshold = tcu::computeFixedPointThreshold(colorBits) / samplerParams.colorScale; 222206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.coordBits = tcu::IVec3(20,20,0); 222306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry lookupPrecision.uvwBits = tcu::IVec3(5,5,0); 2224c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket lookupPrecision.colorMask = glu::TextureTestUtil::getCompareMask(pixelFormat); 222506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2226c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::sampleTexture(tcu::SurfaceAccess(reference, pixelFormat), m_texture->getRefTexture(), &m_texCoords[0], samplerParams); 222706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2228c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket numFailedPixels = glu::TextureTestUtil::computeTextureLookupDiff(renderedFrame.getAccess(), reference.getAccess(), errorMask.getAccess(), m_texture->getRefTexture(), 222906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry &m_texCoords[0], samplerParams, lookupPrecision, lodPrecision, m_testCtx.getWatchDog()); 223006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 223106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 223206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "ERROR: Result verification failed, got " << numFailedPixels << " invalid pixels!" << tcu::TestLog::EndMessage; 223306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::ImageSet("VerifyResult", "Verification result") 223406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("Rendered", "Rendered image", renderedFrame); 223506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels > 0) 223606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 223706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Image("Reference", "Ideal reference image", reference) 223806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << tcu::TestLog::Image("ErrorMask", "Error mask", errorMask); 223906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 224006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.getLog() << tcu::TestLog::EndImageSet; 224106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 224206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (numFailedPixels == 0) 224306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 224406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 224506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Image verification failed"); 224606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 224706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 2248c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siketglu::TextureTestUtil::ReferenceParams TextureBorderClampPerAxisCase3D::getSamplerParams (void) const 224906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 225006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::TextureFormat texFormat = m_texture->getRefTexture().getFormat(); 2251c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket glu::TextureTestUtil::ReferenceParams refParams (glu::TextureTestUtil::TEXTURETYPE_3D); 225206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 225306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.sampler = glu::mapGLSampler(m_sWrap, m_tWrap, m_rWrap, m_filter, m_filter); 225406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.sampler.borderColor = m_borderColor; 2255c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket refParams.lodMode = glu::TextureTestUtil::LODMODE_EXACT; 2256c4eb6f3271a0bcd54835e666e836e3e72beebbd2Peter Siket refParams.samplerType = glu::TextureTestUtil::getSamplerType(texFormat); 225706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.colorScale = m_lookupScale; 225806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry refParams.colorBias = m_lookupBias; 225906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 226006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return refParams; 226106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 226206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 226306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyrydeUint32 TextureBorderClampPerAxisCase3D::getCaseSeed (void) const 226406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 226506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::SeedBuilder builder; 226606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry builder << std::string(getName()) 226706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_texFormat 226806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_filter 226906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_sWrap 227006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_tWrap 227106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_rWrap 227206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_texture->getRefTexture().getWidth() 227306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_texture->getRefTexture().getHeight() 227406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry << m_texture->getRefTexture().getDepth(); 227506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry return builder.get(); 227606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 227706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 227806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} // anonymous 227906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 228006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTests::TextureBorderClampTests (Context& context) 228106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry : TestCaseGroup(context, "border_clamp", "EXT_texture_border_clamp tests") 228206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 228306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 228406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 228506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko PöyryTextureBorderClampTests::~TextureBorderClampTests (void) 228606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 228706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 228806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 228906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyryvoid TextureBorderClampTests::init (void) 229006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry{ 229106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 229206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 229306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 229406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 filter; 229506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampTest::SamplingFunction sampling; 229606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } s_filters[] = 229706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 229806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "nearest", GL_NEAREST, TextureBorderClampTest::SAMPLE_FILTER }, 229906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "linear", GL_LINEAR, TextureBorderClampTest::SAMPLE_FILTER }, 230006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "gather", GL_NEAREST, TextureBorderClampTest::SAMPLE_GATHER }, 230106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 230206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 230306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .formats 230406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 230506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 230606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 230706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 230806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 format; 230906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode; 231006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } formats[] = 231106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 231206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "luminance", GL_LUMINANCE, tcu::Sampler::MODE_LAST }, 231306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "alpha", GL_ALPHA, tcu::Sampler::MODE_LAST }, 231406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "luminance_alpha", GL_LUMINANCE_ALPHA, tcu::Sampler::MODE_LAST }, 231506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "bgra", GL_BGRA, tcu::Sampler::MODE_LAST }, 231606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r8", GL_R8, tcu::Sampler::MODE_LAST }, 231706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r8_snorm", GL_R8_SNORM, tcu::Sampler::MODE_LAST }, 231806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg8", GL_RG8, tcu::Sampler::MODE_LAST }, 231906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg8_snorm", GL_RG8_SNORM, tcu::Sampler::MODE_LAST }, 232006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb8", GL_RGB8, tcu::Sampler::MODE_LAST }, 232106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb8_snorm", GL_RGB8_SNORM, tcu::Sampler::MODE_LAST }, 232206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb565", GL_RGB565, tcu::Sampler::MODE_LAST }, 232306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba4", GL_RGBA4, tcu::Sampler::MODE_LAST }, 232406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb5_a1", GL_RGB5_A1, tcu::Sampler::MODE_LAST }, 232506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba8", GL_RGBA8, tcu::Sampler::MODE_LAST }, 232606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba8_snorm", GL_RGBA8_SNORM, tcu::Sampler::MODE_LAST }, 232706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb10_a2", GL_RGB10_A2, tcu::Sampler::MODE_LAST }, 232806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb10_a2ui", GL_RGB10_A2UI, tcu::Sampler::MODE_LAST }, 232906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "srgb8", GL_SRGB8, tcu::Sampler::MODE_LAST }, 233006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "srgb8_alpha8", GL_SRGB8_ALPHA8, tcu::Sampler::MODE_LAST }, 233106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r16f", GL_R16F, tcu::Sampler::MODE_LAST }, 233206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg16f", GL_RG16F, tcu::Sampler::MODE_LAST }, 233306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb16f", GL_RGB16F, tcu::Sampler::MODE_LAST }, 233406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba16f", GL_RGBA16F, tcu::Sampler::MODE_LAST }, 233506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r32f", GL_R32F, tcu::Sampler::MODE_LAST }, 233606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg32f", GL_RG32F, tcu::Sampler::MODE_LAST }, 233706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb32f", GL_RGB32F, tcu::Sampler::MODE_LAST }, 233806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba32f", GL_RGBA32F, tcu::Sampler::MODE_LAST }, 233906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r11f_g11f_b10f", GL_R11F_G11F_B10F, tcu::Sampler::MODE_LAST }, 234006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb9_e5", GL_RGB9_E5, tcu::Sampler::MODE_LAST }, 234106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r8i", GL_R8I, tcu::Sampler::MODE_LAST }, 234206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r8ui", GL_R8UI, tcu::Sampler::MODE_LAST }, 234306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r16i", GL_R16I, tcu::Sampler::MODE_LAST }, 234406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r16ui", GL_R16UI, tcu::Sampler::MODE_LAST }, 234506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r32i", GL_R32I, tcu::Sampler::MODE_LAST }, 234606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r32ui", GL_R32UI, tcu::Sampler::MODE_LAST }, 234706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg8i", GL_RG8I, tcu::Sampler::MODE_LAST }, 234806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg8ui", GL_RG8UI, tcu::Sampler::MODE_LAST }, 234906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg16i", GL_RG16I, tcu::Sampler::MODE_LAST }, 235006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg16ui", GL_RG16UI, tcu::Sampler::MODE_LAST }, 235106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg32i", GL_RG32I, tcu::Sampler::MODE_LAST }, 235206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg32ui", GL_RG32UI, tcu::Sampler::MODE_LAST }, 235306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb8i", GL_RGB8I, tcu::Sampler::MODE_LAST }, 235406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb8ui", GL_RGB8UI, tcu::Sampler::MODE_LAST }, 235506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb16i", GL_RGB16I, tcu::Sampler::MODE_LAST }, 235606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb16ui", GL_RGB16UI, tcu::Sampler::MODE_LAST }, 235706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb32i", GL_RGB32I, tcu::Sampler::MODE_LAST }, 235806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb32ui", GL_RGB32UI, tcu::Sampler::MODE_LAST }, 235906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba8i", GL_RGBA8I, tcu::Sampler::MODE_LAST }, 236006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba8ui", GL_RGBA8UI, tcu::Sampler::MODE_LAST }, 236106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba16i", GL_RGBA16I, tcu::Sampler::MODE_LAST }, 236206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba16ui", GL_RGBA16UI, tcu::Sampler::MODE_LAST }, 236306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba32i", GL_RGBA32I, tcu::Sampler::MODE_LAST }, 236406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgba32ui", GL_RGBA32UI, tcu::Sampler::MODE_LAST }, 236506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component16", GL_DEPTH_COMPONENT16, tcu::Sampler::MODE_DEPTH }, 236606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component24", GL_DEPTH_COMPONENT24, tcu::Sampler::MODE_DEPTH }, 236706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component32f", GL_DEPTH_COMPONENT32F, tcu::Sampler::MODE_DEPTH }, 236806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "stencil_index8", GL_STENCIL_INDEX8, tcu::Sampler::MODE_STENCIL }, 236906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth24_stencil8_sample_depth", GL_DEPTH24_STENCIL8, tcu::Sampler::MODE_DEPTH }, 237006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth32f_stencil8_sample_depth", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_DEPTH }, 237106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth24_stencil8_sample_stencil", GL_DEPTH24_STENCIL8, tcu::Sampler::MODE_STENCIL }, 237206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth32f_stencil8_sample_stencil", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_STENCIL }, 237306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_r11_eac", GL_COMPRESSED_R11_EAC, tcu::Sampler::MODE_LAST }, 237406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_signed_r11_eac", GL_COMPRESSED_SIGNED_R11_EAC, tcu::Sampler::MODE_LAST }, 237506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_rg11_eac", GL_COMPRESSED_RG11_EAC, tcu::Sampler::MODE_LAST }, 237606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_signed_rg11_eac", GL_COMPRESSED_SIGNED_RG11_EAC, tcu::Sampler::MODE_LAST }, 237706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_rgb8_etc2", GL_COMPRESSED_RGB8_ETC2, tcu::Sampler::MODE_LAST }, 237806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_srgb8_etc2", GL_COMPRESSED_SRGB8_ETC2, tcu::Sampler::MODE_LAST }, 237906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_rgb8_punchthrough_alpha1_etc2", GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, tcu::Sampler::MODE_LAST }, 238006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_srgb8_punchthrough_alpha1_etc2", GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, tcu::Sampler::MODE_LAST }, 238106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_rgba8_etc2_eac", GL_COMPRESSED_RGBA8_ETC2_EAC, tcu::Sampler::MODE_LAST }, 238206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_srgb8_alpha8_etc2_eac", GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, tcu::Sampler::MODE_LAST }, 238306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 238406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 238506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const formatsGroup = new tcu::TestCaseGroup(m_testCtx, "formats", "Format tests"); 238606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry addChild(formatsGroup); 238706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 238806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .format 238906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); ++formatNdx) 239006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 239106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 format = formats[formatNdx].format; 239206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Sampler::DepthStencilMode sampleMode = formats[formatNdx].mode; 239306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isCompressed = glu::isCompressedFormat(format); 239406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool coreFilterable = isCoreFilterableFormat(format, sampleMode); 239506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const formatGroup = new tcu::TestCaseGroup(m_testCtx, formats[formatNdx].name, "Format test"); 239606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 239706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formatsGroup->addChild(formatGroup); 239806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 239906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .nearest 240006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .linear 240106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int filterNdx = 0; filterNdx < DE_LENGTH_OF_ARRAY(s_filters); ++filterNdx) 240206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 240306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // [not-compressed] 240406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .size_pot 240506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .size_npot 240606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // [compressed] 240706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .size_tile_multiple (also pot) 240806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .size_not_tile_multiple (also npot) 240906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int sizeNdx = 0; sizeNdx < 2; ++sizeNdx) 241006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 241106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isNpotCase = (sizeNdx == 1); 241206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* const sizePotName = (!isCompressed) ? ("size_pot") : ("size_tile_multiple"); 241306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* const sizeNpotName = (!isCompressed) ? ("size_npot") : ("size_not_tile_multiple"); 241406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* const sizeName = (isNpotCase) ? (sizeNpotName) : (sizePotName); 241506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const SizeType sizeType = (isNpotCase) ? (SIZE_NPOT) : (SIZE_POT); 241606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const std::string caseName = std::string() + s_filters[filterNdx].name + "_" + sizeName; 241706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 filter = s_filters[filterNdx].filter; 241806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 241906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (coreFilterable || !filterRequiresFilterability(filter)) 242006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formatGroup->addChild(new TextureBorderClampFormatCase(m_context, 242106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry caseName.c_str(), 242206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "", 242306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry format, 242406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry sampleMode, 242506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampFormatCase::STATE_TEXTURE_PARAM, 242606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry sizeType, 242706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry filter, 242806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry s_filters[filterNdx].sampling)); 242906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 243006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 243106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 243206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 243306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 243406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .range_clamp 243506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 243606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 243706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 243806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 243906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 format; 244006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode; 244106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } formats[] = 244206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 244306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_color", GL_R8, tcu::Sampler::MODE_LAST }, 244406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "snorm_color", GL_R8_SNORM, tcu::Sampler::MODE_LAST }, 244506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_color", GL_RG32F, tcu::Sampler::MODE_LAST }, 244606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "int_color", GL_R8I, tcu::Sampler::MODE_LAST }, 244706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "uint_color", GL_R16UI, tcu::Sampler::MODE_LAST }, 244806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "srgb_color", GL_SRGB8_ALPHA8, tcu::Sampler::MODE_LAST }, 244906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_depth", GL_DEPTH_COMPONENT24, tcu::Sampler::MODE_DEPTH }, 245006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_depth", GL_DEPTH_COMPONENT32F, tcu::Sampler::MODE_DEPTH }, 245106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "uint_stencil", GL_STENCIL_INDEX8, tcu::Sampler::MODE_STENCIL }, 245206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_depth_uint_stencil_sample_depth", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_DEPTH }, 245306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_depth_uint_stencil_sample_stencil", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_STENCIL }, 245406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_depth_uint_stencil_sample_depth", GL_DEPTH24_STENCIL8, tcu::Sampler::MODE_DEPTH }, 245506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_depth_uint_stencil_sample_stencil", GL_DEPTH24_STENCIL8, tcu::Sampler::MODE_STENCIL }, 245606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_color", GL_COMPRESSED_RG11_EAC, tcu::Sampler::MODE_LAST }, 245706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 245806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 245906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const rangeClampGroup = new tcu::TestCaseGroup(m_testCtx, "range_clamp", "Range clamp tests"); 246006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry addChild(rangeClampGroup); 246106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 246206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); ++formatNdx) 246306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int filterNdx = 0; filterNdx < DE_LENGTH_OF_ARRAY(s_filters); ++filterNdx) 246406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 246506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 format = formats[formatNdx].format; 246606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Sampler::DepthStencilMode sampleMode = formats[formatNdx].mode; 246706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const std::string caseName = std::string() + s_filters[filterNdx].name + "_" + formats[formatNdx].name; 246806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 filter = s_filters[filterNdx].filter; 246906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool coreFilterable = isCoreFilterableFormat(format, sampleMode); 247006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 247106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (s_filters[filterNdx].sampling == TextureBorderClampTest::SAMPLE_GATHER) 247206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry continue; 247306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 247406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (coreFilterable || !filterRequiresFilterability(filter)) 247506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry rangeClampGroup->addChild(new TextureBorderClampRangeClampCase(m_context, caseName.c_str(), "", format, sampleMode, filter)); 247606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 247706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 247806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 247906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .sampler 248006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 248106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 248206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 248306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 248406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 format; 248506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode; 248606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } formats[] = 248706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 248806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_color", GL_R8, tcu::Sampler::MODE_LAST }, 248906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "snorm_color", GL_R8_SNORM, tcu::Sampler::MODE_LAST }, 249006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_color", GL_RG32F, tcu::Sampler::MODE_LAST }, 249106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "int_color", GL_R8I, tcu::Sampler::MODE_LAST }, 249206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "uint_color", GL_R16UI, tcu::Sampler::MODE_LAST }, 249306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_depth", GL_DEPTH_COMPONENT24, tcu::Sampler::MODE_DEPTH }, 249406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_depth", GL_DEPTH_COMPONENT32F, tcu::Sampler::MODE_DEPTH }, 249506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "uint_stencil", GL_STENCIL_INDEX8, tcu::Sampler::MODE_STENCIL }, 249606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_color", GL_COMPRESSED_RG11_EAC, tcu::Sampler::MODE_LAST }, 249706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 249806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 249906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const samplerGroup = new tcu::TestCaseGroup(m_testCtx, "sampler", "Sampler param tests"); 250006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry addChild(samplerGroup); 250106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 250206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); ++formatNdx) 250306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 250406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 format = formats[formatNdx].format; 250506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Sampler::DepthStencilMode sampleMode = formats[formatNdx].mode; 250606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* caseName = formats[formatNdx].name; 250706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 250806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry samplerGroup->addChild(new TextureBorderClampFormatCase(m_context, 250906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry caseName, 251006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "", 251106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry format, 251206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry sampleMode, 251306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampFormatCase::STATE_SAMPLER_PARAM, 251406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry SIZE_POT, 251506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry GL_NEAREST, 251606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry TextureBorderClampFormatCase::SAMPLE_FILTER)); 251706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 251806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 251906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 252006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .per_axis_wrap_mode 252106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 252206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 252306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 252406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 252506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool is3D; 252606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } targets[] = 252706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 252806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "texture_2d", false }, 252906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "texture_3d", true }, 253006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 253106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 253206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 253306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 253406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 format; 253506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode; 253606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool supports3D; 253706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } formats[] = 253806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 253906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_color", GL_RG8, tcu::Sampler::MODE_LAST, true }, 254006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "snorm_color", GL_RG8_SNORM, tcu::Sampler::MODE_LAST, true }, 254106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_color", GL_R32F, tcu::Sampler::MODE_LAST, true }, 254206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "int_color", GL_RG16I, tcu::Sampler::MODE_LAST, true }, 254306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "uint_color", GL_R8UI, tcu::Sampler::MODE_LAST, true }, 254406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "unorm_depth", GL_DEPTH_COMPONENT16, tcu::Sampler::MODE_DEPTH, false }, 254506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "float_depth", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_DEPTH, false }, 254606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "uint_stencil", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_STENCIL, false }, 254706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_color", GL_COMPRESSED_RGB8_ETC2, tcu::Sampler::MODE_LAST, false }, 254806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 254906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 255006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 255106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 255206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 sWrap; 255306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 tWrap; 255406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 rWrap; 255506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry bool is3D; 255606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } wrapConfigs[] = 255706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 255806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // 2d configs 255906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_clamp_to_edge_t_clamp_to_border", GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER, GL_NONE, false }, 256006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_repeat_t_clamp_to_border", GL_REPEAT, GL_CLAMP_TO_BORDER, GL_NONE, false }, 256106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_mirrored_repeat_t_clamp_to_border", GL_MIRRORED_REPEAT, GL_CLAMP_TO_BORDER, GL_NONE, false }, 256206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 256306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // 3d configs 256406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_clamp_to_border_t_clamp_to_border_r_clamp_to_border", GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER, true }, 256506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_clamp_to_border_t_clamp_to_border_r_repeat", GL_CLAMP_TO_BORDER, GL_CLAMP_TO_BORDER, GL_REPEAT, true }, 256606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_mirrored_repeat_t_clamp_to_border_r_repeat", GL_MIRRORED_REPEAT, GL_CLAMP_TO_BORDER, GL_REPEAT, true }, 256706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "s_repeat_t_mirrored_repeat_r_clamp_to_border", GL_REPEAT, GL_MIRRORED_REPEAT, GL_CLAMP_TO_BORDER, true }, 256806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 256906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 257006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const perAxisGroup = new tcu::TestCaseGroup(m_testCtx, "per_axis_wrap_mode", "Per-axis wrapping modes"); 257106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry addChild(perAxisGroup); 257206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 257306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .texture_nd 257406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int targetNdx = 0; targetNdx < DE_LENGTH_OF_ARRAY(targets); ++targetNdx) 257506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 257606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const targetGroup = new tcu::TestCaseGroup(m_testCtx, targets[targetNdx].name, "Texture target test"); 257706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry perAxisGroup->addChild(targetGroup); 257806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 257906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .format 258006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); ++formatNdx) 258106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 258206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (targets[targetNdx].is3D && !formats[formatNdx].supports3D) 258306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry continue; 258406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 258506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 258606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 format = formats[formatNdx].format; 258706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const tcu::Sampler::DepthStencilMode sampleMode = formats[formatNdx].mode; 258806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool coreFilterable = isCoreFilterableFormat(format, sampleMode); 258906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const formatGroup = new tcu::TestCaseGroup(m_testCtx, formats[formatNdx].name, "Format test"); 259006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry targetGroup->addChild(formatGroup); 259106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 259206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .linear 259306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .nearest 259406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .gather 259506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int filterNdx = 0; filterNdx < DE_LENGTH_OF_ARRAY(s_filters); ++filterNdx) 259606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 259706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 filter = s_filters[filterNdx].filter; 259806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 259906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!coreFilterable && filterRequiresFilterability(filter)) 260006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 260106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // skip linear on pure integers 260206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry continue; 260306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 260406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else if (s_filters[filterNdx].sampling == TextureBorderClampTest::SAMPLE_GATHER && targets[targetNdx].is3D) 260506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 260606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // skip gather on 3d 260706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry continue; 260806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 260906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 261006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 261106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const filteringGroup = new tcu::TestCaseGroup(m_testCtx, s_filters[filterNdx].name, "Tests with specific filter"); 261206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formatGroup->addChild(filteringGroup); 261306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 261406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .s_XXX_t_XXX(_r_XXX) 261506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int wrapNdx = 0; wrapNdx < DE_LENGTH_OF_ARRAY(wrapConfigs); ++wrapNdx) 261606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 261706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (wrapConfigs[wrapNdx].is3D != targets[targetNdx].is3D) 261806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry continue; 261906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 262006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 262106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int sizeNdx = 0; sizeNdx < 2; ++sizeNdx) 262206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 262306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* const wrapName = wrapConfigs[wrapNdx].name; 262406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isNpotCase = (sizeNdx == 1); 262506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* const sizeNameExtension = (isNpotCase) ? ("_npot") : ("_pot"); 262606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const SizeType size = (isNpotCase) ? (SIZE_NPOT) : (SIZE_POT); 262706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 262806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry if (!targets[targetNdx].is3D) 262906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry filteringGroup->addChild(new TextureBorderClampPerAxisCase2D(m_context, 263006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (std::string() + wrapName + sizeNameExtension).c_str(), 263106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "", 263206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry format, 263306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry sampleMode, 263406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry size, 263506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry filter, 263606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry wrapConfigs[wrapNdx].sWrap, 263706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry wrapConfigs[wrapNdx].tWrap, 263806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry s_filters[filterNdx].sampling)); 263906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry else 2640ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry { 2641ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry DE_ASSERT(sampleMode == tcu::Sampler::MODE_LAST); 264206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry filteringGroup->addChild(new TextureBorderClampPerAxisCase3D(m_context, 264306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry (std::string() + wrapName + sizeNameExtension).c_str(), 264406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "", 264506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry format, 264606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry size, 264706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry filter, 264806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry wrapConfigs[wrapNdx].sWrap, 264906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry wrapConfigs[wrapNdx].tWrap, 265006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry wrapConfigs[wrapNdx].rWrap)); 2651ccab5bf5fd11219cd858aebe769052083b0ddf55Jarkko Pöyry } 265206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 265906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 266006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 266106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 266206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // .depth_compare_mode 266306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 266406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 266506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 266606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 266706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 format; 266806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } formats[] = 266906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 267006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component16", GL_DEPTH_COMPONENT16 }, 267106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component24", GL_DEPTH_COMPONENT24 }, 267206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth24_stencil8", GL_DEPTH24_STENCIL8 }, 267306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth32f_stencil8", GL_DEPTH32F_STENCIL8 }, 267406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 267506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 267606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const compareGroup = new tcu::TestCaseGroup(m_testCtx, "depth_compare_mode", "Tests depth compare mode"); 267706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry addChild(compareGroup); 267806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 267906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); ++formatNdx) 268006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 268106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 format = formats[formatNdx].format; 268206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const formatGroup = new tcu::TestCaseGroup(m_testCtx, formats[formatNdx].name, "Format test"); 268306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 268406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry compareGroup->addChild(formatGroup); 268506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 268606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // (format).(linear|nearest|gather)_(pot|npot) 268706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int filterNdx = 0; filterNdx < DE_LENGTH_OF_ARRAY(s_filters); ++filterNdx) 268806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int sizeNdx = 0; sizeNdx < 2; ++sizeNdx) 268906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 269006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const bool isNpotCase = (sizeNdx == 1); 269106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* const sizeName = (isNpotCase) ? ("size_npot") : ("size_pot"); 269206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const SizeType sizeType = (isNpotCase) ? (SIZE_NPOT) : (SIZE_POT); 269306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const std::string caseName = std::string() + s_filters[filterNdx].name + "_" + sizeName; 269406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const deUint32 filter = s_filters[filterNdx].filter; 269506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 269606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formatGroup->addChild(new TextureBorderClampDepthCompareCase(m_context, 269706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry caseName.c_str(), 269806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "", 269906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry format, 270006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry sizeType, 270106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry filter, 270206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry s_filters[filterNdx].sampling)); 270306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 270406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 270506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 270606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 270706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry // unused channels (A in rgb, G in stencil etc.) 270806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 270906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry static const struct 271006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 271106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry const char* name; 271206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry deUint32 format; 271306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::Sampler::DepthStencilMode mode; 271406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } formats[] = 271506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 271606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r8", GL_R8, tcu::Sampler::MODE_LAST }, 271706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg8_snorm", GL_RG8_SNORM, tcu::Sampler::MODE_LAST }, 271806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rgb8", GL_RGB8, tcu::Sampler::MODE_LAST }, 271906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "rg32f", GL_RG32F, tcu::Sampler::MODE_LAST }, 272006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "r16i", GL_RG16I, tcu::Sampler::MODE_LAST }, 272106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "luminance", GL_LUMINANCE, tcu::Sampler::MODE_LAST }, 272206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "alpha", GL_ALPHA, tcu::Sampler::MODE_LAST }, 272306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "luminance_alpha", GL_LUMINANCE_ALPHA, tcu::Sampler::MODE_LAST }, 272406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component16", GL_DEPTH_COMPONENT16, tcu::Sampler::MODE_DEPTH }, 272506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth_component32f", GL_DEPTH_COMPONENT32F, tcu::Sampler::MODE_DEPTH }, 272606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "stencil_index8", GL_STENCIL_INDEX8, tcu::Sampler::MODE_STENCIL }, 272706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth32f_stencil8_sample_depth", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_DEPTH }, 272806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth32f_stencil8_sample_stencil", GL_DEPTH32F_STENCIL8, tcu::Sampler::MODE_STENCIL }, 272906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth24_stencil8_sample_depth", GL_DEPTH24_STENCIL8, tcu::Sampler::MODE_DEPTH }, 273006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "depth24_stencil8_sample_stencil", GL_DEPTH24_STENCIL8, tcu::Sampler::MODE_STENCIL }, 273106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { "compressed_r11_eac", GL_COMPRESSED_R11_EAC, tcu::Sampler::MODE_LAST }, 273206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry }; 273306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 273406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry tcu::TestCaseGroup* const unusedGroup = new tcu::TestCaseGroup(m_testCtx, "unused_channels", "Tests channels that are not present in the internal format"); 273506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry addChild(unusedGroup); 273606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 273706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry for (int formatNdx = 0; formatNdx < DE_LENGTH_OF_ARRAY(formats); ++formatNdx) 273806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry { 273906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry unusedGroup->addChild(new TextureBorderClampUnusedChannelCase(m_context, 274006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formats[formatNdx].name, 274106fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry "", 274206fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formats[formatNdx].format, 274306fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry formats[formatNdx].mode)); 274406fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 274506fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry } 274606fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} 274706fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry 274806fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} // Functional 274906fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} // gles31 275006fe4fe2a28c6c5a7cab7431d313648cf8054943Jarkko Pöyry} // deqp 2751