xref: /aosp_15_r20/external/deqp/modules/gles2/functional/es2fTextureStateQueryTests.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
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