1e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/*------------------------------------------------------------------------- 2e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * OpenGL Conformance Test Suite 3e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * ----------------------------- 4e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 5e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * Copyright (c) 2016 The Khronos Group Inc. 6e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 7e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * Licensed under the Apache License, Version 2.0 (the "License"); 8e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * you may not use this file except in compliance with the License. 9e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * You may obtain a copy of the License at 10e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 11e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * http://www.apache.org/licenses/LICENSE-2.0 12e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 13e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * Unless required by applicable law or agreed to in writing, software 14e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * distributed under the License is distributed on an "AS IS" BASIS, 15e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * See the License for the specific language governing permissions and 17e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * limitations under the License. 18e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 19e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski */ /*! 20e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * \file 21e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * \brief 22e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski */ /*-------------------------------------------------------------------*/ 23e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 24e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** 25e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski */ /*! 26e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * \file gl4cTextureFilterMinmaxTests.cpp 27e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * \brief Conformance tests for the ARB_texture_filter_minmax functionality. 28e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski */ /*-------------------------------------------------------------------*/ 29e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 30e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gl4cTextureFilterMinmaxTests.hpp" 31e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gluContextInfo.hpp" 32e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gluDefs.hpp" 33e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gluDrawUtil.hpp" 34e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gluObjectWrapper.hpp" 35e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gluShaderProgram.hpp" 36e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "gluTexture.hpp" 37e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "glwEnums.hpp" 38e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "glwFunctions.hpp" 39e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "tcuImageIO.hpp" 40e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "tcuRenderTarget.hpp" 41e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "tcuTestLog.hpp" 42e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "tcuTextureUtil.hpp" 43e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 44e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include "deUniquePtr.hpp" 45e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 46e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include <map> 47e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski#include <vector> 48e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 49e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskinamespace gl4cts 50e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 51e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 52e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistatic const int TEXTURE_FILTER_MINMAX_SIZE = 32; 53e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistatic const float TEXTURE_FILTER_MINMAX_DOWNSCALE_FACTOR = 0.57f; 54e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistatic const float TEXTURE_FILTER_MINMAX_UPSCALE_FACTOR = 1.63f; 55e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 56e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::TextureFilterMinmaxUtils() 57e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 58e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_reductionModeParams.push_back(ReductionModeParam(GL_MIN, false)); 59e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_reductionModeParams.push_back(ReductionModeParam(GL_WEIGHTED_AVERAGE_ARB, false)); 60e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_reductionModeParams.push_back(ReductionModeParam(GL_MAX, false)); 61e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 62e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureTypes.push_back(new Texture1D()); 63e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureTypes.push_back(new Texture1DArray()); 64e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureTypes.push_back(new Texture2D()); 65e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureTypes.push_back(new Texture2DArray()); 66e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureTypes.push_back(new Texture3D()); 67e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureTypes.push_back(new TextureCube()); 68e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 69e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureDataTypes.push_back(SupportedTextureDataType(GL_RED, GL_FLOAT, MINMAX)); 70e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureDataTypes.push_back(SupportedTextureDataType(GL_RED, GL_UNSIGNED_BYTE, MINMAX)); 71e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureDataTypes.push_back( 72e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski SupportedTextureDataType(GL_DEPTH_COMPONENT, GL_FLOAT, MINMAX | EXCLUDE_3D | EXCLUDE_CUBE)); 73e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureDataTypes.push_back( 74e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski SupportedTextureDataType(GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, MINMAX | EXCLUDE_3D | EXCLUDE_CUBE)); 75e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_supportedTextureDataTypes.push_back(SupportedTextureDataType(GL_LUMINANCE, GL_FLOAT, COMPATIBILITY)); 76e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 77e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 78e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::~TextureFilterMinmaxUtils() 79e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 80e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (SupportedTextureTypeIter iter = m_supportedTextureTypes.begin(); iter != m_supportedTextureTypes.end(); ++iter) 81e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 82e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski SupportedTextureType* textureType = *iter; 83e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski delete textureType; 84e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 85e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 86e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 87e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// SupportedTextureType 88e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 89e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::SupportedTextureType::replaceAll(std::string& str, const std::string& from, 90e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const std::string& to) 91e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 92e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski size_t start = 0; 93e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski while ((start = str.find(from, start)) != std::string::npos) 94e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 95e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski str.replace(start, from.length(), to); 96e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski start += to.length(); 97e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 98e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 99e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 100e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::SupportedTextureType::SupportedTextureType(glw::GLenum type, 101e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const std::string& shaderTexcoordType, 102e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const std::string& shaderSamplerType) 103e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : m_type(type) 104e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 105e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_vertexShader = "#version 450 core\n" 106e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "in highp vec2 position;\n" 107e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "in <texcoord_type> inTexcoord;\n" 108e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "out <texcoord_type> texcoord;\n" 109e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "void main()\n" 110e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "{\n" 111e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski " texcoord = inTexcoord;\n" 112e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski " gl_Position = vec4(position, 0.0, 1.0);\n" 113e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "}\n"; 114e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 115e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_fragmentShader = "#version 450 core\n" 116e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "uniform <sampler_type> sampler;\n" 117e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "in <texcoord_type> texcoord;\n" 118e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "out vec4 color;\n" 119e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "void main()\n" 120e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "{\n" 121e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski " color = texture(sampler, texcoord);\n" 122e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "}\n"; 123e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 124e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski replaceAll(m_vertexShader, "<texcoord_type>", shaderTexcoordType); 125e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski replaceAll(m_fragmentShader, "<texcoord_type>", shaderTexcoordType); 126e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski replaceAll(m_fragmentShader, "<sampler_type>", shaderSamplerType); 127e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 128e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 129e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::SupportedTextureType::renderToFBO(const glu::RenderContext& context, 130e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLuint resultTextureId, tcu::IVec2 size, 131e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLint reductionMode) 132e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 133e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 134e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 135e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.bindTexture(GL_TEXTURE_2D, resultTextureId); 136e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture() call failed."); 137e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 138e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.texStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, size.x(), size.y()); 139e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glTexStorage2D() call failed."); 140e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 141e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLuint fbo = 0; 142e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.genFramebuffers(1, &fbo); 143e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "genFramebuffers error occurred"); 144e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 145e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.bindFramebuffer(GL_FRAMEBUFFER, fbo); 146e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindFramebuffer error occurred"); 147e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 148e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, resultTextureId, 0); 149e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "framebufferTexture2D error occurred"); 150e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 151e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (gl.checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 152e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 153e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski throw 0; 154e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 155e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 156e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.viewport(0, 0, size.x(), size.y()); 157e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski renderQuad(context, reductionMode); 158e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 159e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.deleteFramebuffers(1, &fbo); 160e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 161e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 162e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::SupportedTextureType::renderQuad(const glu::RenderContext& context, 163e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLint reductionMode) 164e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 165e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 166e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 167e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski deUint16 const quadIndices[] = { 0, 1, 2, 2, 1, 3 }; 168e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 169e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const position[] = { -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f }; 170e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 171e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski std::vector<float> texCoords = getTexCoords(); 172e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 173e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glu::VertexArrayBinding vertexArrays[] = { glu::va::Float("position", 2, 4, 0, position), 174e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glu::va::Float("inTexcoord", 1, 4, 0, texCoords.data()) }; 175e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 176e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.bindTexture(m_type, this->getTextureGL()); 177e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture() call failed."); 178e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 179e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.texParameteri(m_type, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 180e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.texParameteri(m_type, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 181e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.texParameteri(m_type, GL_TEXTURE_REDUCTION_MODE_ARB, reductionMode); 182e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 183e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glu::ShaderProgram program(context, glu::makeVtxFragSources(m_vertexShader, m_fragmentShader)); 184e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (!program.isOk()) 185e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 186e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_FAIL("Shader compilation failed"); 187e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 188e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 189e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.useProgram(program.getProgram()); 190e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram failed"); 191e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 192e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.uniform1i(gl.getUniformLocation(program.getProgram(), "sampler"), 0); 193e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i failed"); 194e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 195e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.clear(GL_COLOR_BUFFER_BIT); 196e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 197e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glu::draw(context, program.getProgram(), DE_LENGTH_OF_ARRAY(vertexArrays), vertexArrays, 198e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glu::pr::TriangleStrip(DE_LENGTH_OF_ARRAY(quadIndices), quadIndices)); 199e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 200e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 201e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// Texture1D 202e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 203e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::Texture1D::Texture1D() : SupportedTextureType(GL_TEXTURE_1D, "float", "sampler1D") 204e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 205e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 206e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 207e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::Texture1D::getTextureGL() 208e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 209e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return m_texture->getGLTexture(); 210e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 211e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 212e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<float> TextureFilterMinmaxUtils::Texture1D::getTexCoords() 213e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 214e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const texCoord[] = { 0.0f, 0.0f, 1.0f, 1.0f }; 215e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return std::vector<float>(texCoord, texCoord + sizeof(texCoord) / sizeof(float)); 216e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 217e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 218e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::Texture1D::generate(const glu::RenderContext& context, tcu::IVec3 size, 219e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type, bool generateMipmaps) 220e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 221e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 222e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 223e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture = de::MovePtr<glu::Texture1D>(new glu::Texture1D(context, format, type, size.x())); 224e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 225e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(0); 226e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (generateMipmaps) 227e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 228e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(1); 229e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 230e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1D error occurred"); 231e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 232e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(0), 4, tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 233e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 234e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1D error occurred"); 235e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 236e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->upload(); 237e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1D error occurred"); 238e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 239e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (generateMipmaps) 240e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 241e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.generateTextureMipmap(m_texture->getGLTexture()); 242e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 243e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 244e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.activeTexture(GL_TEXTURE0); 245e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 246e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 247e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// Texture1DArray 248e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 249e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::Texture1DArray::Texture1DArray() 250e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : SupportedTextureType(GL_TEXTURE_1D_ARRAY, "vec2", "sampler1DArray") 251e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 252e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 253e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 254e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::Texture1DArray::getTextureGL() 255e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 256e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return m_texture->getGLTexture(); 257e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 258e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 259e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<float> TextureFilterMinmaxUtils::Texture1DArray::getTexCoords() 260e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 261e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const texCoord[] = { 0.0f, 0.5f, 0.0f, 0.5f, 1.0f, 0.5f, 1.0f, 0.5f }; 262e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return std::vector<float>(texCoord, texCoord + sizeof(texCoord) / sizeof(float)); 263e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 264e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 265e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::Texture1DArray::generate(const glu::RenderContext& context, tcu::IVec3 size, 266e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type, bool generateMipmaps) 267e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 268e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski DE_UNREF(generateMipmaps); 269e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 270e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 271e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 272e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture = de::MovePtr<glu::Texture1DArray>(new glu::Texture1DArray(context, format, type, size.x(), 2)); 273e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 274e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(0); 275e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(1); 276e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1DArray error occurred"); 277e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 278e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(0), 4, tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 279e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 280e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1DArray error occurred"); 281e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 282e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(1), 4, tcu::Vec4(0.0f, 1.0f, 1.0f, 1.0f), 283e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f)); 284e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1DArray error occurred"); 285e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 286e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->upload(); 287e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture1DArray error occurred"); 288e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 289e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.activeTexture(GL_TEXTURE0); 290e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 291e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 292e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// Texture2D 293e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 294e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::Texture2D::Texture2D() : SupportedTextureType(GL_TEXTURE_2D, "vec2", "sampler2D") 295e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 296e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 297e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 298e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::Texture2D::getTextureGL() 299e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 300e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return m_texture->getGLTexture(); 301e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 302e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 303e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<float> TextureFilterMinmaxUtils::Texture2D::getTexCoords() 304e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 305e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const texCoord[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f }; 306e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return std::vector<float>(texCoord, texCoord + sizeof(texCoord) / sizeof(float)); 307e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 308e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 309e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::Texture2D::generate(const glu::RenderContext& context, tcu::IVec3 size, 310e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type, bool generateMipmaps) 311e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 312e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 313e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 314e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture = de::MovePtr<glu::Texture2D>(new glu::Texture2D(context, format, type, size.x(), size.y())); 315e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 316e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(0); 317e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (generateMipmaps) 318e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 319e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(1); 320e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 321e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2D error occurred"); 322e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 323e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(0), 4, tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 324e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 325e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2D error occurred"); 326e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 327e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->upload(); 328e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2D error occurred"); 329e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 330e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (generateMipmaps) 331e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 332e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.generateTextureMipmap(m_texture->getGLTexture()); 333e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 334e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 335e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.activeTexture(GL_TEXTURE0); 336e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 337e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 338e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// Texture2DArray 339e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 340e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::Texture2DArray::Texture2DArray() 341e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : SupportedTextureType(GL_TEXTURE_2D_ARRAY, "vec3", "sampler2DArray") 342e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 343e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 344e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 345e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::Texture2DArray::getTextureGL() 346e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 347e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return m_texture->getGLTexture(); 348e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 349e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 350e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<float> TextureFilterMinmaxUtils::Texture2DArray::getTexCoords() 351e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 352e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const texCoord[] = { 0.0f, 0.0f, 0.5f, 0.0f, 1.0f, 0.5f, 1.0f, 0.0f, 0.5f, 1.0f, 1.0f, 0.5f }; 353e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return std::vector<float>(texCoord, texCoord + sizeof(texCoord) / sizeof(float)); 354e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 355e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 356e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::Texture2DArray::generate(const glu::RenderContext& context, tcu::IVec3 size, 357e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type, bool generateMipmaps) 358e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 359e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski DE_UNREF(generateMipmaps); 360e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 361e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 362e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 363e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture = de::MovePtr<glu::Texture2DArray>(new glu::Texture2DArray(context, format, type, size.x(), size.y(), 2)); 364e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 365e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(0); 366e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(1); 367e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2DArray error occurred"); 368e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 369e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(0), 4, tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 370e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 371e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2DArray error occurred"); 372e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 373e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(1), 4, tcu::Vec4(0.0f, 1.0f, 1.0f, 1.0f), 374e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(1.0f, 0.0f, 0.0f, 1.0f)); 375e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2DArray error occurred"); 376e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 377e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->upload(); 378e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2DArray error occurred"); 379e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 380e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.activeTexture(GL_TEXTURE0); 381e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 382e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 383e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// Texture3D 384e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 385e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::Texture3D::Texture3D() : SupportedTextureType(GL_TEXTURE_3D, "vec3", "sampler3D") 386e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 387e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 388e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 389e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::Texture3D::getTextureGL() 390e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 391e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return m_texture->getGLTexture(); 392e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 393e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 394e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<float> TextureFilterMinmaxUtils::Texture3D::getTexCoords() 395e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 396e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const texCoord[] = { 0.0f, 0.0f, 0.5f, 0.0f, 1.0f, 0.5f, 1.0f, 0.0f, 0.5f, 1.0f, 1.0f, 0.5f }; 397e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return std::vector<float>(texCoord, texCoord + sizeof(texCoord) / sizeof(float)); 398e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 399e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 400e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::Texture3D::generate(const glu::RenderContext& context, tcu::IVec3 size, 401e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type, bool generateMipmaps) 402e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 403e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski DE_UNREF(generateMipmaps); 404e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 405e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 406e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 407e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture = de::MovePtr<glu::Texture3D>(new glu::Texture3D(context, format, type, size.x(), size.y(), size.z())); 408e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 409e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel(0); 410e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture3D error occurred"); 411e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 412e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevel(0), 4, tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), 413e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 414e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture3D error occurred"); 415e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 416e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->upload(); 417e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture3D error occurred"); 418e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 419e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.activeTexture(GL_TEXTURE0); 420e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 421e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 422e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// TextureCube 423e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 424e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxUtils::TextureCube::TextureCube() : SupportedTextureType(GL_TEXTURE_CUBE_MAP, "vec3", "samplerCube") 425e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 426e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 427e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 428e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::TextureCube::getTextureGL() 429e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 430e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return m_texture->getGLTexture(); 431e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 432e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 433e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<float> TextureFilterMinmaxUtils::TextureCube::getTexCoords() 434e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 435e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float const texCoord[] = { 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f }; 436e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return std::vector<float>(texCoord, texCoord + sizeof(texCoord) / sizeof(float)); 437e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 438e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 439e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxUtils::TextureCube::generate(const glu::RenderContext& context, tcu::IVec3 size, 440e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type, bool generateMipmaps) 441e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 442e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski DE_UNREF(generateMipmaps); 443e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 444e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 445e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 446e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture = de::MovePtr<glu::TextureCube>(new glu::TextureCube(context, format, type, size.x())); 447e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 448e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (int faceIndex = 0; faceIndex < tcu::CUBEFACE_LAST; ++faceIndex) 449e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 450e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->getRefTexture().allocLevel((tcu::CubeFace)faceIndex, 0); 451e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::TextureCube error occurred"); 452e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 453e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::fillWithGrid(m_texture->getRefTexture().getLevelFace(0, (tcu::CubeFace)faceIndex), 4, 454e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::Vec4(1.0f, 1.0f, 1.0f, 1.0f), tcu::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 455e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::TextureCube error occurred"); 456e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 457e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 458e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_texture->upload(); 459e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::TextureCube error occurred"); 460e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 461e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.activeTexture(GL_TEXTURE0); 462e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 463e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 464e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski// TextureFilterMinmaxUtils methods 465e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 466e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskistd::vector<glw::GLuint> TextureFilterMinmaxUtils::getDataFromTexture(const glu::RenderContext& context, 467e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLuint textureId, tcu::IVec2 textureSize, 468e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLenum format, glw::GLenum type) 469e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 470e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = context.getFunctions(); 471e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 472e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLsizei imageLength = textureSize.x() * textureSize.y(); 473e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 474e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski std::vector<glw::GLuint> data; 475e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski data.resize(imageLength); 476e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 477e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.bindTexture(GL_TEXTURE_2D, textureId); 478e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "bindTexture error occurred"); 479e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 480e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getTexImage(GL_TEXTURE_2D, 0, format, type, &data[0]); 481e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getTexImage error occurred"); 482e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 483e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return data; 484e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 485e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 486e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskiglw::GLuint TextureFilterMinmaxUtils::calcPixelSumValue(const glu::RenderContext& context, glw::GLuint textureId, 487e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::IVec2 textureSize, glw::GLenum format, glw::GLenum type) 488e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 489e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski std::vector<glw::GLuint> textureData = getDataFromTexture(context, textureId, textureSize, format, type); 490e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 491e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLuint sum = 0; 492e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 493e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (size_t texel = 0; texel < textureData.size(); ++texel) 494e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 495e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::RGBA rgba(textureData[texel]); 496e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski sum += rgba.getRed(); 497e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski sum += rgba.getGreen(); 498e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski sum += rgba.getBlue(); 499e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski sum += rgba.getAlpha(); 500e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 501e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 502e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return sum; 503e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 504e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 505e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Constructor. 506e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 507e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param context Rendering context 508e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 509e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxParameterQueriesTestCase::TextureFilterMinmaxParameterQueriesTestCase(deqp::Context& context) 510e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : TestCase(context, "TextureFilterMinmaxParameterQueries", 511e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Implements all parameter queries tests described in CTS_ARB_texture_filter_minmax") 512e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 513e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski /* Left blank intentionally */ 514e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 515e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 516e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Executes test iteration. 517e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 518e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. 519e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski */ 520e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskitcu::TestNode::IterateResult TextureFilterMinmaxParameterQueriesTestCase::iterate() 521e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 522b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga if (!m_context.getContextInfo().isExtensionSupported("GL_ARB_texture_filter_minmax")) 523b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga { 524b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "Not Supported"); 525b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga return STOP; 526b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga } 527b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga 528e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 529e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 530e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski testReductionModeQueriesDefaultValues(gl); 531e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 532e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::ReductionModeParamIter iter = m_utils.getReductionModeParams().begin(); 533e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski iter != m_utils.getReductionModeParams().end(); ++iter) 534e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 535e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski testReductionModeQueries(gl, iter->m_reductionMode); 536e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 537e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 538e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 539e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 540e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return STOP; 541e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 542e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 543e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxParameterQueriesTestCase::testReductionModeQueriesDefaultValues(const glw::Functions& gl) 544e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 545e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glu::RenderContext& renderContext = m_context.getRenderContext(); 546e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski de::MovePtr<glu::Sampler> sampler = de::MovePtr<glu::Sampler>(new glu::Sampler(renderContext)); 547e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Sampler error occurred"); 548e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 549e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLint params; 550e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 551e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getSamplerParameteriv(**sampler, GL_TEXTURE_REDUCTION_MODE_ARB, ¶ms); 552e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getSamplerParameteriv error occurred"); 553e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(params == GL_WEIGHTED_AVERAGE_ARB, "getSamplerParameteriv value mismatch with expected default"); 554e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 555e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureTypeIter iter = m_utils.getSupportedTextureTypes().begin(); 556e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski iter != m_utils.getSupportedTextureTypes().end(); ++iter) 557e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 558e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TextureFilterMinmaxUtils::SupportedTextureType* textureType = *iter; 559e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 560e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getTexParameteriv(textureType->getType(), GL_TEXTURE_REDUCTION_MODE_ARB, ¶ms); 561e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getTexParameteriv error occurred"); 562e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(params == GL_WEIGHTED_AVERAGE_ARB, "getTexParameteriv value mismatch with expected default"); 563e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 564e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getTexParameterIiv(textureType->getType(), GL_TEXTURE_REDUCTION_MODE_ARB, ¶ms); 565e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getTexParameterIiv error occurred"); 566e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(params == GL_WEIGHTED_AVERAGE_ARB, "getTexParameterIiv value mismatch with expected default"); 567e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 568e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 569e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski bool is_arb_es31_compatibility = m_context.getContextInfo().isExtensionSupported("GL_ARB_ES3_1_compatibility"); 570e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 571e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureDataTypeIter iter = m_utils.getSupportedTextureDataTypes().begin(); 572e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski iter != m_utils.getSupportedTextureDataTypes().end(); ++iter) 573e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 574e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (iter->hasFlag(TextureFilterMinmaxUtils::COMPATIBILITY) && !is_arb_es31_compatibility) 575e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski continue; 576e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 577e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski de::MovePtr<glu::Texture2D> texture = de::MovePtr<glu::Texture2D>(new glu::Texture2D( 578e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski renderContext, iter->m_format, iter->m_type, TEXTURE_FILTER_MINMAX_SIZE, TEXTURE_FILTER_MINMAX_SIZE)); 579e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski texture->upload(); 580e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2D error occurred"); 581e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 582e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getTextureParameteriv(texture->getGLTexture(), GL_TEXTURE_REDUCTION_MODE_ARB, ¶ms); 583e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getTextureParameteriv error occurred"); 584e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(params == GL_WEIGHTED_AVERAGE_ARB, "getTextureParameteriv value mismatch with expected default"); 585e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 586e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getTextureParameterIiv(texture->getGLTexture(), GL_TEXTURE_REDUCTION_MODE_ARB, ¶ms); 587e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getTextureParameterIiv error occurred"); 588e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(params == GL_WEIGHTED_AVERAGE_ARB, "getTextureParameterIiv value mismatch with expected default"); 589e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 590e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 591e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 592e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmaxParameterQueriesTestCase::testReductionModeQueries(const glw::Functions& gl, glw::GLint pname) 593e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 594e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glu::RenderContext& renderContext = m_context.getRenderContext(); 595e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski de::MovePtr<glu::Sampler> sampler = de::MovePtr<glu::Sampler>(new glu::Sampler(renderContext)); 596e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Sampler error occurred"); 597e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 598e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.samplerParameteri(**sampler, GL_TEXTURE_REDUCTION_MODE_ARB, pname); 599e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "samplerParameteri error occurred"); 600e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 601e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureTypeIter iter = m_utils.getSupportedTextureTypes().begin(); 602e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski iter != m_utils.getSupportedTextureTypes().end(); ++iter) 603e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 604e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TextureFilterMinmaxUtils::SupportedTextureType* textureType = *iter; 605e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 606e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.texParameteriv(textureType->getType(), GL_TEXTURE_REDUCTION_MODE_ARB, &pname); 607e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameteriv error occurred"); 608e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 609e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.texParameterIiv(textureType->getType(), GL_TEXTURE_REDUCTION_MODE_ARB, &pname); 610e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "texParameterIiv error occurred"); 611e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 612e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 613e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski bool is_arb_es31_compatibility = m_context.getContextInfo().isExtensionSupported("GL_ARB_ES3_1_compatibility"); 614e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 615e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureDataTypeIter iter = m_utils.getSupportedTextureDataTypes().begin(); 616e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski iter != m_utils.getSupportedTextureDataTypes().end(); ++iter) 617e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 618e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (iter->hasFlag(TextureFilterMinmaxUtils::COMPATIBILITY) && !is_arb_es31_compatibility) 619e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski continue; 620e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 621e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski de::MovePtr<glu::Texture2D> texture = de::MovePtr<glu::Texture2D>(new glu::Texture2D( 622e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski renderContext, iter->m_format, iter->m_type, TEXTURE_FILTER_MINMAX_SIZE, TEXTURE_FILTER_MINMAX_SIZE)); 623e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski texture->upload(); 624e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glu::Texture2D error occurred"); 625e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 626e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.textureParameteriv(texture->getGLTexture(), GL_TEXTURE_REDUCTION_MODE_ARB, &pname); 627e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "textureParameteriv error occurred"); 628e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 629e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.textureParameterIiv(texture->getGLTexture(), GL_TEXTURE_REDUCTION_MODE_ARB, &pname); 630e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "textureParameterIiv error occurred"); 631e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 632e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 633e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 634e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Base class for minmax render tests. Constructor. 635e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 636e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param context Rendering context 637e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param name TestCase name 638e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param description TestCase description 639e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param renderScale Scale of rendered texture 640e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param mipmapping Is mipmapping enabled 641e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 642e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxFilteringTestCaseBase::TextureFilterMinmaxFilteringTestCaseBase(deqp::Context& context, 643e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const char* name, 644e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const char* description, 645e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski float renderScale, bool mipmapping) 646e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : deqp::TestCase(context, name, description), m_renderScale(renderScale), m_mipmapping(mipmapping) 647e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 648e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 649e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 650e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Executes test iteration. 651e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 652e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. 653e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 654e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskitcu::TestNode::IterateResult TextureFilterMinmaxFilteringTestCaseBase::iterate() 655e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 656b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga if (!m_context.getContextInfo().isExtensionSupported("GL_ARB_texture_filter_minmax")) 657b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga { 658b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "Not Supported"); 659b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga return STOP; 660b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga } 661b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga 662e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glu::RenderContext& renderContext = m_context.getRenderContext(); 663e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = renderContext.getFunctions(); 664e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 665e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureTypeIter textureTypeIter = 666e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_utils.getSupportedTextureTypes().begin(); 667e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski textureTypeIter != m_utils.getSupportedTextureTypes().end(); ++textureTypeIter) 668e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 669e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TextureFilterMinmaxUtils::SupportedTextureType* textureType = *textureTypeIter; 670e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 671e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureDataTypeIter dataTypeIter = 672e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_utils.getSupportedTextureDataTypes().begin(); 673e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski dataTypeIter != m_utils.getSupportedTextureDataTypes().end(); ++dataTypeIter) 674e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 675e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (!dataTypeIter->hasFlag(TextureFilterMinmaxUtils::MINMAX)) 676e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski continue; 677e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 678e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (dataTypeIter->hasFlag(TextureFilterMinmaxUtils::EXCLUDE_3D) && textureType->getType() == GL_TEXTURE_3D) 679e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski continue; 680e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 681e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (dataTypeIter->hasFlag(TextureFilterMinmaxUtils::EXCLUDE_CUBE) && 682e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski textureType->getType() == GL_TEXTURE_CUBE_MAP) 683e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski continue; 684e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 685e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski std::map<glw::GLint, glw::GLuint> reductionModeTexelSumMap; 686e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 687e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::ReductionModeParamIter paramIter = m_utils.getReductionModeParams().begin(); 688e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski paramIter != m_utils.getReductionModeParams().end(); ++paramIter) 689e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 690e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski if (paramIter->m_queryTestOnly) 691e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski continue; 692e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 693e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski tcu::IVec2 scaledTextureSize(int(float(TEXTURE_FILTER_MINMAX_SIZE) * m_renderScale)); 694e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 695e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski textureType->generate(renderContext, tcu::IVec3(TEXTURE_FILTER_MINMAX_SIZE), dataTypeIter->m_format, 696e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski dataTypeIter->m_type, m_mipmapping); 697e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 698e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLuint resultTextureId = 0; 699e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.genTextures(1, &resultTextureId); 700e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "glGenTextures() call failed."); 701e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 702e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski textureType->renderToFBO(renderContext, resultTextureId, scaledTextureSize, paramIter->m_reductionMode); 703e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 704e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski reductionModeTexelSumMap[paramIter->m_reductionMode] = m_utils.calcPixelSumValue( 705e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski renderContext, resultTextureId, scaledTextureSize, GL_RED, GL_UNSIGNED_BYTE); 706e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 707e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.deleteTextures(1, &resultTextureId); 708e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 709e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 710e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(reductionModeTexelSumMap[GL_MIN] < reductionModeTexelSumMap[GL_WEIGHTED_AVERAGE_ARB], 711e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Sum of texels for GL_MIN should be smaller than for GL_WEIGHTED_AVERAGE_ARB"); 712e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 713e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(reductionModeTexelSumMap[GL_MAX] > reductionModeTexelSumMap[GL_WEIGHTED_AVERAGE_ARB], 714e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Sum of texels for GL_MAX should be greater than for GL_WEIGHTED_AVERAGE_ARB"); 715e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 716e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 717e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 718e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 719e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 720e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return STOP; 721e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 722e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 723e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Constructor. 724e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 725e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param context Rendering context 726e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 727e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxMinificationFilteringTestCase::TextureFilterMinmaxMinificationFilteringTestCase( 728e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski deqp::Context& context) 729e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : TextureFilterMinmaxFilteringTestCaseBase( 730e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski context, "TextureFilterMinmaxMinificationFiltering", 731e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Implements minification filtering tests described in CTS_ARB_texture_filter_minmax", 732e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TEXTURE_FILTER_MINMAX_DOWNSCALE_FACTOR, false) 733e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 734e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski /* Left blank intentionally */ 735e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 736e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 737e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Constructor. 738e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 739e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param context Rendering context 740e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 741e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxMagnificationFilteringTestCase::TextureFilterMinmaxMagnificationFilteringTestCase( 742e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski deqp::Context& context) 743e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : TextureFilterMinmaxFilteringTestCaseBase( 744e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski context, "TextureFilterMinmaxMagnificationFiltering", 745e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Implements magnification filtering tests described in CTS_ARB_texture_filter_minmax", 746e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TEXTURE_FILTER_MINMAX_UPSCALE_FACTOR, false) 747e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 748e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski /* Left blank intentionally */ 749e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 750e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 751e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Constructor. 752e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 753e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param context Rendering context 754e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 755e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxMipmapMinificationFilteringTestCase::TextureFilterMinmaxMipmapMinificationFilteringTestCase( 756e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski deqp::Context& context) 757e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : TextureFilterMinmaxFilteringTestCaseBase( 758e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski context, "TextureFilterMinmaxMipmapMinificationFiltering", 759e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Implements mipmap minification filtering tests described in CTS_ARB_texture_filter_minmax", 760e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TEXTURE_FILTER_MINMAX_DOWNSCALE_FACTOR, true) 761e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 762e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski /* Left blank intentionally */ 763e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 764e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 765e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Constructor. 766e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 767e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @param context Rendering context 768e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 769e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmaxSupportTestCase::TextureFilterMinmaxSupportTestCase(deqp::Context& context) 770e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : TestCase(context, "TextureFilterMinmaxSupport", "Implements calling GetInternalFormat* and validates with " 771e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "expected result described in CTS_ARB_texture_filter_minmax") 772e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 773e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 774e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 775e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Executes test iteration. 776e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* 777e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski* @return Returns STOP when test has finished executing, CONTINUE if more iterations are needed. 778e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski*/ 779e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskitcu::TestNode::IterateResult TextureFilterMinmaxSupportTestCase::iterate() 780e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 781b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga if (!m_context.getContextInfo().isExtensionSupported("GL_ARB_texture_filter_minmax")) 782b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga { 783b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga m_testCtx.setTestResult(QP_TEST_RESULT_NOT_SUPPORTED, "Not Supported"); 784b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga return STOP; 785b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga } 786b20d8e150d8c761ecc01d279f40330aebe435c65Iago Toral Quiroga 787e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glu::RenderContext& renderContext = m_context.getRenderContext(); 788e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski const glw::Functions& gl = renderContext.getFunctions(); 789e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 790e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureTypeIter textureTypeIter = 791e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_utils.getSupportedTextureTypes().begin(); 792e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski textureTypeIter != m_utils.getSupportedTextureTypes().end(); ++textureTypeIter) 793e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 794e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TextureFilterMinmaxUtils::SupportedTextureType* textureType = *textureTypeIter; 795e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 796e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski for (TextureFilterMinmaxUtils::SupportedTextureDataTypeIter dataTypeIter = 797e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_utils.getSupportedTextureDataTypes().begin(); 798e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski dataTypeIter != m_utils.getSupportedTextureDataTypes().end(); ++dataTypeIter) 799e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski { 800e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski glw::GLint params = 0; 801e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski gl.getInternalformativ(textureType->getType(), dataTypeIter->m_format, GL_TEXTURE_REDUCTION_MODE_ARB, 802e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski sizeof(glw::GLint), ¶ms); 803e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski GLU_EXPECT_NO_ERROR(gl.getError(), "getInternalformativ() call failed."); 804e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski TCU_CHECK_MSG(params, "GetInternalformativ incorrect value"); 805e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 806e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski } 807e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 808e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 809e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 810e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski return STOP; 811e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 812e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 813e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Constructor. 814e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * 815e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski * @param context Rendering context. 816e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski */ 817e150125c67879f164bfb0f690bd39f2f01481616Filip DemczewskiTextureFilterMinmax::TextureFilterMinmax(deqp::Context& context) 818e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski : TestCaseGroup(context, "texture_filter_minmax_tests", 819e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski "Verify conformance of CTS_ARB_texture_filter_minmax implementation") 820e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 821e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 822e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski 823e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski/** Initializes the test group contents. */ 824e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewskivoid TextureFilterMinmax::init() 825e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski{ 826e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski addChild(new TextureFilterMinmaxParameterQueriesTestCase(m_context)); 827e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski addChild(new TextureFilterMinmaxMinificationFilteringTestCase(m_context)); 828e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski addChild(new TextureFilterMinmaxMagnificationFilteringTestCase(m_context)); 829e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski addChild(new TextureFilterMinmaxMipmapMinificationFilteringTestCase(m_context)); 830e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski addChild(new TextureFilterMinmaxSupportTestCase(m_context)); 831e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} 832e150125c67879f164bfb0f690bd39f2f01481616Filip Demczewski} /* gl4cts namespace */ 833