13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.1 Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Texture level state query tests 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es31fTextureLevelStateQueryTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsStateQueryUtil.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluCallLogWrapper.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluTextureUtil.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluStrUtil.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluContextInfo.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTextureUtil.hpp" 35cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "tcuFormatUtil.hpp" 36c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#include "deStringUtil.hpp" 37c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#include "deUniquePtr.hpp" 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles31 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryusing namespace gls::StateQueryUtil; 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 51c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool textureTypeHasDepth (glw::GLenum textureBindTarget) 52c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 53c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry switch (textureBindTarget) 54c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 55c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D: return false; 56c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_3D: return true; 57c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_ARRAY: return true; 58c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_CUBE_MAP: return false; 59c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_MULTISAMPLE: return false; 60c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: return true; 61c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_BUFFER: return false; 62c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_CUBE_MAP_ARRAY: return true; 63c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry default: 64c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(DE_FALSE); 65c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return false; 66c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 67c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 68c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 69c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool textureTypeHasHeight (glw::GLenum textureBindTarget) 70c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 71c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry switch (textureBindTarget) 72c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 73c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D: return true; 74c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_3D: return true; 75c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_ARRAY: return true; 76c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_CUBE_MAP: return true; 77c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_MULTISAMPLE: return true; 78c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: return true; 79c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_BUFFER: return false; 80c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_CUBE_MAP_ARRAY: return true; 81c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry default: 82c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(DE_FALSE); 83c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return false; 84c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 85c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 86c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 87c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic const char* getTextureTargetExtension (glw::GLenum target) 88c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 89c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry switch (target) 90c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 91c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_MULTISAMPLE_ARRAY: return "GL_OES_texture_storage_multisample_2d_array"; 92c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_BUFFER: return "GL_EXT_texture_buffer"; 93c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_CUBE_MAP_ARRAY: return "GL_EXT_texture_cube_map_array"; 94c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry default: 95c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(DE_FALSE); 96c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return DE_NULL; 97c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 98c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 99c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 100c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isCoreTextureTarget (glw::GLenum target) 101c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 102c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry switch (target) 103c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 104c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D: 105c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_3D: 106c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_ARRAY: 107c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_CUBE_MAP: 108c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case GL_TEXTURE_2D_MULTISAMPLE: 109c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return true; 110c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 111c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry default: 112c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return false; 113c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 114c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 115c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct TextureGenerationSpec 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct TextureLevelSpec 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int width; 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int height; 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int depth; 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int level; 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glw::GLenum internalFormat; 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool compressed; 126c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 127c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelSpec (void) 128c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : width (0) 129c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , height (0) 130c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , depth (0) 131c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , level (0) 132c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , internalFormat (GL_RGBA) 133c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , compressed (false) 134c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 135c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glw::GLenum bindTarget; 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glw::GLenum queryTarget; 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool immutable; 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool fixedSamplePos; // !< fixed sample pos argument for multisample textures 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int sampleCount; 143c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry int texBufferDataOffset; 144c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry int texBufferDataSize; 145c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool bindWholeArray; 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<TextureLevelSpec> levels; 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string description; 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 149c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec (void) 150c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : immutable (true) 151c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , fixedSamplePos (true) 152c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , sampleCount (0) 153c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , texBufferDataOffset (0) 154c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , texBufferDataSize (256) 155c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , bindWholeArray (false) 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 158c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct IntegerPrinter 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static std::string getIntegerName (int v) { return de::toString(v); } 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static std::string getFloatName (float v) { return de::toString(v); } 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystruct PixelFormatPrinter 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static std::string getIntegerName (int v) { return de::toString(glu::getPixelFormatStr(v)); } 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static std::string getFloatName (float v) { return de::toString(glu::getPixelFormatStr((int)v)); } 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate <typename Printer> 172cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrystatic bool verifyTextureLevelParameterEqualWithPrinter (glu::CallLogWrapper& gl, glw::GLenum target, int level, glw::GLenum pname, int refValue, QueryType type) 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 174cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry QueriedState state; 175cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (gl.getLog(), " // ERROR: "); 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 177cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.getLog() << tcu::TestLog::Message << "Verifying " << glu::getTextureLevelParameterStr(pname) << ", expecting " << Printer::getIntegerName(refValue) << tcu::TestLog::EndMessage; 178cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry queryTextureLevelState(result, gl, type, target, level, pname, state); 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 180cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (state.isUndefined()) 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 183cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyInteger(result, state, refValue); 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 185cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return result.getResult() == QP_TEST_RESULT_LAST; 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 188cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrystatic bool verifyTextureLevelParameterEqual (glu::CallLogWrapper& gl, glw::GLenum target, int level, glw::GLenum pname, int refValue, QueryType type) 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return verifyTextureLevelParameterEqualWithPrinter<IntegerPrinter>(gl, target, level, pname, refValue, type); 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 193cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrystatic bool verifyTextureLevelParameterInternalFormatEqual (glu::CallLogWrapper& gl, glw::GLenum target, int level, glw::GLenum pname, int refValue, QueryType type) 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return verifyTextureLevelParameterEqualWithPrinter<PixelFormatPrinter>(gl, target, level, pname, refValue, type); 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 198cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrystatic bool verifyTextureLevelParameterGreaterOrEqual (glu::CallLogWrapper& gl, glw::GLenum target, int level, glw::GLenum pname, int refValue, QueryType type) 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 200cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry QueriedState state; 201cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (gl.getLog(), " // ERROR: "); 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 203cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.getLog() << tcu::TestLog::Message << "Verifying " << glu::getTextureLevelParameterStr(pname) << ", expecting " << refValue << " or greater" << tcu::TestLog::EndMessage; 204cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry queryTextureLevelState(result, gl, type, target, level, pname, state); 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 206cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (state.isUndefined()) 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 209cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyIntegerMin(result, state, refValue); 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 211cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return result.getResult() == QP_TEST_RESULT_LAST; 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 214cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrystatic bool verifyTextureLevelParameterInternalFormatAnyOf (glu::CallLogWrapper& gl, glw::GLenum target, int level, glw::GLenum pname, const int* refValues, int numRefValues, QueryType type) 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 216cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry QueriedState state; 217cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (gl.getLog(), " // ERROR: "); 218cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Log what we try to do 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::MessageBuilder msg(&gl.getLog()); 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << "Verifying " << glu::getTextureLevelParameterStr(pname) << ", expecting any of {"; 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < numRefValues; ++ndx) 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (ndx != 0) 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << ", "; 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << glu::getPixelFormatStr(refValues[ndx]); 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << "}"; 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << tcu::TestLog::EndMessage; 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 234cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry queryTextureLevelState(result, gl, type, target, level, pname, state); 235cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (state.isUndefined()) 236cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return false; 237cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // verify 239cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry switch (state.getType()) 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 241cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry case DATATYPE_INTEGER: 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 243cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < numRefValues; ++ndx) 244cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (state.getIntAccess() == refValues[ndx]) 245cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return true; 246cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 247cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.getLog() << tcu::TestLog::Message << "Error: got " << state.getIntAccess() << ", (" << glu::getPixelFormatStr(state.getIntAccess()) << ")" << tcu::TestLog::EndMessage; 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 250cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry case DATATYPE_FLOAT: 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 252cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < numRefValues; ++ndx) 253cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (state.getFloatAccess() == (float)refValues[ndx]) 254cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return true; 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 256cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.getLog() << tcu::TestLog::Message << "Error: got " << state.getFloatAccess() << ", (" << glu::getPixelFormatStr((int)state.getFloatAccess()) << ")" << tcu::TestLog::EndMessage; 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 259cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry default: 260cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry DE_ASSERT(DE_FALSE); 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return false; 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 265c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isDepthFormat (const tcu::TextureFormat& fmt) 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 267c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return fmt.order == tcu::TextureFormat::D || fmt.order == tcu::TextureFormat::DS; 268c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 270c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isColorRenderableFormat (glw::GLenum internalFormat) 271c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 272c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return internalFormat == GL_RGB565 || 273c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA4 || 274c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB5_A1 || 275c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB10_A2 || 276c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB10_A2UI || 277c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_SRGB8_ALPHA8 || 278c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R8 || 279c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG8 || 280c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB8 || 281c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA8 || 282c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R8I || 283c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG8I || 284c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA8I || 285c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R8UI || 286c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG8UI || 287c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA8UI || 288c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R16I || 289c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG16I || 290c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA16I || 291c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R16UI || 292c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG16UI || 293c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA16UI || 294c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R32I || 295c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG32I || 296c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA32I || 297c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R32UI || 298c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG32UI || 299c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA32UI; 300c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 302c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isRenderableFormat (glw::GLenum internalFormat) 303c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 304c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return isColorRenderableFormat(internalFormat) || 305c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_DEPTH_COMPONENT16 || 306c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_DEPTH_COMPONENT24 || 307c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_DEPTH_COMPONENT32F || 308c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_DEPTH24_STENCIL8 || 309c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_DEPTH32F_STENCIL8; 310c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 311c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 312c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isTextureBufferFormat (glw::GLenum internalFormat) 313c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 314c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return internalFormat == GL_R8 || 315c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R16F || 316c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R32F || 317c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R8I || 318c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R16I || 319c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R32I || 320c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R8UI || 321c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R16UI || 322c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_R32UI || 323c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG8 || 324c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG16F || 325c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG32F || 326c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG8I || 327c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG16I || 328c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG32I || 329c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG8UI || 330c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG16UI || 331c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RG32UI || 332c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB32F || 333c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB32I || 334c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGB32UI || 335c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA8 || 336c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA16F || 337c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA32F || 338c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA8I || 339c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA16I || 340c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA32I || 341c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA8UI || 342c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA16UI || 343c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry internalFormat == GL_RGBA32UI; 344c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 345c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 346c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isLegalFormatForTarget (glw::GLenum target, glw::GLenum format) 347c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 348c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const tcu::TextureFormat fmt = glu::mapGLInternalFormat(format); 349c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 350c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (target == GL_TEXTURE_3D && isDepthFormat(fmt)) 351c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return false; 352c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if ((target == GL_TEXTURE_2D_MULTISAMPLE || target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) && !isRenderableFormat(format)) 353c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return false; 354c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (target == GL_TEXTURE_BUFFER || !isTextureBufferFormat(format)) 355c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return false; 356c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return true; 357c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 358c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 359c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isCompressionSupportedForTarget (glw::GLenum target) 360c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 361c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return target == GL_TEXTURE_2D || target == GL_TEXTURE_2D_ARRAY; 362c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 363c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 364c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool isMultisampleTarget (glw::GLenum target) 365c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 366c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return target == GL_TEXTURE_2D_MULTISAMPLE || target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY; 367c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 368c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 369c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic bool targetSupportsMipLevels (glw::GLenum target) 370c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 371c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return target != GL_TEXTURE_2D_MULTISAMPLE && 372c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry target != GL_TEXTURE_2D_MULTISAMPLE_ARRAY && 373c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry target != GL_TEXTURE_BUFFER; 374c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 376c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic int getPixelSize (glw::GLenum internalFormat) 377c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 378c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const tcu::TextureFormat fmt = glu::mapGLInternalFormat(internalFormat); 379c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return fmt.getPixelSize(); 380c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 381c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 382c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic void generateColorTextureGenerationGroup (std::vector<TextureGenerationSpec>& group, glw::GLenum target, int maxSamples, glw::GLenum internalFormat) 383c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 384c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum queryTarget = (target == GL_TEXTURE_CUBE_MAP) ? (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) : (target); 385c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 386c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // initial 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec texGen; 389c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 390c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 391c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.sampleCount = 0; 393c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", initial values"; 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group.push_back(texGen); 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 398c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // ms targets 399c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (isMultisampleTarget(target)) 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 401c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 402c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 403c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 405c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 406c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 407c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 408c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.sampleCount = 1; 409c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.fixedSamplePos = false; 410c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", low sample count"; 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 412c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 16; 413c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.height = 16; 4143e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(texGen.bindTarget)) ? (6) : (1); 415c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 0; 416c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 417c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 419c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 420c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 421c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 422c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 423c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 424c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 426c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 427c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 428c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 429c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.sampleCount = maxSamples; 430c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.fixedSamplePos = false; 431c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", high sample count"; 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 433c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 32; 434c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.height = 32; 4353e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(texGen.bindTarget)) ? (6) : (1); 436c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 0; 437c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 438c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 440c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 441c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 442c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 443c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 444c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 445c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 447c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 448c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 449c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 450c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.sampleCount = maxSamples; 451c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.fixedSamplePos = true; 452c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", fixed sample positions"; 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 454c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 32; 455c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.height = 32; 4563e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(texGen.bindTarget)) ? (6) : (1); 457c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 0; 458c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 459c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 461c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 462c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 463c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 464c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 465c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else if (target == GL_TEXTURE_BUFFER) 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 467c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // whole buffer 468c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 469c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 470c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 471c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const int baseSize = getPixelSize(internalFormat); 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 473c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 474c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 475c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 476c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", whole buffer"; 477c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.texBufferDataOffset = 0; 478c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.texBufferDataSize = 32 * baseSize + (baseSize - 1); 479c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindWholeArray = true; 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 481c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 32; 4823e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.height = 1; 4833e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = 1; 484c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 0; 485c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 486c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 487c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 488c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 489c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 490c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 491c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // partial buffer 492c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 493c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 494c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 495c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const int baseSize = getPixelSize(internalFormat); 496c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 497c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 498c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 499c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 500c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", partial buffer"; 501c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.texBufferDataOffset = 256; 502c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.texBufferDataSize = 16 * baseSize + (baseSize - 1); 503c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindWholeArray = false; 504c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 505c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 16; 5063e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.height = 1; 5073e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = 1; 508c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 0; 509c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 510c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 511c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 512c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 513c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 514c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 515c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 516c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 517c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 518c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // immutable 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 520c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec::TextureLevelSpec level; 522c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 523c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 524c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 525c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 526c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", immutable"; 527c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.width = 32; 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.height = 32; 5303e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(texGen.bindTarget)) ? (6) : (1); 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.level = 0; 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.internalFormat = internalFormat; 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.compressed = false; 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.levels.push_back(level); 536c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 538c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // mutable 539c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 540c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 541c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 543c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 544c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 545c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = false; 546c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", mutable"; 547c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 548c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 16; 549c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.height = (target == GL_TEXTURE_CUBE_MAP || target == GL_TEXTURE_CUBE_MAP_ARRAY) ? (16) : (64); 5503e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(texGen.bindTarget)) ? (6) : (1); 551c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 0; 552c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 553c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 554c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 555c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 556c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 557c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 558c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // mip3 559c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 560c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 561c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec::TextureLevelSpec level; 562c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 563c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 564c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 565c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = false; 566c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", mip level 3"; 567c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 568c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.width = 4; 569c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.height = (target == GL_TEXTURE_CUBE_MAP || target == GL_TEXTURE_CUBE_MAP_ARRAY) ? (4) : (8); 5703e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(texGen.bindTarget)) ? (6) : (1); 571c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.level = 3; 572c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.internalFormat = internalFormat; 573c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry level.compressed = false; 574c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 575c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.levels.push_back(level); 576c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 577c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 581c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic void generateInternalFormatTextureGenerationGroup (std::vector<TextureGenerationSpec>& group, glw::GLenum target) 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 583c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum queryTarget = (target == GL_TEXTURE_CUBE_MAP) ? (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) : (target); 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Internal formats 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const glw::GLenum internalFormats[] = 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_R8, GL_R8_SNORM, GL_RG8, GL_RG8_SNORM, GL_RGB8, GL_RGB8_SNORM, GL_RGB565, GL_RGBA4, GL_RGB5_A1, 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_RGBA8, GL_RGBA8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, GL_SRGB8, GL_SRGB8_ALPHA8, GL_R16F, GL_RG16F, 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_RGB16F, GL_RGBA16F, GL_R32F, GL_RG32F, GL_RGB32F, GL_RGBA32F, GL_R11F_G11F_B10F, GL_RGB9_E5, GL_R8I, 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_R8UI, GL_R16I, GL_R16UI, GL_R32I, GL_R32UI, GL_RG8I, GL_RG8UI, GL_RG16I, GL_RG16UI, GL_RG32I, GL_RG32UI, 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_RGB8I, GL_RGB8UI, GL_RGB16I, GL_RGB16UI, GL_RGB32I, GL_RGB32UI, GL_RGBA8I, GL_RGBA8UI, GL_RGBA16I, 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_RGBA16UI, GL_RGBA32I, GL_RGBA32UI, 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT16, 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GL_DEPTH32F_STENCIL8, GL_DEPTH24_STENCIL8 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 599c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // initial 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec texGen; 602c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 603c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.immutable = true; 605c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.sampleCount = 0; 606c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.fixedSamplePos = true; 607c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", initial values"; 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group.push_back(texGen); 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 612c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // test all formats 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int internalFormatNdx = 0; internalFormatNdx < DE_LENGTH_OF_ARRAY(internalFormats); ++internalFormatNdx) 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 615c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!isLegalFormatForTarget(target, internalFormats[internalFormatNdx])) 616c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry continue; 617c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 618c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const int baseSize = getPixelSize(internalFormats[internalFormatNdx]); 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec texGen; 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec::TextureLevelSpec level; 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 622c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 623c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.immutable = true; 625c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.sampleCount = (isMultisampleTarget(target) ? (1) : (0)); 626c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", internal format " + glu::getPixelFormatName(internalFormats[internalFormatNdx]); 627c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 628c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (target == GL_TEXTURE_BUFFER) 629c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 630c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.texBufferDataOffset = 0; 631c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.texBufferDataSize = 32 * baseSize + (baseSize - 1); 632c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindWholeArray = true; 633c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.width = 32; 6363e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.height = (textureTypeHasHeight(target)) ? (32) : (1); 6373e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(target)) ? (6) : (1); 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.level = 0; 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.internalFormat = internalFormats[internalFormatNdx]; 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.compressed = false; 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.levels.push_back(level); 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group.push_back(texGen); 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 646c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // test mutable rgba8 with mip level 3 647c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (targetSupportsMipLevels(target)) 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec texGen; 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec::TextureLevelSpec level; 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 652c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 653c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.immutable = false; 655c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", internal format GL_RGBA8, mip level 3"; 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.width = 32; 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.height = 32; 6593e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (textureTypeHasDepth(target)) ? (6) : (1); 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.level = 3; 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.internalFormat = GL_RGBA8; 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.compressed = false; 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.levels.push_back(level); 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group.push_back(texGen); 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 669c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic void generateCompressedTextureGenerationGroup (std::vector<TextureGenerationSpec>& group, glw::GLenum target) 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 671c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum queryTarget = (target == GL_TEXTURE_CUBE_MAP) ? (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) : (target); 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 673c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // initial 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec texGen; 676c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 677c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.immutable = true; 679c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", initial values"; 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group.push_back(texGen); 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // compressed 685c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (isCompressionSupportedForTarget(target)) 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec texGen; 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TextureGenerationSpec::TextureLevelSpec level; 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 690c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 691c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.immutable = false; 693c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", compressed"; 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.width = 32; 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.height = 32; 6973e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry level.depth = (target == GL_TEXTURE_2D_ARRAY) ? (2) : (1); 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.level = 0; 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.internalFormat = GL_COMPRESSED_RGB8_ETC2; 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry level.compressed = true; 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texGen.levels.push_back(level); 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group.push_back(texGen); 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 707c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic void generateTextureBufferGenerationGroup (std::vector<TextureGenerationSpec>& group, glw::GLenum target) 708c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 709c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum queryTarget = (target == GL_TEXTURE_CUBE_MAP) ? (GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) : (target); 710c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 711c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // initial 712c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 713c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureGenerationSpec texGen; 714c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.bindTarget = target; 715c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.queryTarget = queryTarget; 716c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.immutable = true; 717c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.sampleCount = 0; 718c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry texGen.description = glu::getTextureTargetStr(target).toString() + ", initial values"; 719c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 720c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry group.push_back(texGen); 721c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 722c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 723c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // actual specification tests are in texture_buffer tests, no need to do them here too 724c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 725c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 726c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrybool applyTextureGenerationSpec (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec, glw::GLuint& texBuffer) 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 728c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool allOk = true; 729c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(!(spec.immutable && spec.levels.size() > 1)); // !< immutable textures have only one level 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glu::TransferFormat transferFormat = (spec.levels[levelNdx].compressed) ? (glu::TransferFormat()) : (glu::getTransferFormat(glu::mapGLInternalFormat(spec.levels[levelNdx].internalFormat))); 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D) 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexStorage2D(spec.bindTarget, 1, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height); 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_3D) 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexStorage3D(spec.bindTarget, 1, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth); 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D_ARRAY) 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexStorage3D(spec.bindTarget, 1, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth); 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_CUBE_MAP) 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexStorage2D(spec.bindTarget, 1, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height); 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D_MULTISAMPLE) 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexStorage2DMultisample(spec.bindTarget, spec.sampleCount, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, (spec.fixedSamplePos) ? (GL_TRUE) : (GL_FALSE)); 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexStorage3DMultisample(spec.bindTarget, spec.sampleCount, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth, (spec.fixedSamplePos) ? (GL_TRUE) : (GL_FALSE)); 748c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_CUBE_MAP_ARRAY) 749c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glTexStorage3D(spec.bindTarget, 1, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth); 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D) 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexImage2D(spec.bindTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, 0, transferFormat.format, transferFormat.dataType, DE_NULL); 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_3D) 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexImage3D(spec.bindTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth, 0, transferFormat.format, transferFormat.dataType, DE_NULL); 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D_ARRAY) 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexImage3D(spec.bindTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth, 0, transferFormat.format, transferFormat.dataType, DE_NULL); 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_CUBE_MAP) 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glTexImage2D(spec.queryTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, 0, transferFormat.format, transferFormat.dataType, DE_NULL); 758c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else if (!spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_CUBE_MAP_ARRAY) 759c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glTexImage3D(spec.bindTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth, 0, transferFormat.format, transferFormat.dataType, DE_NULL); 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (!spec.immutable && spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D) 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(spec.levels[levelNdx].width == 32); 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(spec.levels[levelNdx].height == 32); 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(spec.levels[levelNdx].internalFormat == GL_COMPRESSED_RGB8_ETC2); 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry static const deUint8 buffer[64 * 8] = { 0 }; 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glCompressedTexImage2D(spec.bindTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, 0, sizeof(buffer), buffer); 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 769c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else if (!spec.immutable && spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_2D_ARRAY) 770c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 771c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(spec.levels[levelNdx].width == 32); 772c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(spec.levels[levelNdx].height == 32); 773c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(spec.levels[levelNdx].depth == 2); 774c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(spec.levels[levelNdx].internalFormat == GL_COMPRESSED_RGB8_ETC2); 775c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 776c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const deUint8 buffer[64 * 8 * 2] = { 0 }; 777c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glCompressedTexImage3D(spec.bindTarget, spec.levels[levelNdx].level, spec.levels[levelNdx].internalFormat, spec.levels[levelNdx].width, spec.levels[levelNdx].height, spec.levels[levelNdx].depth, 0, sizeof(buffer), buffer); 778c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 779c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else if (spec.immutable && !spec.levels[levelNdx].compressed && spec.bindTarget == GL_TEXTURE_BUFFER) 780c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 781c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glGenBuffers(1, &texBuffer); 782c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glBindBuffer(GL_TEXTURE_BUFFER, texBuffer); 783c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 784c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (spec.bindWholeArray) 785c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 786c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glBufferData(GL_TEXTURE_BUFFER, spec.texBufferDataSize, DE_NULL, GL_STATIC_DRAW); 787c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glTexBuffer(GL_TEXTURE_BUFFER, spec.levels[levelNdx].internalFormat, texBuffer); 788c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 789c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 790c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 791c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glBufferData(GL_TEXTURE_BUFFER, spec.texBufferDataOffset + spec.texBufferDataSize, DE_NULL, GL_STATIC_DRAW); 792c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glTexBufferRange(GL_TEXTURE_BUFFER, spec.levels[levelNdx].internalFormat, texBuffer, spec.texBufferDataOffset, spec.texBufferDataSize); 793c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 794c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 798c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 799c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum err = gl.glGetError(); 800c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (err != GL_NO_ERROR) 801c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 802c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.getLog() << tcu::TestLog::Message 803c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry << "Texture specification failed, got " + glu::getErrorStr(err).toString() 804c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry << tcu::TestLog::EndMessage; 805c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk = false; 806c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 807c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 809c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 810c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return allOk; 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelCase : public TestCase 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 816c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type); 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~TextureLevelCase (void); 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void deinit (void); 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void); 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 824c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void getFormatSamples (glw::GLenum internalFormat, std::vector<int>& samples); 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool testConfig (const TextureGenerationSpec& spec); 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) = 0; 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void generateTestIterations (std::vector<TextureGenerationSpec>& iterations) = 0; 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 829cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_type; 830c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum m_target; 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glw::GLuint m_texture; 832c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry glw::GLuint m_texBuffer; 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_iteration; 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<TextureGenerationSpec> m_iterations; 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_allIterationsOk; 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<int> m_failedIterations; 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 841c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryTextureLevelCase::TextureLevelCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (ctx, name, desc) 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_type (type) 844c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , m_target (target) 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (0) 846c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , m_texBuffer (0) 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_iteration (0) 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_allIterationsOk (true) 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8523c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTextureLevelCase::~TextureLevelCase (void) 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deinit(); 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TextureLevelCase::init (void) 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 859c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!isCoreTextureTarget(m_target)) 860c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 861c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const char* const targetExtension = getTextureTargetExtension(m_target); 862c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 863c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!m_context.getContextInfo().isExtensionSupported(targetExtension)) 864c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires " + std::string(targetExtension) + " extension"); 865c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 866c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry generateTestIterations(m_iterations); 868c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 869c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int iterationNdx = 0; iterationNdx < (int)m_iterations.size(); ++iterationNdx) 870c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(m_iterations[iterationNdx].bindTarget == m_target); 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TextureLevelCase::deinit (void) 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_texture) 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_context.getRenderContext().getFunctions().deleteTextures(1, &m_texture); 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture = 0; 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 880c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (m_texBuffer) 881c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 882c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_context.getRenderContext().getFunctions().deleteTextures(1, &m_texBuffer); 883c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_texBuffer = 0; 884c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 887c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryvoid TextureLevelCase::getFormatSamples (glw::GLenum internalFormat, std::vector<int>& samples) 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glw::Functions gl = m_context.getRenderContext().getFunctions(); 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int sampleCount = -1; 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 892c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!isMultisampleTarget(m_target)) 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return; 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 895c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.getInternalformativ(m_target, internalFormat, GL_NUM_SAMPLE_COUNTS, 1, &sampleCount); 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (sampleCount < 0) 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::TestError("internal format query failed"); 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry samples.resize(sampleCount); 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (sampleCount > 0) 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 904c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.getInternalformativ(m_target, internalFormat, GL_SAMPLES, sampleCount, &samples[0]); 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "get max samples"); 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9093c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTextureLevelCase::IterateResult TextureLevelCase::iterate (void) 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const bool result = testConfig(m_iterations[m_iteration]); 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!result) 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_failedIterations.push_back(m_iteration); 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_allIterationsOk = false; 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (++m_iteration < (int)m_iterations.size()) 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return CONTINUE; 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_allIterationsOk) 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::MessageBuilder msg(&m_testCtx.getLog()); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << "Following iteration(s) failed: "; 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)m_failedIterations.size(); ++ndx) 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (ndx) 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << ", "; 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << (m_failedIterations[ndx] + 1); 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry msg << tcu::TestLog::EndMessage; 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "One or more iterations failed"); 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool TextureLevelCase::testConfig (const TextureGenerationSpec& spec) 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Iteration", std::string() + "Iteration " + de::toString(m_iteration+1) + "/" + de::toString((int)m_iterations.size()) + " - " + spec.description); 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool result; 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableLogging(true); 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glGenTextures(1, &m_texture); 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glBindTexture(spec.bindTarget, m_texture); 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Set the state 955c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry applyTextureGenerationSpec(gl, spec, m_texBuffer); 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Verify the state 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry result = checkTextureState(gl, spec); 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.glDeleteTextures(1, &m_texture); 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture = 0; 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 963c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (m_texBuffer) 964c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 9653e4878e925a4ce7bc2052494f904f0ca49d4f2c4Jarkko Pöyry gl.glDeleteBuffers(1, &m_texBuffer); 966c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_texture = 0; 967c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 968c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return result; 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*! 973c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry * \brief Test texture target 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelCommonCase : public TextureLevelCase 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 978c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelCommonCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type); 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 981c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry virtual void generateTestIterations (std::vector<TextureGenerationSpec>& iterations); 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 984c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryTextureLevelCommonCase::TextureLevelCommonCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 985c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase(ctx, name, desc, target, type) 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TextureLevelCommonCase::generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 991c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLenum internalFormat = GL_RGBA8; 992c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry int maxSamples; 993c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<int> samples; 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 995c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry getFormatSamples(internalFormat, samples); 996c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (samples.empty()) 997c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry maxSamples = -1; 998c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 999c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry maxSamples = samples[0]; 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1001c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateColorTextureGenerationGroup(iterations, m_target, maxSamples, internalFormat); 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1004c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureLevelSampleCase : public TextureLevelCommonCase 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1007c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelSampleCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1008c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCommonCase(ctx, name, desc, target, type) 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = (spec.levels.empty()) ? (0) : (spec.levels[0].level); 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = (spec.levels.empty()) ? (0) : (spec.sampleCount); 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return verifyTextureLevelParameterGreaterOrEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_SAMPLES, refValue, m_type); 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1022c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureLevelFixedSamplesCase : public TextureLevelCommonCase 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1025c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelFixedSamplesCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1026c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCommonCase(ctx, name, desc, target, type) 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1033a3ca3ec3be857645c3811984738ffe92941bf7d8Jarkko Pöyry const int queryLevel = (spec.levels.empty()) ? (0) : (spec.levels[0].level); 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = (spec.levels.empty()) ? (1) : ((spec.fixedSamplePos) ? (1) : (0)); 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, refValue, m_type); 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelWidthCase : public TextureLevelCommonCase 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1043c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelWidthCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1044c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCommonCase(ctx, name, desc, target, type) 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int initialValue = 0; 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = 0; 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = initialValue; 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_WIDTH, refValue, m_type); 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = spec.levels[levelNdx].width; 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_WIDTH, refValue, m_type); 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelHeightCase : public TextureLevelCommonCase 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1079c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelHeightCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1080c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCommonCase(ctx, name, desc, target, type) 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int initialValue = 0; 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = 0; 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = initialValue; 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_HEIGHT, refValue, m_type); 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = spec.levels[levelNdx].height; 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_HEIGHT, refValue, m_type); 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelDepthCase : public TextureLevelCommonCase 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1115c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelDepthCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1116c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCommonCase(ctx, name, desc, target, type) 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int initialValue = 0; 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = 0; 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = initialValue; 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_DEPTH, refValue, m_type); 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = spec.levels[levelNdx].depth; 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_DEPTH, refValue, m_type); 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelInternalFormatCase : public TextureLevelCase 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1152c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelInternalFormatCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1153c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase(ctx, name, desc, target, type) 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1160c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateInternalFormatTextureGenerationGroup(iterations, m_target); 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = 0; 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int initialValues[2] = { GL_RGBA, GL_R8 }; 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterInternalFormatAnyOf(gl, spec.queryTarget, queryLevel, GL_TEXTURE_INTERNAL_FORMAT, initialValues, DE_LENGTH_OF_ARRAY(initialValues), m_type); 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = spec.levels[levelNdx].internalFormat; 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterInternalFormatEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_INTERNAL_FORMAT, refValue, m_type); 11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelSizeCase : public TextureLevelCase 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1192c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelSizeCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type, glw::GLenum pname); 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations); 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec); 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getMinimumComponentResolution (glw::GLenum internalFormat); 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glw::GLenum m_pname; 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1202c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryTextureLevelSizeCase::TextureLevelSizeCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type, glw::GLenum pname) 1203c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase (ctx, name, desc, target, type) 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_pname (pname) 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TextureLevelSizeCase::generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1210c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateInternalFormatTextureGenerationGroup(iterations, m_target); 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool TextureLevelSizeCase::checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, m_pname, 0, m_type); 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = getMinimumComponentResolution(spec.levels[levelNdx].internalFormat); 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterGreaterOrEqual(gl, spec.queryTarget, queryLevel, m_pname, refValue, m_type); 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint TextureLevelSizeCase::getMinimumComponentResolution (glw::GLenum internalFormat) 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::TextureFormat format = glu::mapGLInternalFormat(internalFormat); 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::IVec4 channelBitDepth = tcu::getTextureFormatBitDepth(format); 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_pname) 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_RED_SIZE: 12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::R || 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RG || 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGB || 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGBA || 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGB || 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelBitDepth[0]; 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_GREEN_SIZE: 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::RG || 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGB || 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGBA || 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGB || 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelBitDepth[1]; 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_BLUE_SIZE: 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::RGB || 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGBA || 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGB || 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelBitDepth[2]; 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_ALPHA_SIZE: 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::RGBA || 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelBitDepth[3]; 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_DEPTH_SIZE: 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::D || 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::DS) 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelBitDepth[0]; 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_STENCIL_SIZE: 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::DS) 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelBitDepth[3]; 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_SHARED_SIZE: 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (internalFormat == GL_RGB9_E5) 13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 5; 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelTypeCase : public TextureLevelCase 13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1314c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelTypeCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type, glw::GLenum pname); 13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations); 13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec); 13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getComponentType (glw::GLenum internalFormat); 13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glw::GLenum m_pname; 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1324c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryTextureLevelTypeCase::TextureLevelTypeCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type, glw::GLenum pname) 1325c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase (ctx, name, desc, target, type) 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_pname (pname) 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TextureLevelTypeCase::generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1332c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateInternalFormatTextureGenerationGroup(iterations, m_target); 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool TextureLevelTypeCase::checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, m_pname, GL_NONE, m_type); 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = getComponentType(spec.levels[levelNdx].internalFormat); 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, m_pname, refValue, m_type); 13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint TextureLevelTypeCase::getComponentType (glw::GLenum internalFormat) 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::TextureFormat format = glu::mapGLInternalFormat(internalFormat); 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::TextureChannelClass channelClass = tcu::getTextureChannelClass(format.type); 13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry glw::GLenum channelType = GL_NONE; 13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // depth-stencil special cases 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.type == tcu::TextureFormat::UNSIGNED_INT_24_8) 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_pname == GL_TEXTURE_DEPTH_TYPE) 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_UNSIGNED_NORMALIZED; 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (format.type == tcu::TextureFormat::FLOAT_UNSIGNED_INT_24_8_REV) 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_pname == GL_TEXTURE_DEPTH_TYPE) 13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_FLOAT; 13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (channelClass) 13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case tcu::TEXTURECHANNELCLASS_SIGNED_FIXED_POINT: channelType = GL_SIGNED_NORMALIZED; break; 13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_FIXED_POINT: channelType = GL_UNSIGNED_NORMALIZED; break; 13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case tcu::TEXTURECHANNELCLASS_SIGNED_INTEGER: channelType = GL_INT; break; 13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case tcu::TEXTURECHANNELCLASS_UNSIGNED_INTEGER: channelType = GL_UNSIGNED_INT; break; 13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case tcu::TEXTURECHANNELCLASS_FLOATING_POINT: channelType = GL_FLOAT; break; 13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_pname) 13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_RED_TYPE: 13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::R || 13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RG || 13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGB || 13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGBA || 13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGB || 14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelType; 14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_GREEN_TYPE: 14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::RG || 14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGB || 14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGBA || 14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGB || 14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelType; 14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_BLUE_TYPE: 14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::RGB || 14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::RGBA || 14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGB || 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelType; 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_ALPHA_TYPE: 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::RGBA || 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::BGRA || 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::ARGB || 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::sRGBA) 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelType; 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case GL_TEXTURE_DEPTH_TYPE: 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (format.order == tcu::TextureFormat::D || 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry format.order == tcu::TextureFormat::DS) 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return channelType; 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return GL_NONE; 14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(DE_FALSE); 14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return 0; 14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TextureLevelCompressedCase : public TextureLevelCase 14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1455c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelCompressedCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1456c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase(ctx, name, desc, target, type) 14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1463c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateCompressedTextureGenerationGroup(iterations, m_target); 14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool allOk = true; 14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (spec.levels.empty()) 14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_COMPRESSED, 0, m_type); 14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int levelNdx = 0; levelNdx < (int)spec.levels.size(); ++levelNdx) 14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int queryLevel = spec.levels[levelNdx].level; 14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refValue = (spec.levels[levelNdx].compressed) ? (1) : (0); 14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, queryLevel, GL_TEXTURE_COMPRESSED, refValue, m_type); 14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return allOk; 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1489c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureLevelBufferDataStoreCase : public TextureLevelCase 1490c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 1491c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 1492c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelBufferDataStoreCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1493c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase(ctx, name, desc, target, type) 1494c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1495c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1496c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1497c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 1498c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void init (void) 1499c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1500c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer")) 1501c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension"); 1502c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelCase::init(); 1503c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1504c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1505c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 1506c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1507c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateTextureBufferGenerationGroup(iterations, m_target); 1508c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1509c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1510c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 1511c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1512c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool allOk = true; 1513c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1514c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (spec.levels.empty()) 1515c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1516c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_BUFFER_DATA_STORE_BINDING, 0, m_type); 1517c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1518c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 1519c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1520c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_BUFFER_DATA_STORE_BINDING, m_texBuffer, m_type); 1521c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1522c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1523c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return allOk; 1524c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1525c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 1526c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1527c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureLevelBufferDataOffsetCase : public TextureLevelCase 1528c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 1529c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 1530c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelBufferDataOffsetCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1531c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase(ctx, name, desc, target, type) 1532c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1533c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1534c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1535c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 1536c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void init (void) 1537c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1538c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer")) 1539c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension"); 1540c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelCase::init(); 1541c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1542c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1543c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 1544c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1545c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateTextureBufferGenerationGroup(iterations, m_target); 1546c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1547c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1548c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 1549c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1550c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool allOk = true; 1551c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1552c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (spec.levels.empty()) 1553c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1554c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_BUFFER_OFFSET, 0, m_type); 1555c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1556c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 1557c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1558c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const int refValue = spec.texBufferDataOffset; 1559c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1560c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_BUFFER_OFFSET, refValue, m_type); 1561c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1562c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1563c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return allOk; 1564c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1565c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 1566c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1567c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureLevelBufferDataSizeCase : public TextureLevelCase 1568c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 1569c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 1570c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelBufferDataSizeCase (Context& ctx, const char* name, const char* desc, glw::GLenum target, QueryType type) 1571c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TextureLevelCase(ctx, name, desc, target, type) 1572c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1573c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1574c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1575c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 1576c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void init (void) 1577c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1578c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_texture_buffer")) 1579c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires GL_EXT_texture_buffer extension"); 1580c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureLevelCase::init(); 1581c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1582c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1583c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void generateTestIterations (std::vector<TextureGenerationSpec>& iterations) 1584c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1585c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry generateTextureBufferGenerationGroup(iterations, m_target); 1586c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1587c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1588c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool checkTextureState (glu::CallLogWrapper& gl, const TextureGenerationSpec& spec) 1589c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1590c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry bool allOk = true; 1591c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1592c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (spec.levels.empty()) 1593c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1594c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_BUFFER_SIZE, 0, m_type); 1595c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1596c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 1597c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1598c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const int refValue = spec.texBufferDataSize; 1599c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1600c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry allOk &= verifyTextureLevelParameterEqual(gl, spec.queryTarget, 0, GL_TEXTURE_BUFFER_SIZE, refValue, m_type); 1601c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1602c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1603c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return allOk; 1604c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1605c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 1606c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1609c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystatic const char* getVerifierSuffix (QueryType type) 1610c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 1611c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry switch (type) 1612c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1613c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case QUERY_TEXTURE_LEVEL_FLOAT: return "_float"; 1614c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case QUERY_TEXTURE_LEVEL_INTEGER: return "_integer"; 1615c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry default: 1616c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(DE_FALSE); 1617c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return DE_NULL; 1618c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1619c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 1620c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 16213c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTextureLevelStateQueryTests::TextureLevelStateQueryTests (Context& context) 16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(context, "texture_level", "GetTexLevelParameter tests") 16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16263c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTextureLevelStateQueryTests::~TextureLevelStateQueryTests (void) 16273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid TextureLevelStateQueryTests::init (void) 16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1632c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const QueryType verifiers[] = 1633c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1634c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry QUERY_TEXTURE_LEVEL_INTEGER, 1635c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry QUERY_TEXTURE_LEVEL_FLOAT, 1636c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 1637c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1638c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#define FOR_EACH_VERIFIER(X) \ 1639c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \ 1640c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { \ 1641c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const std::string verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]); \ 1642c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const QueryType verifier = verifiers[verifierNdx]; \ 1643c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry targetGroup->addChild(X); \ 1644c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1645c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const struct 1646c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1647c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const char* name; 1648c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry glw::GLenum target; 1649c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } textureTargets[] = 1650c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1651c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_2d", GL_TEXTURE_2D, }, 1652c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_3d", GL_TEXTURE_3D, }, 1653c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_2d_array", GL_TEXTURE_2D_ARRAY, }, 1654c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_cube_map", GL_TEXTURE_CUBE_MAP, }, 1655c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_2d_multisample", GL_TEXTURE_2D_MULTISAMPLE, }, 1656c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_2d_multisample_array", GL_TEXTURE_2D_MULTISAMPLE_ARRAY, }, // GL_OES_texture_storage_multisample_2d_array 1657c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_buffer", GL_TEXTURE_BUFFER, }, // GL_EXT_texture_buffer 1658c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "texture_cube_array", GL_TEXTURE_CUBE_MAP_ARRAY, }, // GL_EXT_texture_cube_map_array 1659c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 1660c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1661c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int targetNdx = 0; targetNdx < DE_LENGTH_OF_ARRAY(textureTargets); ++targetNdx) 1662c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 1663c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry tcu::TestCaseGroup* const targetGroup = new tcu::TestCaseGroup(m_testCtx, textureTargets[targetNdx].name, textureTargets[targetNdx].name); 1664c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(targetGroup); 1665c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1666c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSampleCase (m_context, ("samples" + verifierSuffix).c_str(), "Verify TEXTURE_SAMPLES", textureTargets[targetNdx].target, verifier)); 1667c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelFixedSamplesCase (m_context, ("fixed_sample_locations" + verifierSuffix).c_str(), "Verify TEXTURE_FIXED_SAMPLE_LOCATIONS", textureTargets[targetNdx].target, verifier)); 1668c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelWidthCase (m_context, ("width" + verifierSuffix).c_str(), "Verify TEXTURE_WIDTH", textureTargets[targetNdx].target, verifier)); 1669c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelHeightCase (m_context, ("height" + verifierSuffix).c_str(), "Verify TEXTURE_HEIGHT", textureTargets[targetNdx].target, verifier)); 1670c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelDepthCase (m_context, ("depth" + verifierSuffix).c_str(), "Verify TEXTURE_DEPTH", textureTargets[targetNdx].target, verifier)); 1671c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelInternalFormatCase (m_context, ("internal_format" + verifierSuffix).c_str(), "Verify TEXTURE_INTERNAL_FORMAT", textureTargets[targetNdx].target, verifier)); 1672c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("red_size" + verifierSuffix).c_str(), "Verify TEXTURE_RED_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_RED_SIZE)); 1673c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("green_size" + verifierSuffix).c_str(), "Verify TEXTURE_GREEN_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_GREEN_SIZE)); 1674c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("blue_size" + verifierSuffix).c_str(), "Verify TEXTURE_BLUE_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_BLUE_SIZE)); 1675c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("alpha_size" + verifierSuffix).c_str(), "Verify TEXTURE_ALPHA_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_ALPHA_SIZE)); 1676c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("depth_size" + verifierSuffix).c_str(), "Verify TEXTURE_DEPTH_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_DEPTH_SIZE)); 1677c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("stencil_size" + verifierSuffix).c_str(), "Verify TEXTURE_STENCIL_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_STENCIL_SIZE)); 1678c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelSizeCase (m_context, ("shared_size" + verifierSuffix).c_str(), "Verify TEXTURE_SHARED_SIZE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_SHARED_SIZE)); 1679c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelTypeCase (m_context, ("red_type" + verifierSuffix).c_str(), "Verify TEXTURE_RED_TYPE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_RED_TYPE)); 1680c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelTypeCase (m_context, ("green_type" + verifierSuffix).c_str(), "Verify TEXTURE_GREEN_TYPE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_GREEN_TYPE)); 1681c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelTypeCase (m_context, ("blue_type" + verifierSuffix).c_str(), "Verify TEXTURE_BLUE_TYPE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_BLUE_TYPE)); 1682c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelTypeCase (m_context, ("alpha_type" + verifierSuffix).c_str(), "Verify TEXTURE_ALPHA_TYPE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_ALPHA_TYPE)); 1683c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelTypeCase (m_context, ("depth_type" + verifierSuffix).c_str(), "Verify TEXTURE_DEPTH_TYPE", textureTargets[targetNdx].target, verifier, GL_TEXTURE_DEPTH_TYPE)); 1684c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelCompressedCase (m_context, ("compressed" + verifierSuffix).c_str(), "Verify TEXTURE_COMPRESSED", textureTargets[targetNdx].target, verifier)); 1685c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelBufferDataStoreCase (m_context, ("buffer_data_store_binding" + verifierSuffix).c_str(), "Verify TEXTURE_BUFFER_DATA_STORE_BINDING", textureTargets[targetNdx].target, verifier)); 1686c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelBufferDataOffsetCase (m_context, ("buffer_offset" + verifierSuffix).c_str(), "Verify TEXTURE_BUFFER_OFFSET", textureTargets[targetNdx].target, verifier)); 1687c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry FOR_EACH_VERIFIER(new TextureLevelBufferDataSizeCase (m_context, ("buffer_size" + verifierSuffix).c_str(), "Verify TEXTURE_BUFFER_SIZE", textureTargets[targetNdx].target, verifier)); 16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1689c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 1690c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#undef FOR_EACH_VERIFIER 16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles31 16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 1696