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, &params);
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, &params);
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, &params);
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, &params);
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, &params);
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), &params);
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