1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program OpenGL ES 2.0 Module
3*35238bceSAndroid Build Coastguard Worker * -------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker *
5*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker *
7*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker *
11*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker *
13*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker *
19*35238bceSAndroid Build Coastguard Worker *//*!
20*35238bceSAndroid Build Coastguard Worker * \file
21*35238bceSAndroid Build Coastguard Worker * \brief Texture State Query tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es2fTextureStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "es2fApiCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "glwFunctions.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "deMath.h"
32*35238bceSAndroid Build Coastguard Worker
33*35238bceSAndroid Build Coastguard Worker using namespace glw; // GLint and other GL types
34*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls;
35*35238bceSAndroid Build Coastguard Worker using deqp::gls::StateQueryUtil::StateQueryMemoryWriteGuard;
36*35238bceSAndroid Build Coastguard Worker
37*35238bceSAndroid Build Coastguard Worker namespace deqp
38*35238bceSAndroid Build Coastguard Worker {
39*35238bceSAndroid Build Coastguard Worker namespace gles2
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker namespace Functional
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker namespace TextureParamVerifiers
44*35238bceSAndroid Build Coastguard Worker {
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Worker // TexParamVerifier
47*35238bceSAndroid Build Coastguard Worker
48*35238bceSAndroid Build Coastguard Worker class TexParamVerifier : protected glu::CallLogWrapper
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker public:
51*35238bceSAndroid Build Coastguard Worker TexParamVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix);
52*35238bceSAndroid Build Coastguard Worker virtual ~TexParamVerifier(); // make GCC happy
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker const char *getTestNamePostfix(void) const;
55*35238bceSAndroid Build Coastguard Worker
56*35238bceSAndroid Build Coastguard Worker virtual void verifyInteger(tcu::TestContext &testCtx, GLenum target, GLenum name, GLint reference) = DE_NULL;
57*35238bceSAndroid Build Coastguard Worker virtual void verifyFloat(tcu::TestContext &testCtx, GLenum target, GLenum name, GLfloat reference) = DE_NULL;
58*35238bceSAndroid Build Coastguard Worker
59*35238bceSAndroid Build Coastguard Worker private:
60*35238bceSAndroid Build Coastguard Worker const char *const m_testNamePostfix;
61*35238bceSAndroid Build Coastguard Worker };
62*35238bceSAndroid Build Coastguard Worker
TexParamVerifier(const glw::Functions & gl,tcu::TestLog & log,const char * testNamePostfix)63*35238bceSAndroid Build Coastguard Worker TexParamVerifier::TexParamVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix)
64*35238bceSAndroid Build Coastguard Worker : glu::CallLogWrapper(gl, log)
65*35238bceSAndroid Build Coastguard Worker , m_testNamePostfix(testNamePostfix)
66*35238bceSAndroid Build Coastguard Worker {
67*35238bceSAndroid Build Coastguard Worker enableLogging(true);
68*35238bceSAndroid Build Coastguard Worker }
~TexParamVerifier()69*35238bceSAndroid Build Coastguard Worker TexParamVerifier::~TexParamVerifier()
70*35238bceSAndroid Build Coastguard Worker {
71*35238bceSAndroid Build Coastguard Worker }
72*35238bceSAndroid Build Coastguard Worker
getTestNamePostfix(void) const73*35238bceSAndroid Build Coastguard Worker const char *TexParamVerifier::getTestNamePostfix(void) const
74*35238bceSAndroid Build Coastguard Worker {
75*35238bceSAndroid Build Coastguard Worker return m_testNamePostfix;
76*35238bceSAndroid Build Coastguard Worker }
77*35238bceSAndroid Build Coastguard Worker
78*35238bceSAndroid Build Coastguard Worker class GetTexParameterIVerifier : public TexParamVerifier
79*35238bceSAndroid Build Coastguard Worker {
80*35238bceSAndroid Build Coastguard Worker public:
81*35238bceSAndroid Build Coastguard Worker GetTexParameterIVerifier(const glw::Functions &gl, tcu::TestLog &log);
82*35238bceSAndroid Build Coastguard Worker
83*35238bceSAndroid Build Coastguard Worker void verifyInteger(tcu::TestContext &testCtx, GLenum target, GLenum name, GLint reference);
84*35238bceSAndroid Build Coastguard Worker void verifyFloat(tcu::TestContext &testCtx, GLenum target, GLenum name, GLfloat reference);
85*35238bceSAndroid Build Coastguard Worker };
86*35238bceSAndroid Build Coastguard Worker
GetTexParameterIVerifier(const glw::Functions & gl,tcu::TestLog & log)87*35238bceSAndroid Build Coastguard Worker GetTexParameterIVerifier::GetTexParameterIVerifier(const glw::Functions &gl, tcu::TestLog &log)
88*35238bceSAndroid Build Coastguard Worker : TexParamVerifier(gl, log, "_gettexparameteri")
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker }
91*35238bceSAndroid Build Coastguard Worker
verifyInteger(tcu::TestContext & testCtx,GLenum target,GLenum name,GLint reference)92*35238bceSAndroid Build Coastguard Worker void GetTexParameterIVerifier::verifyInteger(tcu::TestContext &testCtx, GLenum target, GLenum name, GLint reference)
93*35238bceSAndroid Build Coastguard Worker {
94*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
95*35238bceSAndroid Build Coastguard Worker
96*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint> state;
97*35238bceSAndroid Build Coastguard Worker glGetTexParameteriv(target, name, &state);
98*35238bceSAndroid Build Coastguard Worker
99*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
100*35238bceSAndroid Build Coastguard Worker return;
101*35238bceSAndroid Build Coastguard Worker
102*35238bceSAndroid Build Coastguard Worker if (state != reference)
103*35238bceSAndroid Build Coastguard Worker {
104*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference << "; got " << state
105*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
106*35238bceSAndroid Build Coastguard Worker
107*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
108*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid texture param value");
109*35238bceSAndroid Build Coastguard Worker }
110*35238bceSAndroid Build Coastguard Worker }
111*35238bceSAndroid Build Coastguard Worker
verifyFloat(tcu::TestContext & testCtx,GLenum target,GLenum name,GLfloat reference)112*35238bceSAndroid Build Coastguard Worker void GetTexParameterIVerifier::verifyFloat(tcu::TestContext &testCtx, GLenum target, GLenum name, GLfloat reference)
113*35238bceSAndroid Build Coastguard Worker {
114*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
115*35238bceSAndroid Build Coastguard Worker
116*35238bceSAndroid Build Coastguard Worker const GLint expectedGLStateMax = StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint>(reference);
117*35238bceSAndroid Build Coastguard Worker const GLint expectedGLStateMin = StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint>(reference);
118*35238bceSAndroid Build Coastguard Worker
119*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint> state;
120*35238bceSAndroid Build Coastguard Worker glGetTexParameteriv(target, name, &state);
121*35238bceSAndroid Build Coastguard Worker
122*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
123*35238bceSAndroid Build Coastguard Worker return;
124*35238bceSAndroid Build Coastguard Worker
125*35238bceSAndroid Build Coastguard Worker if (state < expectedGLStateMin || state > expectedGLStateMax)
126*35238bceSAndroid Build Coastguard Worker {
127*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << expectedGLStateMin << ", "
128*35238bceSAndroid Build Coastguard Worker << expectedGLStateMax << "]; got " << state << TestLog::EndMessage;
129*35238bceSAndroid Build Coastguard Worker
130*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
131*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid texture param value");
132*35238bceSAndroid Build Coastguard Worker }
133*35238bceSAndroid Build Coastguard Worker }
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard Worker class GetTexParameterFVerifier : public TexParamVerifier
136*35238bceSAndroid Build Coastguard Worker {
137*35238bceSAndroid Build Coastguard Worker public:
138*35238bceSAndroid Build Coastguard Worker GetTexParameterFVerifier(const glw::Functions &gl, tcu::TestLog &log);
139*35238bceSAndroid Build Coastguard Worker
140*35238bceSAndroid Build Coastguard Worker void verifyInteger(tcu::TestContext &testCtx, GLenum target, GLenum name, GLint reference);
141*35238bceSAndroid Build Coastguard Worker void verifyFloat(tcu::TestContext &testCtx, GLenum target, GLenum name, GLfloat reference);
142*35238bceSAndroid Build Coastguard Worker };
143*35238bceSAndroid Build Coastguard Worker
GetTexParameterFVerifier(const glw::Functions & gl,tcu::TestLog & log)144*35238bceSAndroid Build Coastguard Worker GetTexParameterFVerifier::GetTexParameterFVerifier(const glw::Functions &gl, tcu::TestLog &log)
145*35238bceSAndroid Build Coastguard Worker : TexParamVerifier(gl, log, "_gettexparameterf")
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker }
148*35238bceSAndroid Build Coastguard Worker
verifyInteger(tcu::TestContext & testCtx,GLenum target,GLenum name,GLint reference)149*35238bceSAndroid Build Coastguard Worker void GetTexParameterFVerifier::verifyInteger(tcu::TestContext &testCtx, GLenum target, GLenum name, GLint reference)
150*35238bceSAndroid Build Coastguard Worker {
151*35238bceSAndroid Build Coastguard Worker DE_ASSERT(
152*35238bceSAndroid Build Coastguard Worker reference ==
153*35238bceSAndroid Build Coastguard Worker GLint(GLfloat(
154*35238bceSAndroid Build Coastguard Worker reference))); // reference integer must have 1:1 mapping to float for this to work. Reference value is always such value in these tests
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
157*35238bceSAndroid Build Coastguard Worker
158*35238bceSAndroid Build Coastguard Worker const GLfloat referenceAsFloat = GLfloat(reference);
159*35238bceSAndroid Build Coastguard Worker
160*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLfloat> state;
161*35238bceSAndroid Build Coastguard Worker glGetTexParameterfv(target, name, &state);
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
164*35238bceSAndroid Build Coastguard Worker return;
165*35238bceSAndroid Build Coastguard Worker
166*35238bceSAndroid Build Coastguard Worker if (state != referenceAsFloat)
167*35238bceSAndroid Build Coastguard Worker {
168*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << referenceAsFloat << "; got " << state
169*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
170*35238bceSAndroid Build Coastguard Worker
171*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
172*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
173*35238bceSAndroid Build Coastguard Worker }
174*35238bceSAndroid Build Coastguard Worker }
175*35238bceSAndroid Build Coastguard Worker
verifyFloat(tcu::TestContext & testCtx,GLenum target,GLenum name,GLfloat reference)176*35238bceSAndroid Build Coastguard Worker void GetTexParameterFVerifier::verifyFloat(tcu::TestContext &testCtx, GLenum target, GLenum name, GLfloat reference)
177*35238bceSAndroid Build Coastguard Worker {
178*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
179*35238bceSAndroid Build Coastguard Worker
180*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLfloat> state;
181*35238bceSAndroid Build Coastguard Worker glGetTexParameterfv(target, name, &state);
182*35238bceSAndroid Build Coastguard Worker
183*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
184*35238bceSAndroid Build Coastguard Worker return;
185*35238bceSAndroid Build Coastguard Worker
186*35238bceSAndroid Build Coastguard Worker if (state != reference)
187*35238bceSAndroid Build Coastguard Worker {
188*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference << "; got " << state
189*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
190*35238bceSAndroid Build Coastguard Worker
191*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
192*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
193*35238bceSAndroid Build Coastguard Worker }
194*35238bceSAndroid Build Coastguard Worker }
195*35238bceSAndroid Build Coastguard Worker
196*35238bceSAndroid Build Coastguard Worker } // namespace TextureParamVerifiers
197*35238bceSAndroid Build Coastguard Worker
198*35238bceSAndroid Build Coastguard Worker namespace
199*35238bceSAndroid Build Coastguard Worker {
200*35238bceSAndroid Build Coastguard Worker
201*35238bceSAndroid Build Coastguard Worker using namespace TextureParamVerifiers;
202*35238bceSAndroid Build Coastguard Worker
203*35238bceSAndroid Build Coastguard Worker // Tests
204*35238bceSAndroid Build Coastguard Worker
205*35238bceSAndroid Build Coastguard Worker class TextureCase : public ApiCase
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker public:
TextureCase(Context & context,TexParamVerifier * verifier,const char * name,const char * description,GLenum textureTarget)208*35238bceSAndroid Build Coastguard Worker TextureCase(Context &context, TexParamVerifier *verifier, const char *name, const char *description,
209*35238bceSAndroid Build Coastguard Worker GLenum textureTarget)
210*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
211*35238bceSAndroid Build Coastguard Worker , m_textureTarget(textureTarget)
212*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
213*35238bceSAndroid Build Coastguard Worker {
214*35238bceSAndroid Build Coastguard Worker }
215*35238bceSAndroid Build Coastguard Worker
216*35238bceSAndroid Build Coastguard Worker virtual void testTexture(void) = DE_NULL;
217*35238bceSAndroid Build Coastguard Worker
test(void)218*35238bceSAndroid Build Coastguard Worker void test(void)
219*35238bceSAndroid Build Coastguard Worker {
220*35238bceSAndroid Build Coastguard Worker GLuint textureId = 0;
221*35238bceSAndroid Build Coastguard Worker glGenTextures(1, &textureId);
222*35238bceSAndroid Build Coastguard Worker glBindTexture(m_textureTarget, textureId);
223*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
224*35238bceSAndroid Build Coastguard Worker
225*35238bceSAndroid Build Coastguard Worker testTexture();
226*35238bceSAndroid Build Coastguard Worker
227*35238bceSAndroid Build Coastguard Worker glDeleteTextures(1, &textureId);
228*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
229*35238bceSAndroid Build Coastguard Worker }
230*35238bceSAndroid Build Coastguard Worker
231*35238bceSAndroid Build Coastguard Worker protected:
232*35238bceSAndroid Build Coastguard Worker GLenum m_textureTarget;
233*35238bceSAndroid Build Coastguard Worker TexParamVerifier *m_verifier;
234*35238bceSAndroid Build Coastguard Worker };
235*35238bceSAndroid Build Coastguard Worker
236*35238bceSAndroid Build Coastguard Worker class TextureWrapCase : public TextureCase
237*35238bceSAndroid Build Coastguard Worker {
238*35238bceSAndroid Build Coastguard Worker public:
TextureWrapCase(Context & context,TexParamVerifier * verifier,const char * name,const char * description,GLenum textureTarget,GLenum valueName)239*35238bceSAndroid Build Coastguard Worker TextureWrapCase(Context &context, TexParamVerifier *verifier, const char *name, const char *description,
240*35238bceSAndroid Build Coastguard Worker GLenum textureTarget, GLenum valueName)
241*35238bceSAndroid Build Coastguard Worker : TextureCase(context, verifier, name, description, textureTarget)
242*35238bceSAndroid Build Coastguard Worker , m_valueName(valueName)
243*35238bceSAndroid Build Coastguard Worker {
244*35238bceSAndroid Build Coastguard Worker }
245*35238bceSAndroid Build Coastguard Worker
testTexture(void)246*35238bceSAndroid Build Coastguard Worker void testTexture(void)
247*35238bceSAndroid Build Coastguard Worker {
248*35238bceSAndroid Build Coastguard Worker const GLenum wrapValues[] = {GL_CLAMP_TO_EDGE, GL_REPEAT, GL_MIRRORED_REPEAT};
249*35238bceSAndroid Build Coastguard Worker
250*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, m_valueName, GL_REPEAT);
251*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
252*35238bceSAndroid Build Coastguard Worker
253*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(wrapValues); ++ndx)
254*35238bceSAndroid Build Coastguard Worker {
255*35238bceSAndroid Build Coastguard Worker glTexParameteri(m_textureTarget, m_valueName, wrapValues[ndx]);
256*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, m_valueName, wrapValues[ndx]);
259*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
260*35238bceSAndroid Build Coastguard Worker }
261*35238bceSAndroid Build Coastguard Worker
262*35238bceSAndroid Build Coastguard Worker //check unit conversions with float
263*35238bceSAndroid Build Coastguard Worker
264*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(wrapValues); ++ndx)
265*35238bceSAndroid Build Coastguard Worker {
266*35238bceSAndroid Build Coastguard Worker glTexParameterf(m_textureTarget, m_valueName, (GLfloat)wrapValues[ndx]);
267*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
268*35238bceSAndroid Build Coastguard Worker
269*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, m_valueName, wrapValues[ndx]);
270*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
271*35238bceSAndroid Build Coastguard Worker }
272*35238bceSAndroid Build Coastguard Worker }
273*35238bceSAndroid Build Coastguard Worker
274*35238bceSAndroid Build Coastguard Worker private:
275*35238bceSAndroid Build Coastguard Worker GLenum m_valueName;
276*35238bceSAndroid Build Coastguard Worker };
277*35238bceSAndroid Build Coastguard Worker
278*35238bceSAndroid Build Coastguard Worker class TextureMagFilterCase : public TextureCase
279*35238bceSAndroid Build Coastguard Worker {
280*35238bceSAndroid Build Coastguard Worker public:
TextureMagFilterCase(Context & context,TexParamVerifier * verifier,const char * name,const char * description,GLenum textureTarget)281*35238bceSAndroid Build Coastguard Worker TextureMagFilterCase(Context &context, TexParamVerifier *verifier, const char *name, const char *description,
282*35238bceSAndroid Build Coastguard Worker GLenum textureTarget)
283*35238bceSAndroid Build Coastguard Worker : TextureCase(context, verifier, name, description, textureTarget)
284*35238bceSAndroid Build Coastguard Worker {
285*35238bceSAndroid Build Coastguard Worker }
286*35238bceSAndroid Build Coastguard Worker
testTexture(void)287*35238bceSAndroid Build Coastguard Worker void testTexture(void)
288*35238bceSAndroid Build Coastguard Worker {
289*35238bceSAndroid Build Coastguard Worker const GLenum magValues[] = {GL_NEAREST, GL_LINEAR};
290*35238bceSAndroid Build Coastguard Worker
291*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
292*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
293*35238bceSAndroid Build Coastguard Worker
294*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(magValues); ++ndx)
295*35238bceSAndroid Build Coastguard Worker {
296*35238bceSAndroid Build Coastguard Worker glTexParameteri(m_textureTarget, GL_TEXTURE_MAG_FILTER, magValues[ndx]);
297*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
298*35238bceSAndroid Build Coastguard Worker
299*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, GL_TEXTURE_MAG_FILTER, magValues[ndx]);
300*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
301*35238bceSAndroid Build Coastguard Worker }
302*35238bceSAndroid Build Coastguard Worker
303*35238bceSAndroid Build Coastguard Worker //check unit conversions with float
304*35238bceSAndroid Build Coastguard Worker
305*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(magValues); ++ndx)
306*35238bceSAndroid Build Coastguard Worker {
307*35238bceSAndroid Build Coastguard Worker glTexParameterf(m_textureTarget, GL_TEXTURE_MAG_FILTER, (GLfloat)magValues[ndx]);
308*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
309*35238bceSAndroid Build Coastguard Worker
310*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, GL_TEXTURE_MAG_FILTER, magValues[ndx]);
311*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
312*35238bceSAndroid Build Coastguard Worker }
313*35238bceSAndroid Build Coastguard Worker }
314*35238bceSAndroid Build Coastguard Worker };
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker class TextureMinFilterCase : public TextureCase
317*35238bceSAndroid Build Coastguard Worker {
318*35238bceSAndroid Build Coastguard Worker public:
TextureMinFilterCase(Context & context,TexParamVerifier * verifier,const char * name,const char * description,GLenum textureTarget)319*35238bceSAndroid Build Coastguard Worker TextureMinFilterCase(Context &context, TexParamVerifier *verifier, const char *name, const char *description,
320*35238bceSAndroid Build Coastguard Worker GLenum textureTarget)
321*35238bceSAndroid Build Coastguard Worker : TextureCase(context, verifier, name, description, textureTarget)
322*35238bceSAndroid Build Coastguard Worker {
323*35238bceSAndroid Build Coastguard Worker }
324*35238bceSAndroid Build Coastguard Worker
testTexture(void)325*35238bceSAndroid Build Coastguard Worker void testTexture(void)
326*35238bceSAndroid Build Coastguard Worker {
327*35238bceSAndroid Build Coastguard Worker const GLenum minValues[] = {GL_NEAREST,
328*35238bceSAndroid Build Coastguard Worker GL_LINEAR,
329*35238bceSAndroid Build Coastguard Worker GL_NEAREST_MIPMAP_NEAREST,
330*35238bceSAndroid Build Coastguard Worker GL_NEAREST_MIPMAP_LINEAR,
331*35238bceSAndroid Build Coastguard Worker GL_LINEAR_MIPMAP_NEAREST,
332*35238bceSAndroid Build Coastguard Worker GL_LINEAR_MIPMAP_LINEAR};
333*35238bceSAndroid Build Coastguard Worker
334*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
335*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
336*35238bceSAndroid Build Coastguard Worker
337*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(minValues); ++ndx)
338*35238bceSAndroid Build Coastguard Worker {
339*35238bceSAndroid Build Coastguard Worker glTexParameteri(m_textureTarget, GL_TEXTURE_MIN_FILTER, minValues[ndx]);
340*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
341*35238bceSAndroid Build Coastguard Worker
342*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, GL_TEXTURE_MIN_FILTER, minValues[ndx]);
343*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
344*35238bceSAndroid Build Coastguard Worker }
345*35238bceSAndroid Build Coastguard Worker
346*35238bceSAndroid Build Coastguard Worker //check unit conversions with float
347*35238bceSAndroid Build Coastguard Worker
348*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(minValues); ++ndx)
349*35238bceSAndroid Build Coastguard Worker {
350*35238bceSAndroid Build Coastguard Worker glTexParameterf(m_textureTarget, GL_TEXTURE_MIN_FILTER, (GLfloat)minValues[ndx]);
351*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
352*35238bceSAndroid Build Coastguard Worker
353*35238bceSAndroid Build Coastguard Worker m_verifier->verifyInteger(m_testCtx, m_textureTarget, GL_TEXTURE_MIN_FILTER, minValues[ndx]);
354*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
355*35238bceSAndroid Build Coastguard Worker }
356*35238bceSAndroid Build Coastguard Worker }
357*35238bceSAndroid Build Coastguard Worker };
358*35238bceSAndroid Build Coastguard Worker
359*35238bceSAndroid Build Coastguard Worker } // namespace
360*35238bceSAndroid Build Coastguard Worker
361*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(VERIFIERS, CODE_BLOCK) \
362*35238bceSAndroid Build Coastguard Worker do \
363*35238bceSAndroid Build Coastguard Worker { \
364*35238bceSAndroid Build Coastguard Worker for (int _verifierNdx = 0; _verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); _verifierNdx++) \
365*35238bceSAndroid Build Coastguard Worker { \
366*35238bceSAndroid Build Coastguard Worker TexParamVerifier *verifier = (VERIFIERS)[_verifierNdx]; \
367*35238bceSAndroid Build Coastguard Worker CODE_BLOCK; \
368*35238bceSAndroid Build Coastguard Worker } \
369*35238bceSAndroid Build Coastguard Worker } while (0)
370*35238bceSAndroid Build Coastguard Worker
TextureStateQueryTests(Context & context)371*35238bceSAndroid Build Coastguard Worker TextureStateQueryTests::TextureStateQueryTests(Context &context)
372*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "texture", "Texture State Query tests")
373*35238bceSAndroid Build Coastguard Worker , m_verifierInt(DE_NULL)
374*35238bceSAndroid Build Coastguard Worker , m_verifierFloat(DE_NULL)
375*35238bceSAndroid Build Coastguard Worker {
376*35238bceSAndroid Build Coastguard Worker }
377*35238bceSAndroid Build Coastguard Worker
~TextureStateQueryTests(void)378*35238bceSAndroid Build Coastguard Worker TextureStateQueryTests::~TextureStateQueryTests(void)
379*35238bceSAndroid Build Coastguard Worker {
380*35238bceSAndroid Build Coastguard Worker deinit();
381*35238bceSAndroid Build Coastguard Worker }
382*35238bceSAndroid Build Coastguard Worker
init(void)383*35238bceSAndroid Build Coastguard Worker void TextureStateQueryTests::init(void)
384*35238bceSAndroid Build Coastguard Worker {
385*35238bceSAndroid Build Coastguard Worker using namespace TextureParamVerifiers;
386*35238bceSAndroid Build Coastguard Worker
387*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_verifierInt == DE_NULL);
388*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_verifierFloat == DE_NULL);
389*35238bceSAndroid Build Coastguard Worker
390*35238bceSAndroid Build Coastguard Worker m_verifierInt =
391*35238bceSAndroid Build Coastguard Worker new GetTexParameterIVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
392*35238bceSAndroid Build Coastguard Worker m_verifierFloat =
393*35238bceSAndroid Build Coastguard Worker new GetTexParameterFVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
394*35238bceSAndroid Build Coastguard Worker
395*35238bceSAndroid Build Coastguard Worker TexParamVerifier *verifiers[] = {m_verifierInt, m_verifierFloat};
396*35238bceSAndroid Build Coastguard Worker
397*35238bceSAndroid Build Coastguard Worker const struct
398*35238bceSAndroid Build Coastguard Worker {
399*35238bceSAndroid Build Coastguard Worker const char *name;
400*35238bceSAndroid Build Coastguard Worker GLenum textureTarget;
401*35238bceSAndroid Build Coastguard Worker } textureTargets[] = {{"texture_2d", GL_TEXTURE_2D}, {"texture_cube_map", GL_TEXTURE_CUBE_MAP}};
402*35238bceSAndroid Build Coastguard Worker
403*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(textureTargets); ++ndx)
404*35238bceSAndroid Build Coastguard Worker {
405*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(
406*35238bceSAndroid Build Coastguard Worker verifiers,
407*35238bceSAndroid Build Coastguard Worker addChild(new TextureWrapCase(
408*35238bceSAndroid Build Coastguard Worker m_context, verifier,
409*35238bceSAndroid Build Coastguard Worker (std::string(textureTargets[ndx].name) + "_texture_wrap_s" + verifier->getTestNamePostfix()).c_str(),
410*35238bceSAndroid Build Coastguard Worker "TEXTURE_WRAP_S", textureTargets[ndx].textureTarget, GL_TEXTURE_WRAP_S)));
411*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(
412*35238bceSAndroid Build Coastguard Worker verifiers,
413*35238bceSAndroid Build Coastguard Worker addChild(new TextureWrapCase(
414*35238bceSAndroid Build Coastguard Worker m_context, verifier,
415*35238bceSAndroid Build Coastguard Worker (std::string(textureTargets[ndx].name) + "_texture_wrap_t" + verifier->getTestNamePostfix()).c_str(),
416*35238bceSAndroid Build Coastguard Worker "TEXTURE_WRAP_T", textureTargets[ndx].textureTarget, GL_TEXTURE_WRAP_T)));
417*35238bceSAndroid Build Coastguard Worker
418*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers,
419*35238bceSAndroid Build Coastguard Worker addChild(new TextureMagFilterCase(m_context, verifier,
420*35238bceSAndroid Build Coastguard Worker (std::string(textureTargets[ndx].name) +
421*35238bceSAndroid Build Coastguard Worker "_texture_mag_filter" + verifier->getTestNamePostfix())
422*35238bceSAndroid Build Coastguard Worker .c_str(),
423*35238bceSAndroid Build Coastguard Worker "TEXTURE_MAG_FILTER", textureTargets[ndx].textureTarget)));
424*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers,
425*35238bceSAndroid Build Coastguard Worker addChild(new TextureMinFilterCase(m_context, verifier,
426*35238bceSAndroid Build Coastguard Worker (std::string(textureTargets[ndx].name) +
427*35238bceSAndroid Build Coastguard Worker "_texture_min_filter" + verifier->getTestNamePostfix())
428*35238bceSAndroid Build Coastguard Worker .c_str(),
429*35238bceSAndroid Build Coastguard Worker "TEXTURE_MIN_FILTER", textureTargets[ndx].textureTarget)));
430*35238bceSAndroid Build Coastguard Worker }
431*35238bceSAndroid Build Coastguard Worker }
432*35238bceSAndroid Build Coastguard Worker
deinit(void)433*35238bceSAndroid Build Coastguard Worker void TextureStateQueryTests::deinit(void)
434*35238bceSAndroid Build Coastguard Worker {
435*35238bceSAndroid Build Coastguard Worker if (m_verifierInt)
436*35238bceSAndroid Build Coastguard Worker {
437*35238bceSAndroid Build Coastguard Worker delete m_verifierInt;
438*35238bceSAndroid Build Coastguard Worker m_verifierInt = NULL;
439*35238bceSAndroid Build Coastguard Worker }
440*35238bceSAndroid Build Coastguard Worker if (m_verifierFloat)
441*35238bceSAndroid Build Coastguard Worker {
442*35238bceSAndroid Build Coastguard Worker delete m_verifierFloat;
443*35238bceSAndroid Build Coastguard Worker m_verifierFloat = NULL;
444*35238bceSAndroid Build Coastguard Worker }
445*35238bceSAndroid Build Coastguard Worker
446*35238bceSAndroid Build Coastguard Worker this->TestCaseGroup::deinit();
447*35238bceSAndroid Build Coastguard Worker }
448*35238bceSAndroid Build Coastguard Worker
449*35238bceSAndroid Build Coastguard Worker } // namespace Functional
450*35238bceSAndroid Build Coastguard Worker } // namespace gles2
451*35238bceSAndroid Build Coastguard Worker } // namespace deqp
452