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 Float State Query tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "es2fFloatStateQueryTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "glsStateQueryUtil.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "es2fApiCase.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "gluRenderContext.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuRenderTarget.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "tcuFormatUtil.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "deMath.h"
32*35238bceSAndroid Build Coastguard Worker #include "glwEnums.hpp"
33*35238bceSAndroid Build Coastguard Worker
34*35238bceSAndroid Build Coastguard Worker #include <limits>
35*35238bceSAndroid Build Coastguard Worker
36*35238bceSAndroid Build Coastguard Worker using namespace glw; // GLint and other GL types
37*35238bceSAndroid Build Coastguard Worker using namespace deqp::gls;
38*35238bceSAndroid Build Coastguard Worker using deqp::gls::StateQueryUtil::StateQueryMemoryWriteGuard;
39*35238bceSAndroid Build Coastguard Worker
40*35238bceSAndroid Build Coastguard Worker namespace deqp
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker namespace gles2
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker namespace Functional
45*35238bceSAndroid Build Coastguard Worker {
46*35238bceSAndroid Build Coastguard Worker namespace FloatStateQueryVerifiers
47*35238bceSAndroid Build Coastguard Worker {
48*35238bceSAndroid Build Coastguard Worker namespace
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker
51*35238bceSAndroid Build Coastguard Worker const int FLOAT_EXPANSION_E = 0x03FF; // 10 bits error allowed, requires 22 accurate bits
52*35238bceSAndroid Build Coastguard Worker const int FLOAT_EXPANSION_E_64 = 0x07FF;
53*35238bceSAndroid Build Coastguard Worker
expandGLFloatToInteger(GLfloat f)54*35238bceSAndroid Build Coastguard Worker GLint64 expandGLFloatToInteger(GLfloat f)
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker const GLuint64 referenceValue = (GLint64)((f * double(0xFFFFFFFFULL) - 1) / 2);
57*35238bceSAndroid Build Coastguard Worker return referenceValue;
58*35238bceSAndroid Build Coastguard Worker }
59*35238bceSAndroid Build Coastguard Worker
clampToGLint(GLint64 val)60*35238bceSAndroid Build Coastguard Worker GLint clampToGLint(GLint64 val)
61*35238bceSAndroid Build Coastguard Worker {
62*35238bceSAndroid Build Coastguard Worker return (GLint)de::clamp<GLint64>(val, std::numeric_limits<GLint>::min(), std::numeric_limits<GLint>::max());
63*35238bceSAndroid Build Coastguard Worker }
64*35238bceSAndroid Build Coastguard Worker
65*35238bceSAndroid Build Coastguard Worker } // namespace
66*35238bceSAndroid Build Coastguard Worker
67*35238bceSAndroid Build Coastguard Worker // StateVerifier
68*35238bceSAndroid Build Coastguard Worker
69*35238bceSAndroid Build Coastguard Worker class StateVerifier : protected glu::CallLogWrapper
70*35238bceSAndroid Build Coastguard Worker {
71*35238bceSAndroid Build Coastguard Worker public:
72*35238bceSAndroid Build Coastguard Worker StateVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix);
73*35238bceSAndroid Build Coastguard Worker virtual ~StateVerifier(); // make GCC happy
74*35238bceSAndroid Build Coastguard Worker
75*35238bceSAndroid Build Coastguard Worker const char *getTestNamePostfix(void) const;
76*35238bceSAndroid Build Coastguard Worker
77*35238bceSAndroid Build Coastguard Worker virtual void verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference) = DE_NULL;
78*35238bceSAndroid Build Coastguard Worker
79*35238bceSAndroid Build Coastguard Worker // "Expanded" == Float to int conversion converts from [-1.0 to 1.0] -> [MIN_INT MAX_INT]
80*35238bceSAndroid Build Coastguard Worker virtual void verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference) = DE_NULL;
81*35238bceSAndroid Build Coastguard Worker virtual void verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
82*35238bceSAndroid Build Coastguard Worker GLfloat reference1) = DE_NULL;
83*35238bceSAndroid Build Coastguard Worker virtual void verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1,
84*35238bceSAndroid Build Coastguard Worker GLfloat reference2, GLfloat reference3) = DE_NULL;
85*35238bceSAndroid Build Coastguard Worker
86*35238bceSAndroid Build Coastguard Worker // verify that the given range is completely whitin the GL state range
87*35238bceSAndroid Build Coastguard Worker virtual void verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max) = DE_NULL;
88*35238bceSAndroid Build Coastguard Worker
89*35238bceSAndroid Build Coastguard Worker private:
90*35238bceSAndroid Build Coastguard Worker const char *const m_testNamePostfix;
91*35238bceSAndroid Build Coastguard Worker };
92*35238bceSAndroid Build Coastguard Worker
StateVerifier(const glw::Functions & gl,tcu::TestLog & log,const char * testNamePostfix)93*35238bceSAndroid Build Coastguard Worker StateVerifier::StateVerifier(const glw::Functions &gl, tcu::TestLog &log, const char *testNamePostfix)
94*35238bceSAndroid Build Coastguard Worker : glu::CallLogWrapper(gl, log)
95*35238bceSAndroid Build Coastguard Worker , m_testNamePostfix(testNamePostfix)
96*35238bceSAndroid Build Coastguard Worker {
97*35238bceSAndroid Build Coastguard Worker enableLogging(true);
98*35238bceSAndroid Build Coastguard Worker }
99*35238bceSAndroid Build Coastguard Worker
~StateVerifier()100*35238bceSAndroid Build Coastguard Worker StateVerifier::~StateVerifier()
101*35238bceSAndroid Build Coastguard Worker {
102*35238bceSAndroid Build Coastguard Worker }
103*35238bceSAndroid Build Coastguard Worker
getTestNamePostfix(void) const104*35238bceSAndroid Build Coastguard Worker const char *StateVerifier::getTestNamePostfix(void) const
105*35238bceSAndroid Build Coastguard Worker {
106*35238bceSAndroid Build Coastguard Worker return m_testNamePostfix;
107*35238bceSAndroid Build Coastguard Worker }
108*35238bceSAndroid Build Coastguard Worker
109*35238bceSAndroid Build Coastguard Worker // GetBooleanVerifier
110*35238bceSAndroid Build Coastguard Worker
111*35238bceSAndroid Build Coastguard Worker class GetBooleanVerifier : public StateVerifier
112*35238bceSAndroid Build Coastguard Worker {
113*35238bceSAndroid Build Coastguard Worker public:
114*35238bceSAndroid Build Coastguard Worker GetBooleanVerifier(const glw::Functions &gl, tcu::TestLog &log);
115*35238bceSAndroid Build Coastguard Worker void verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
116*35238bceSAndroid Build Coastguard Worker void verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
117*35238bceSAndroid Build Coastguard Worker void verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1);
118*35238bceSAndroid Build Coastguard Worker void verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1,
119*35238bceSAndroid Build Coastguard Worker GLfloat reference2, GLfloat reference3);
120*35238bceSAndroid Build Coastguard Worker void verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max);
121*35238bceSAndroid Build Coastguard Worker };
122*35238bceSAndroid Build Coastguard Worker
GetBooleanVerifier(const glw::Functions & gl,tcu::TestLog & log)123*35238bceSAndroid Build Coastguard Worker GetBooleanVerifier::GetBooleanVerifier(const glw::Functions &gl, tcu::TestLog &log)
124*35238bceSAndroid Build Coastguard Worker : StateVerifier(gl, log, "_getboolean")
125*35238bceSAndroid Build Coastguard Worker {
126*35238bceSAndroid Build Coastguard Worker }
127*35238bceSAndroid Build Coastguard Worker
verifyFloat(tcu::TestContext & testCtx,GLenum name,GLfloat reference)128*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
129*35238bceSAndroid Build Coastguard Worker {
130*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
131*35238bceSAndroid Build Coastguard Worker
132*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLboolean> state;
133*35238bceSAndroid Build Coastguard Worker glGetBooleanv(name, &state);
134*35238bceSAndroid Build Coastguard Worker
135*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
136*35238bceSAndroid Build Coastguard Worker return;
137*35238bceSAndroid Build Coastguard Worker
138*35238bceSAndroid Build Coastguard Worker const GLboolean expectedGLState = reference != 0.0f ? GL_TRUE : GL_FALSE;
139*35238bceSAndroid Build Coastguard Worker
140*35238bceSAndroid Build Coastguard Worker if (state != expectedGLState)
141*35238bceSAndroid Build Coastguard Worker {
142*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected "
143*35238bceSAndroid Build Coastguard Worker << (expectedGLState == GL_TRUE ? "GL_TRUE" : "GL_FALSE") << "; got "
144*35238bceSAndroid Build Coastguard Worker << (state == GL_TRUE ? "GL_TRUE" : (state == GL_FALSE ? "GL_FALSE" : "non-boolean"))
145*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
146*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
147*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
148*35238bceSAndroid Build Coastguard Worker }
149*35238bceSAndroid Build Coastguard Worker }
150*35238bceSAndroid Build Coastguard Worker
verifyFloatExpanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference)151*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
152*35238bceSAndroid Build Coastguard Worker {
153*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference, -1.0f, 1.0f));
154*35238bceSAndroid Build Coastguard Worker verifyFloat(testCtx, name, reference);
155*35238bceSAndroid Build Coastguard Worker }
156*35238bceSAndroid Build Coastguard Worker
verifyFloat2Expanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1)157*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
158*35238bceSAndroid Build Coastguard Worker GLfloat reference1)
159*35238bceSAndroid Build Coastguard Worker {
160*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f));
161*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f));
162*35238bceSAndroid Build Coastguard Worker
163*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
164*35238bceSAndroid Build Coastguard Worker
165*35238bceSAndroid Build Coastguard Worker const GLboolean referenceAsGLBoolean[] = {
166*35238bceSAndroid Build Coastguard Worker reference0 != 0.0f ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
167*35238bceSAndroid Build Coastguard Worker reference1 != 0.0f ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
168*35238bceSAndroid Build Coastguard Worker };
169*35238bceSAndroid Build Coastguard Worker
170*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLboolean[2]> boolVector2;
171*35238bceSAndroid Build Coastguard Worker glGetBooleanv(name, boolVector2);
172*35238bceSAndroid Build Coastguard Worker
173*35238bceSAndroid Build Coastguard Worker if (!boolVector2.verifyValidity(testCtx))
174*35238bceSAndroid Build Coastguard Worker return;
175*35238bceSAndroid Build Coastguard Worker
176*35238bceSAndroid Build Coastguard Worker if (boolVector2[0] != referenceAsGLBoolean[0] || boolVector2[1] != referenceAsGLBoolean[1])
177*35238bceSAndroid Build Coastguard Worker {
178*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << (boolVector2[0] ? "GL_TRUE" : "GL_FALSE")
179*35238bceSAndroid Build Coastguard Worker << " " << (boolVector2[1] ? "GL_TRUE" : "GL_FALSE") << " " << TestLog::EndMessage;
180*35238bceSAndroid Build Coastguard Worker
181*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
182*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
183*35238bceSAndroid Build Coastguard Worker }
184*35238bceSAndroid Build Coastguard Worker }
185*35238bceSAndroid Build Coastguard Worker
verifyFloat4Color(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1,GLfloat reference2,GLfloat reference3)186*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
187*35238bceSAndroid Build Coastguard Worker GLfloat reference1, GLfloat reference2, GLfloat reference3)
188*35238bceSAndroid Build Coastguard Worker {
189*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
190*35238bceSAndroid Build Coastguard Worker
191*35238bceSAndroid Build Coastguard Worker const GLboolean referenceAsGLBoolean[] = {
192*35238bceSAndroid Build Coastguard Worker reference0 != 0.0f ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
193*35238bceSAndroid Build Coastguard Worker reference1 != 0.0f ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
194*35238bceSAndroid Build Coastguard Worker reference2 != 0.0f ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
195*35238bceSAndroid Build Coastguard Worker reference3 != 0.0f ? GLboolean(GL_TRUE) : GLboolean(GL_FALSE),
196*35238bceSAndroid Build Coastguard Worker };
197*35238bceSAndroid Build Coastguard Worker
198*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLboolean[4]> boolVector4;
199*35238bceSAndroid Build Coastguard Worker glGetBooleanv(name, boolVector4);
200*35238bceSAndroid Build Coastguard Worker
201*35238bceSAndroid Build Coastguard Worker if (!boolVector4.verifyValidity(testCtx))
202*35238bceSAndroid Build Coastguard Worker return;
203*35238bceSAndroid Build Coastguard Worker
204*35238bceSAndroid Build Coastguard Worker if (boolVector4[0] != referenceAsGLBoolean[0] || boolVector4[1] != referenceAsGLBoolean[1] ||
205*35238bceSAndroid Build Coastguard Worker boolVector4[2] != referenceAsGLBoolean[2] || boolVector4[3] != referenceAsGLBoolean[3])
206*35238bceSAndroid Build Coastguard Worker {
207*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected "
208*35238bceSAndroid Build Coastguard Worker << (referenceAsGLBoolean[0] ? "GL_TRUE" : "GL_FALSE") << " "
209*35238bceSAndroid Build Coastguard Worker << (referenceAsGLBoolean[1] ? "GL_TRUE" : "GL_FALSE") << " "
210*35238bceSAndroid Build Coastguard Worker << (referenceAsGLBoolean[2] ? "GL_TRUE" : "GL_FALSE") << " "
211*35238bceSAndroid Build Coastguard Worker << (referenceAsGLBoolean[3] ? "GL_TRUE" : "GL_FALSE") << TestLog::EndMessage;
212*35238bceSAndroid Build Coastguard Worker
213*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
214*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean value");
215*35238bceSAndroid Build Coastguard Worker }
216*35238bceSAndroid Build Coastguard Worker }
217*35238bceSAndroid Build Coastguard Worker
verifyFloatRange(tcu::TestContext & testCtx,GLenum name,GLfloat min,GLfloat max)218*35238bceSAndroid Build Coastguard Worker void GetBooleanVerifier::verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max)
219*35238bceSAndroid Build Coastguard Worker {
220*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
221*35238bceSAndroid Build Coastguard Worker
222*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLboolean[2]> range;
223*35238bceSAndroid Build Coastguard Worker glGetBooleanv(name, range);
224*35238bceSAndroid Build Coastguard Worker
225*35238bceSAndroid Build Coastguard Worker if (!range.verifyValidity(testCtx))
226*35238bceSAndroid Build Coastguard Worker return;
227*35238bceSAndroid Build Coastguard Worker
228*35238bceSAndroid Build Coastguard Worker if (range[0] == GL_FALSE)
229*35238bceSAndroid Build Coastguard Worker {
230*35238bceSAndroid Build Coastguard Worker if (max < 0 || min < 0)
231*35238bceSAndroid Build Coastguard Worker {
232*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: range [" << min << ", " << max << "] is not in range ["
233*35238bceSAndroid Build Coastguard Worker << (range[0] == GL_TRUE ? "GL_TRUE" : (range[0] == GL_FALSE ? "GL_FALSE" : "non-boolean"))
234*35238bceSAndroid Build Coastguard Worker << ", "
235*35238bceSAndroid Build Coastguard Worker << (range[1] == GL_TRUE ? "GL_TRUE" : (range[1] == GL_FALSE ? "GL_FALSE" : "non-boolean"))
236*35238bceSAndroid Build Coastguard Worker << "]" << TestLog::EndMessage;
237*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
238*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean range");
239*35238bceSAndroid Build Coastguard Worker return;
240*35238bceSAndroid Build Coastguard Worker }
241*35238bceSAndroid Build Coastguard Worker }
242*35238bceSAndroid Build Coastguard Worker if (range[1] == GL_FALSE)
243*35238bceSAndroid Build Coastguard Worker {
244*35238bceSAndroid Build Coastguard Worker if (max > 0 || min > 0)
245*35238bceSAndroid Build Coastguard Worker {
246*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: range [" << min << ", " << max << "] is not in range ["
247*35238bceSAndroid Build Coastguard Worker << (range[0] == GL_TRUE ? "GL_TRUE" : (range[0] == GL_FALSE ? "GL_FALSE" : "non-boolean"))
248*35238bceSAndroid Build Coastguard Worker << ", "
249*35238bceSAndroid Build Coastguard Worker << (range[1] == GL_TRUE ? "GL_TRUE" : (range[1] == GL_FALSE ? "GL_FALSE" : "non-boolean"))
250*35238bceSAndroid Build Coastguard Worker << "]" << TestLog::EndMessage;
251*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
252*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid boolean range");
253*35238bceSAndroid Build Coastguard Worker return;
254*35238bceSAndroid Build Coastguard Worker }
255*35238bceSAndroid Build Coastguard Worker }
256*35238bceSAndroid Build Coastguard Worker }
257*35238bceSAndroid Build Coastguard Worker
258*35238bceSAndroid Build Coastguard Worker //GetIntegerVerifier
259*35238bceSAndroid Build Coastguard Worker
260*35238bceSAndroid Build Coastguard Worker class GetIntegerVerifier : public StateVerifier
261*35238bceSAndroid Build Coastguard Worker {
262*35238bceSAndroid Build Coastguard Worker public:
263*35238bceSAndroid Build Coastguard Worker GetIntegerVerifier(const glw::Functions &gl, tcu::TestLog &log);
264*35238bceSAndroid Build Coastguard Worker void verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
265*35238bceSAndroid Build Coastguard Worker void verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
266*35238bceSAndroid Build Coastguard Worker void verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1);
267*35238bceSAndroid Build Coastguard Worker void verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1,
268*35238bceSAndroid Build Coastguard Worker GLfloat reference2, GLfloat reference3);
269*35238bceSAndroid Build Coastguard Worker void verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max);
270*35238bceSAndroid Build Coastguard Worker };
271*35238bceSAndroid Build Coastguard Worker
GetIntegerVerifier(const glw::Functions & gl,tcu::TestLog & log)272*35238bceSAndroid Build Coastguard Worker GetIntegerVerifier::GetIntegerVerifier(const glw::Functions &gl, tcu::TestLog &log)
273*35238bceSAndroid Build Coastguard Worker : StateVerifier(gl, log, "_getinteger")
274*35238bceSAndroid Build Coastguard Worker {
275*35238bceSAndroid Build Coastguard Worker }
276*35238bceSAndroid Build Coastguard Worker
verifyFloat(tcu::TestContext & testCtx,GLenum name,GLfloat reference)277*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
278*35238bceSAndroid Build Coastguard Worker {
279*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
280*35238bceSAndroid Build Coastguard Worker
281*35238bceSAndroid Build Coastguard Worker const GLint expectedGLStateMax = StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint>(reference);
282*35238bceSAndroid Build Coastguard Worker const GLint expectedGLStateMin = StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint>(reference);
283*35238bceSAndroid Build Coastguard Worker
284*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint> state;
285*35238bceSAndroid Build Coastguard Worker glGetIntegerv(name, &state);
286*35238bceSAndroid Build Coastguard Worker
287*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
288*35238bceSAndroid Build Coastguard Worker return;
289*35238bceSAndroid Build Coastguard Worker
290*35238bceSAndroid Build Coastguard Worker if (state < expectedGLStateMin || state > expectedGLStateMax)
291*35238bceSAndroid Build Coastguard Worker {
292*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected rounding to the nearest integer, valid range ["
293*35238bceSAndroid Build Coastguard Worker << expectedGLStateMin << "," << expectedGLStateMax << "]; got " << state
294*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
295*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
296*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
297*35238bceSAndroid Build Coastguard Worker }
298*35238bceSAndroid Build Coastguard Worker }
299*35238bceSAndroid Build Coastguard Worker
verifyFloatExpanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference)300*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
301*35238bceSAndroid Build Coastguard Worker {
302*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference, -1.0f, 1.0f));
303*35238bceSAndroid Build Coastguard Worker
304*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
305*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
306*35238bceSAndroid Build Coastguard Worker
307*35238bceSAndroid Build Coastguard Worker const GLint expectedGLStateMax = clampToGLint(expandGLFloatToInteger(reference) + FLOAT_EXPANSION_E);
308*35238bceSAndroid Build Coastguard Worker const GLint expectedGLStateMin = clampToGLint(expandGLFloatToInteger(reference) - FLOAT_EXPANSION_E);
309*35238bceSAndroid Build Coastguard Worker
310*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint> state;
311*35238bceSAndroid Build Coastguard Worker glGetIntegerv(name, &state);
312*35238bceSAndroid Build Coastguard Worker
313*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
314*35238bceSAndroid Build Coastguard Worker return;
315*35238bceSAndroid Build Coastguard Worker
316*35238bceSAndroid Build Coastguard Worker if (state < expectedGLStateMin || state > expectedGLStateMax)
317*35238bceSAndroid Build Coastguard Worker {
318*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << toHex(expectedGLStateMin) << ","
319*35238bceSAndroid Build Coastguard Worker << toHex(expectedGLStateMax) << "]; got " << toHex((GLint)state) << TestLog::EndMessage;
320*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
321*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
322*35238bceSAndroid Build Coastguard Worker }
323*35238bceSAndroid Build Coastguard Worker }
324*35238bceSAndroid Build Coastguard Worker
verifyFloat2Expanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1)325*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
326*35238bceSAndroid Build Coastguard Worker GLfloat reference1)
327*35238bceSAndroid Build Coastguard Worker {
328*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f));
329*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f));
330*35238bceSAndroid Build Coastguard Worker
331*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
332*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
333*35238bceSAndroid Build Coastguard Worker
334*35238bceSAndroid Build Coastguard Worker const GLint referenceAsGLintMin[] = {clampToGLint(expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E),
335*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E)};
336*35238bceSAndroid Build Coastguard Worker const GLint referenceAsGLintMax[] = {clampToGLint(expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E),
337*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E)};
338*35238bceSAndroid Build Coastguard Worker
339*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint[2]> floatVector2;
340*35238bceSAndroid Build Coastguard Worker glGetIntegerv(name, floatVector2);
341*35238bceSAndroid Build Coastguard Worker
342*35238bceSAndroid Build Coastguard Worker if (!floatVector2.verifyValidity(testCtx))
343*35238bceSAndroid Build Coastguard Worker return;
344*35238bceSAndroid Build Coastguard Worker
345*35238bceSAndroid Build Coastguard Worker if (floatVector2[0] < referenceAsGLintMin[0] || floatVector2[0] > referenceAsGLintMax[0] ||
346*35238bceSAndroid Build Coastguard Worker floatVector2[1] < referenceAsGLintMin[1] || floatVector2[1] > referenceAsGLintMax[1])
347*35238bceSAndroid Build Coastguard Worker {
348*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in ranges "
349*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], "
350*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "]"
351*35238bceSAndroid Build Coastguard Worker << "; got " << toHex(floatVector2[0]) << ", " << toHex(floatVector2[1]) << " "
352*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
353*35238bceSAndroid Build Coastguard Worker
354*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
355*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
356*35238bceSAndroid Build Coastguard Worker }
357*35238bceSAndroid Build Coastguard Worker }
358*35238bceSAndroid Build Coastguard Worker
verifyFloat4Color(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1,GLfloat reference2,GLfloat reference3)359*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
360*35238bceSAndroid Build Coastguard Worker GLfloat reference1, GLfloat reference2, GLfloat reference3)
361*35238bceSAndroid Build Coastguard Worker {
362*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
363*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
364*35238bceSAndroid Build Coastguard Worker
365*35238bceSAndroid Build Coastguard Worker const GLint referenceAsGLintMin[] = {clampToGLint(expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E),
366*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E),
367*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference2) - FLOAT_EXPANSION_E),
368*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference3) - FLOAT_EXPANSION_E)};
369*35238bceSAndroid Build Coastguard Worker const GLint referenceAsGLintMax[] = {clampToGLint(expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E),
370*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E),
371*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference2) + FLOAT_EXPANSION_E),
372*35238bceSAndroid Build Coastguard Worker clampToGLint(expandGLFloatToInteger(reference3) + FLOAT_EXPANSION_E)};
373*35238bceSAndroid Build Coastguard Worker
374*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint[4]> floatVector4;
375*35238bceSAndroid Build Coastguard Worker glGetIntegerv(name, floatVector4);
376*35238bceSAndroid Build Coastguard Worker
377*35238bceSAndroid Build Coastguard Worker if (!floatVector4.verifyValidity(testCtx))
378*35238bceSAndroid Build Coastguard Worker return;
379*35238bceSAndroid Build Coastguard Worker
380*35238bceSAndroid Build Coastguard Worker if (floatVector4[0] < referenceAsGLintMin[0] || floatVector4[0] > referenceAsGLintMax[0] ||
381*35238bceSAndroid Build Coastguard Worker floatVector4[1] < referenceAsGLintMin[1] || floatVector4[1] > referenceAsGLintMax[1] ||
382*35238bceSAndroid Build Coastguard Worker floatVector4[2] < referenceAsGLintMin[2] || floatVector4[2] > referenceAsGLintMax[2] ||
383*35238bceSAndroid Build Coastguard Worker floatVector4[3] < referenceAsGLintMin[3] || floatVector4[3] > referenceAsGLintMax[3])
384*35238bceSAndroid Build Coastguard Worker {
385*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in ranges "
386*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], "
387*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "], "
388*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[2]) << " " << toHex(referenceAsGLintMax[2]) << "], "
389*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[3]) << " " << toHex(referenceAsGLintMax[3]) << "]"
390*35238bceSAndroid Build Coastguard Worker << "; got " << toHex(floatVector4[0]) << ", " << toHex(floatVector4[1]) << ", "
391*35238bceSAndroid Build Coastguard Worker << toHex(floatVector4[2]) << ", " << toHex(floatVector4[3]) << " " << TestLog::EndMessage;
392*35238bceSAndroid Build Coastguard Worker
393*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
394*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
395*35238bceSAndroid Build Coastguard Worker }
396*35238bceSAndroid Build Coastguard Worker }
397*35238bceSAndroid Build Coastguard Worker
verifyFloatRange(tcu::TestContext & testCtx,GLenum name,GLfloat min,GLfloat max)398*35238bceSAndroid Build Coastguard Worker void GetIntegerVerifier::verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max)
399*35238bceSAndroid Build Coastguard Worker {
400*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
401*35238bceSAndroid Build Coastguard Worker
402*35238bceSAndroid Build Coastguard Worker const GLint testRangeAsGLint[] = {StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint>(min),
403*35238bceSAndroid Build Coastguard Worker StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint>(max)};
404*35238bceSAndroid Build Coastguard Worker
405*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint[2]> range;
406*35238bceSAndroid Build Coastguard Worker glGetIntegerv(name, range);
407*35238bceSAndroid Build Coastguard Worker
408*35238bceSAndroid Build Coastguard Worker if (!range.verifyValidity(testCtx))
409*35238bceSAndroid Build Coastguard Worker return;
410*35238bceSAndroid Build Coastguard Worker
411*35238bceSAndroid Build Coastguard Worker // check if test range outside of gl state range
412*35238bceSAndroid Build Coastguard Worker if (testRangeAsGLint[0] < range[0] || testRangeAsGLint[1] > range[1])
413*35238bceSAndroid Build Coastguard Worker {
414*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: range [" << testRangeAsGLint[0] << ", "
415*35238bceSAndroid Build Coastguard Worker << testRangeAsGLint[1] << "]"
416*35238bceSAndroid Build Coastguard Worker << " is not in range [" << range[0] << ", " << range[1] << "]" << TestLog::EndMessage;
417*35238bceSAndroid Build Coastguard Worker
418*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
419*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer range");
420*35238bceSAndroid Build Coastguard Worker }
421*35238bceSAndroid Build Coastguard Worker }
422*35238bceSAndroid Build Coastguard Worker
423*35238bceSAndroid Build Coastguard Worker //GetInteger64Verifier
424*35238bceSAndroid Build Coastguard Worker
425*35238bceSAndroid Build Coastguard Worker class GetInteger64Verifier : public StateVerifier
426*35238bceSAndroid Build Coastguard Worker {
427*35238bceSAndroid Build Coastguard Worker public:
428*35238bceSAndroid Build Coastguard Worker GetInteger64Verifier(const glw::Functions &gl, tcu::TestLog &log);
429*35238bceSAndroid Build Coastguard Worker void verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
430*35238bceSAndroid Build Coastguard Worker void verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
431*35238bceSAndroid Build Coastguard Worker void verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1);
432*35238bceSAndroid Build Coastguard Worker void verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1,
433*35238bceSAndroid Build Coastguard Worker GLfloat reference2, GLfloat reference3);
434*35238bceSAndroid Build Coastguard Worker void verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max);
435*35238bceSAndroid Build Coastguard Worker };
436*35238bceSAndroid Build Coastguard Worker
GetInteger64Verifier(const glw::Functions & gl,tcu::TestLog & log)437*35238bceSAndroid Build Coastguard Worker GetInteger64Verifier::GetInteger64Verifier(const glw::Functions &gl, tcu::TestLog &log)
438*35238bceSAndroid Build Coastguard Worker : StateVerifier(gl, log, "_getinteger64")
439*35238bceSAndroid Build Coastguard Worker {
440*35238bceSAndroid Build Coastguard Worker }
441*35238bceSAndroid Build Coastguard Worker
verifyFloat(tcu::TestContext & testCtx,GLenum name,GLfloat reference)442*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
443*35238bceSAndroid Build Coastguard Worker {
444*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
445*35238bceSAndroid Build Coastguard Worker
446*35238bceSAndroid Build Coastguard Worker const GLint64 expectedGLStateMax = StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint64>(reference);
447*35238bceSAndroid Build Coastguard Worker const GLint64 expectedGLStateMin = StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint64>(reference);
448*35238bceSAndroid Build Coastguard Worker
449*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint64> state;
450*35238bceSAndroid Build Coastguard Worker glGetInteger64v(name, &state);
451*35238bceSAndroid Build Coastguard Worker
452*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
453*35238bceSAndroid Build Coastguard Worker return;
454*35238bceSAndroid Build Coastguard Worker
455*35238bceSAndroid Build Coastguard Worker if (state < expectedGLStateMin || state > expectedGLStateMax)
456*35238bceSAndroid Build Coastguard Worker {
457*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected rounding to the nearest integer, valid range ["
458*35238bceSAndroid Build Coastguard Worker << expectedGLStateMin << "," << expectedGLStateMax << "]; got " << state
459*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
460*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
461*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
462*35238bceSAndroid Build Coastguard Worker }
463*35238bceSAndroid Build Coastguard Worker }
464*35238bceSAndroid Build Coastguard Worker
verifyFloatExpanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference)465*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
466*35238bceSAndroid Build Coastguard Worker {
467*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference, -1.0f, 1.0f));
468*35238bceSAndroid Build Coastguard Worker
469*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
470*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
471*35238bceSAndroid Build Coastguard Worker
472*35238bceSAndroid Build Coastguard Worker const GLint64 expectedGLStateMax = expandGLFloatToInteger(reference) + FLOAT_EXPANSION_E_64;
473*35238bceSAndroid Build Coastguard Worker const GLint64 expectedGLStateMin = expandGLFloatToInteger(reference) - FLOAT_EXPANSION_E_64;
474*35238bceSAndroid Build Coastguard Worker
475*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint64> state;
476*35238bceSAndroid Build Coastguard Worker glGetInteger64v(name, &state);
477*35238bceSAndroid Build Coastguard Worker
478*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
479*35238bceSAndroid Build Coastguard Worker return;
480*35238bceSAndroid Build Coastguard Worker
481*35238bceSAndroid Build Coastguard Worker if (state < expectedGLStateMin || state > expectedGLStateMax)
482*35238bceSAndroid Build Coastguard Worker {
483*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << toHex(expectedGLStateMin) << ","
484*35238bceSAndroid Build Coastguard Worker << toHex(expectedGLStateMax) << "]; got " << toHex((GLint64)state) << TestLog::EndMessage;
485*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
486*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
487*35238bceSAndroid Build Coastguard Worker }
488*35238bceSAndroid Build Coastguard Worker }
489*35238bceSAndroid Build Coastguard Worker
verifyFloat2Expanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1)490*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
491*35238bceSAndroid Build Coastguard Worker GLfloat reference1)
492*35238bceSAndroid Build Coastguard Worker {
493*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f));
494*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f));
495*35238bceSAndroid Build Coastguard Worker
496*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
497*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
498*35238bceSAndroid Build Coastguard Worker
499*35238bceSAndroid Build Coastguard Worker const GLint64 referenceAsGLintMin[] = {expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E_64,
500*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E_64};
501*35238bceSAndroid Build Coastguard Worker const GLint64 referenceAsGLintMax[] = {expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E_64,
502*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E_64};
503*35238bceSAndroid Build Coastguard Worker
504*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint64[2]> floatVector2;
505*35238bceSAndroid Build Coastguard Worker glGetInteger64v(name, floatVector2);
506*35238bceSAndroid Build Coastguard Worker
507*35238bceSAndroid Build Coastguard Worker if (!floatVector2.verifyValidity(testCtx))
508*35238bceSAndroid Build Coastguard Worker return;
509*35238bceSAndroid Build Coastguard Worker
510*35238bceSAndroid Build Coastguard Worker if (floatVector2[0] < referenceAsGLintMin[0] || floatVector2[0] > referenceAsGLintMax[0] ||
511*35238bceSAndroid Build Coastguard Worker floatVector2[1] < referenceAsGLintMin[1] || floatVector2[1] > referenceAsGLintMax[1])
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in ranges "
514*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], "
515*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "]"
516*35238bceSAndroid Build Coastguard Worker << "; got " << toHex(floatVector2[0]) << ", " << toHex(floatVector2[1]) << " "
517*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
518*35238bceSAndroid Build Coastguard Worker
519*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
520*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
521*35238bceSAndroid Build Coastguard Worker }
522*35238bceSAndroid Build Coastguard Worker }
523*35238bceSAndroid Build Coastguard Worker
verifyFloat4Color(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1,GLfloat reference2,GLfloat reference3)524*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
525*35238bceSAndroid Build Coastguard Worker GLfloat reference1, GLfloat reference2, GLfloat reference3)
526*35238bceSAndroid Build Coastguard Worker {
527*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
528*35238bceSAndroid Build Coastguard Worker using tcu::toHex;
529*35238bceSAndroid Build Coastguard Worker
530*35238bceSAndroid Build Coastguard Worker const GLint64 referenceAsGLintMin[] = {expandGLFloatToInteger(reference0) - FLOAT_EXPANSION_E_64,
531*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference1) - FLOAT_EXPANSION_E_64,
532*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference2) - FLOAT_EXPANSION_E_64,
533*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference3) - FLOAT_EXPANSION_E_64};
534*35238bceSAndroid Build Coastguard Worker const GLint64 referenceAsGLintMax[] = {expandGLFloatToInteger(reference0) + FLOAT_EXPANSION_E_64,
535*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference1) + FLOAT_EXPANSION_E_64,
536*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference2) + FLOAT_EXPANSION_E_64,
537*35238bceSAndroid Build Coastguard Worker expandGLFloatToInteger(reference3) + FLOAT_EXPANSION_E_64};
538*35238bceSAndroid Build Coastguard Worker
539*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint64[4]> floatVector4;
540*35238bceSAndroid Build Coastguard Worker glGetInteger64v(name, floatVector4);
541*35238bceSAndroid Build Coastguard Worker
542*35238bceSAndroid Build Coastguard Worker if (!floatVector4.verifyValidity(testCtx))
543*35238bceSAndroid Build Coastguard Worker return;
544*35238bceSAndroid Build Coastguard Worker
545*35238bceSAndroid Build Coastguard Worker if (floatVector4[0] < referenceAsGLintMin[0] || floatVector4[0] > referenceAsGLintMax[0] ||
546*35238bceSAndroid Build Coastguard Worker floatVector4[1] < referenceAsGLintMin[1] || floatVector4[1] > referenceAsGLintMax[1] ||
547*35238bceSAndroid Build Coastguard Worker floatVector4[2] < referenceAsGLintMin[2] || floatVector4[2] > referenceAsGLintMax[2] ||
548*35238bceSAndroid Build Coastguard Worker floatVector4[3] < referenceAsGLintMin[3] || floatVector4[3] > referenceAsGLintMax[3])
549*35238bceSAndroid Build Coastguard Worker {
550*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in ranges "
551*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[0]) << " " << toHex(referenceAsGLintMax[0]) << "], "
552*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[1]) << " " << toHex(referenceAsGLintMax[1]) << "], "
553*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[2]) << " " << toHex(referenceAsGLintMax[2]) << "], "
554*35238bceSAndroid Build Coastguard Worker << "[" << toHex(referenceAsGLintMin[3]) << " " << toHex(referenceAsGLintMax[3]) << "]"
555*35238bceSAndroid Build Coastguard Worker << "; got " << toHex(floatVector4[0]) << ", " << toHex(floatVector4[1]) << ", "
556*35238bceSAndroid Build Coastguard Worker << toHex(floatVector4[2]) << ", " << toHex(floatVector4[3]) << " " << TestLog::EndMessage;
557*35238bceSAndroid Build Coastguard Worker
558*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
559*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer value");
560*35238bceSAndroid Build Coastguard Worker }
561*35238bceSAndroid Build Coastguard Worker }
562*35238bceSAndroid Build Coastguard Worker
verifyFloatRange(tcu::TestContext & testCtx,GLenum name,GLfloat min,GLfloat max)563*35238bceSAndroid Build Coastguard Worker void GetInteger64Verifier::verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max)
564*35238bceSAndroid Build Coastguard Worker {
565*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
566*35238bceSAndroid Build Coastguard Worker
567*35238bceSAndroid Build Coastguard Worker const GLint64 testRangeAsGLint[] = {StateQueryUtil::roundGLfloatToNearestIntegerHalfUp<GLint64>(min),
568*35238bceSAndroid Build Coastguard Worker StateQueryUtil::roundGLfloatToNearestIntegerHalfDown<GLint64>(max)};
569*35238bceSAndroid Build Coastguard Worker
570*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLint64[2]> range;
571*35238bceSAndroid Build Coastguard Worker glGetInteger64v(name, range);
572*35238bceSAndroid Build Coastguard Worker
573*35238bceSAndroid Build Coastguard Worker if (!range.verifyValidity(testCtx))
574*35238bceSAndroid Build Coastguard Worker return;
575*35238bceSAndroid Build Coastguard Worker
576*35238bceSAndroid Build Coastguard Worker // check if test range outside of gl state range
577*35238bceSAndroid Build Coastguard Worker if (testRangeAsGLint[0] < range[0] || testRangeAsGLint[1] > range[1])
578*35238bceSAndroid Build Coastguard Worker {
579*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: range [" << testRangeAsGLint[0] << ", "
580*35238bceSAndroid Build Coastguard Worker << testRangeAsGLint[1] << "]"
581*35238bceSAndroid Build Coastguard Worker << " is not in range [" << range[0] << ", " << range[1] << "]" << TestLog::EndMessage;
582*35238bceSAndroid Build Coastguard Worker
583*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
584*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid integer range");
585*35238bceSAndroid Build Coastguard Worker }
586*35238bceSAndroid Build Coastguard Worker }
587*35238bceSAndroid Build Coastguard Worker
588*35238bceSAndroid Build Coastguard Worker //GetFloatVerifier
589*35238bceSAndroid Build Coastguard Worker
590*35238bceSAndroid Build Coastguard Worker class GetFloatVerifier : public StateVerifier
591*35238bceSAndroid Build Coastguard Worker {
592*35238bceSAndroid Build Coastguard Worker public:
593*35238bceSAndroid Build Coastguard Worker GetFloatVerifier(const glw::Functions &gl, tcu::TestLog &log);
594*35238bceSAndroid Build Coastguard Worker void verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
595*35238bceSAndroid Build Coastguard Worker void verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference);
596*35238bceSAndroid Build Coastguard Worker void verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1);
597*35238bceSAndroid Build Coastguard Worker void verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1,
598*35238bceSAndroid Build Coastguard Worker GLfloat reference2, GLfloat reference3);
599*35238bceSAndroid Build Coastguard Worker void verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max);
600*35238bceSAndroid Build Coastguard Worker };
601*35238bceSAndroid Build Coastguard Worker
GetFloatVerifier(const glw::Functions & gl,tcu::TestLog & log)602*35238bceSAndroid Build Coastguard Worker GetFloatVerifier::GetFloatVerifier(const glw::Functions &gl, tcu::TestLog &log) : StateVerifier(gl, log, "_getfloat")
603*35238bceSAndroid Build Coastguard Worker {
604*35238bceSAndroid Build Coastguard Worker }
605*35238bceSAndroid Build Coastguard Worker
verifyFloat(tcu::TestContext & testCtx,GLenum name,GLfloat reference)606*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyFloat(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
607*35238bceSAndroid Build Coastguard Worker {
608*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
609*35238bceSAndroid Build Coastguard Worker
610*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLfloat> state;
611*35238bceSAndroid Build Coastguard Worker glGetFloatv(name, &state);
612*35238bceSAndroid Build Coastguard Worker
613*35238bceSAndroid Build Coastguard Worker if (!state.verifyValidity(testCtx))
614*35238bceSAndroid Build Coastguard Worker return;
615*35238bceSAndroid Build Coastguard Worker
616*35238bceSAndroid Build Coastguard Worker if (state != reference)
617*35238bceSAndroid Build Coastguard Worker {
618*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference << "; got " << state
619*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
620*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
621*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
622*35238bceSAndroid Build Coastguard Worker }
623*35238bceSAndroid Build Coastguard Worker }
624*35238bceSAndroid Build Coastguard Worker
verifyFloatExpanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference)625*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyFloatExpanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference)
626*35238bceSAndroid Build Coastguard Worker {
627*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference, -1.0f, 1.0f));
628*35238bceSAndroid Build Coastguard Worker verifyFloat(testCtx, name, reference);
629*35238bceSAndroid Build Coastguard Worker }
630*35238bceSAndroid Build Coastguard Worker
verifyFloat2Expanded(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1)631*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyFloat2Expanded(tcu::TestContext &testCtx, GLenum name, GLfloat reference0,
632*35238bceSAndroid Build Coastguard Worker GLfloat reference1)
633*35238bceSAndroid Build Coastguard Worker {
634*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference0, -1.0f, 1.0f));
635*35238bceSAndroid Build Coastguard Worker DE_ASSERT(de::inRange(reference1, -1.0f, 1.0f));
636*35238bceSAndroid Build Coastguard Worker
637*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
638*35238bceSAndroid Build Coastguard Worker
639*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLfloat[2]> floatVector2;
640*35238bceSAndroid Build Coastguard Worker glGetFloatv(name, floatVector2);
641*35238bceSAndroid Build Coastguard Worker
642*35238bceSAndroid Build Coastguard Worker if (!floatVector2.verifyValidity(testCtx))
643*35238bceSAndroid Build Coastguard Worker return;
644*35238bceSAndroid Build Coastguard Worker
645*35238bceSAndroid Build Coastguard Worker if (floatVector2[0] != reference0 || floatVector2[1] != reference1)
646*35238bceSAndroid Build Coastguard Worker {
647*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference0 << ", " << reference1 << "; got "
648*35238bceSAndroid Build Coastguard Worker << floatVector2[0] << " " << floatVector2[1] << TestLog::EndMessage;
649*35238bceSAndroid Build Coastguard Worker
650*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
651*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
652*35238bceSAndroid Build Coastguard Worker }
653*35238bceSAndroid Build Coastguard Worker }
654*35238bceSAndroid Build Coastguard Worker
verifyFloat4Color(tcu::TestContext & testCtx,GLenum name,GLfloat reference0,GLfloat reference1,GLfloat reference2,GLfloat reference3)655*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyFloat4Color(tcu::TestContext &testCtx, GLenum name, GLfloat reference0, GLfloat reference1,
656*35238bceSAndroid Build Coastguard Worker GLfloat reference2, GLfloat reference3)
657*35238bceSAndroid Build Coastguard Worker {
658*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
659*35238bceSAndroid Build Coastguard Worker
660*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLfloat[4]> floatVector4;
661*35238bceSAndroid Build Coastguard Worker glGetFloatv(name, floatVector4);
662*35238bceSAndroid Build Coastguard Worker
663*35238bceSAndroid Build Coastguard Worker if (!floatVector4.verifyValidity(testCtx))
664*35238bceSAndroid Build Coastguard Worker return;
665*35238bceSAndroid Build Coastguard Worker
666*35238bceSAndroid Build Coastguard Worker if (floatVector4[0] != reference0 || floatVector4[1] != reference1 || floatVector4[2] != reference2 ||
667*35238bceSAndroid Build Coastguard Worker floatVector4[3] != reference3)
668*35238bceSAndroid Build Coastguard Worker {
669*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected " << reference0 << ", " << reference1 << ", "
670*35238bceSAndroid Build Coastguard Worker << reference2 << ", " << reference3 << "; got " << floatVector4[0] << ", " << floatVector4[1]
671*35238bceSAndroid Build Coastguard Worker << ", " << floatVector4[2] << ", " << floatVector4[3] << TestLog::EndMessage;
672*35238bceSAndroid Build Coastguard Worker
673*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
674*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float value");
675*35238bceSAndroid Build Coastguard Worker }
676*35238bceSAndroid Build Coastguard Worker }
677*35238bceSAndroid Build Coastguard Worker
verifyFloatRange(tcu::TestContext & testCtx,GLenum name,GLfloat min,GLfloat max)678*35238bceSAndroid Build Coastguard Worker void GetFloatVerifier::verifyFloatRange(tcu::TestContext &testCtx, GLenum name, GLfloat min, GLfloat max)
679*35238bceSAndroid Build Coastguard Worker {
680*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
681*35238bceSAndroid Build Coastguard Worker
682*35238bceSAndroid Build Coastguard Worker StateQueryMemoryWriteGuard<GLfloat[2]> floatVector2;
683*35238bceSAndroid Build Coastguard Worker glGetFloatv(name, floatVector2);
684*35238bceSAndroid Build Coastguard Worker
685*35238bceSAndroid Build Coastguard Worker if (!floatVector2.verifyValidity(testCtx))
686*35238bceSAndroid Build Coastguard Worker return;
687*35238bceSAndroid Build Coastguard Worker
688*35238bceSAndroid Build Coastguard Worker if (floatVector2[0] > min || floatVector2[1] < max)
689*35238bceSAndroid Build Coastguard Worker {
690*35238bceSAndroid Build Coastguard Worker testCtx.getLog() << TestLog::Message << "// ERROR: expected in range [" << min << ", " << max << "]; got ["
691*35238bceSAndroid Build Coastguard Worker << floatVector2[0] << " " << floatVector2[1] << "]" << TestLog::EndMessage;
692*35238bceSAndroid Build Coastguard Worker
693*35238bceSAndroid Build Coastguard Worker if (testCtx.getTestResult() == QP_TEST_RESULT_PASS)
694*35238bceSAndroid Build Coastguard Worker testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Got invalid float range");
695*35238bceSAndroid Build Coastguard Worker }
696*35238bceSAndroid Build Coastguard Worker }
697*35238bceSAndroid Build Coastguard Worker
698*35238bceSAndroid Build Coastguard Worker } // namespace FloatStateQueryVerifiers
699*35238bceSAndroid Build Coastguard Worker
700*35238bceSAndroid Build Coastguard Worker namespace
701*35238bceSAndroid Build Coastguard Worker {
702*35238bceSAndroid Build Coastguard Worker
703*35238bceSAndroid Build Coastguard Worker using namespace FloatStateQueryVerifiers;
704*35238bceSAndroid Build Coastguard Worker
705*35238bceSAndroid Build Coastguard Worker class DepthRangeCase : public ApiCase
706*35238bceSAndroid Build Coastguard Worker {
707*35238bceSAndroid Build Coastguard Worker public:
DepthRangeCase(Context & context,StateVerifier * verifier,const char * name,const char * description)708*35238bceSAndroid Build Coastguard Worker DepthRangeCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
709*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
710*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
711*35238bceSAndroid Build Coastguard Worker {
712*35238bceSAndroid Build Coastguard Worker }
713*35238bceSAndroid Build Coastguard Worker
test(void)714*35238bceSAndroid Build Coastguard Worker void test(void)
715*35238bceSAndroid Build Coastguard Worker {
716*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
717*35238bceSAndroid Build Coastguard Worker
718*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat2Expanded(m_testCtx, GL_DEPTH_RANGE, 0.0f, 1.0f);
719*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
720*35238bceSAndroid Build Coastguard Worker
721*35238bceSAndroid Build Coastguard Worker {
722*35238bceSAndroid Build Coastguard Worker const struct FixedTest
723*35238bceSAndroid Build Coastguard Worker {
724*35238bceSAndroid Build Coastguard Worker float n, f;
725*35238bceSAndroid Build Coastguard Worker } fixedTests[] = {{0.5f, 1.0f}, {0.0f, 0.5f}, {0.0f, 0.0f}, {1.0f, 1.0f}};
726*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx)
727*35238bceSAndroid Build Coastguard Worker {
728*35238bceSAndroid Build Coastguard Worker glDepthRangef(fixedTests[ndx].n, fixedTests[ndx].f);
729*35238bceSAndroid Build Coastguard Worker
730*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat2Expanded(m_testCtx, GL_DEPTH_RANGE, fixedTests[ndx].n, fixedTests[ndx].f);
731*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
732*35238bceSAndroid Build Coastguard Worker }
733*35238bceSAndroid Build Coastguard Worker }
734*35238bceSAndroid Build Coastguard Worker
735*35238bceSAndroid Build Coastguard Worker {
736*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
737*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
738*35238bceSAndroid Build Coastguard Worker {
739*35238bceSAndroid Build Coastguard Worker GLfloat n = rnd.getFloat(0, 1);
740*35238bceSAndroid Build Coastguard Worker GLfloat f = rnd.getFloat(0, 1);
741*35238bceSAndroid Build Coastguard Worker
742*35238bceSAndroid Build Coastguard Worker glDepthRangef(n, f);
743*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat2Expanded(m_testCtx, GL_DEPTH_RANGE, n, f);
744*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
745*35238bceSAndroid Build Coastguard Worker }
746*35238bceSAndroid Build Coastguard Worker }
747*35238bceSAndroid Build Coastguard Worker }
748*35238bceSAndroid Build Coastguard Worker
749*35238bceSAndroid Build Coastguard Worker private:
750*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
751*35238bceSAndroid Build Coastguard Worker };
752*35238bceSAndroid Build Coastguard Worker
753*35238bceSAndroid Build Coastguard Worker class LineWidthCase : public ApiCase
754*35238bceSAndroid Build Coastguard Worker {
755*35238bceSAndroid Build Coastguard Worker public:
LineWidthCase(Context & context,StateVerifier * verifier,const char * name,const char * description)756*35238bceSAndroid Build Coastguard Worker LineWidthCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
757*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
758*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
759*35238bceSAndroid Build Coastguard Worker {
760*35238bceSAndroid Build Coastguard Worker }
761*35238bceSAndroid Build Coastguard Worker
test(void)762*35238bceSAndroid Build Coastguard Worker void test(void)
763*35238bceSAndroid Build Coastguard Worker {
764*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
765*35238bceSAndroid Build Coastguard Worker
766*35238bceSAndroid Build Coastguard Worker GLfloat range[2] = {1};
767*35238bceSAndroid Build Coastguard Worker glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range);
768*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
769*35238bceSAndroid Build Coastguard Worker
770*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_LINE_WIDTH, 1.0f);
771*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
772*35238bceSAndroid Build Coastguard Worker
773*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
774*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
775*35238bceSAndroid Build Coastguard Worker {
776*35238bceSAndroid Build Coastguard Worker const GLfloat reference = rnd.getFloat(range[0], range[1]);
777*35238bceSAndroid Build Coastguard Worker
778*35238bceSAndroid Build Coastguard Worker glLineWidth(reference);
779*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_LINE_WIDTH, reference);
780*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
781*35238bceSAndroid Build Coastguard Worker }
782*35238bceSAndroid Build Coastguard Worker }
783*35238bceSAndroid Build Coastguard Worker
784*35238bceSAndroid Build Coastguard Worker private:
785*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
786*35238bceSAndroid Build Coastguard Worker };
787*35238bceSAndroid Build Coastguard Worker
788*35238bceSAndroid Build Coastguard Worker class PolygonOffsetFactorCase : public ApiCase
789*35238bceSAndroid Build Coastguard Worker {
790*35238bceSAndroid Build Coastguard Worker public:
PolygonOffsetFactorCase(Context & context,StateVerifier * verifier,const char * name,const char * description)791*35238bceSAndroid Build Coastguard Worker PolygonOffsetFactorCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
792*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
793*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
794*35238bceSAndroid Build Coastguard Worker {
795*35238bceSAndroid Build Coastguard Worker }
796*35238bceSAndroid Build Coastguard Worker
test(void)797*35238bceSAndroid Build Coastguard Worker void test(void)
798*35238bceSAndroid Build Coastguard Worker {
799*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
800*35238bceSAndroid Build Coastguard Worker
801*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_FACTOR, 0.0f);
802*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
803*35238bceSAndroid Build Coastguard Worker
804*35238bceSAndroid Build Coastguard Worker {
805*35238bceSAndroid Build Coastguard Worker const float fixedTests[] = {0.0f, 0.5f, -0.5f, 1.5f};
806*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx)
807*35238bceSAndroid Build Coastguard Worker {
808*35238bceSAndroid Build Coastguard Worker glPolygonOffset(fixedTests[ndx], 0);
809*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_FACTOR, fixedTests[ndx]);
810*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
811*35238bceSAndroid Build Coastguard Worker }
812*35238bceSAndroid Build Coastguard Worker }
813*35238bceSAndroid Build Coastguard Worker
814*35238bceSAndroid Build Coastguard Worker {
815*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
816*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
817*35238bceSAndroid Build Coastguard Worker {
818*35238bceSAndroid Build Coastguard Worker const GLfloat reference = rnd.getFloat(-64000, 64000);
819*35238bceSAndroid Build Coastguard Worker
820*35238bceSAndroid Build Coastguard Worker glPolygonOffset(reference, 0);
821*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_FACTOR, reference);
822*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
823*35238bceSAndroid Build Coastguard Worker }
824*35238bceSAndroid Build Coastguard Worker }
825*35238bceSAndroid Build Coastguard Worker }
826*35238bceSAndroid Build Coastguard Worker
827*35238bceSAndroid Build Coastguard Worker private:
828*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
829*35238bceSAndroid Build Coastguard Worker };
830*35238bceSAndroid Build Coastguard Worker
831*35238bceSAndroid Build Coastguard Worker class PolygonOffsetUnitsCase : public ApiCase
832*35238bceSAndroid Build Coastguard Worker {
833*35238bceSAndroid Build Coastguard Worker public:
PolygonOffsetUnitsCase(Context & context,StateVerifier * verifier,const char * name,const char * description)834*35238bceSAndroid Build Coastguard Worker PolygonOffsetUnitsCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
835*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
836*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
837*35238bceSAndroid Build Coastguard Worker {
838*35238bceSAndroid Build Coastguard Worker }
839*35238bceSAndroid Build Coastguard Worker
test(void)840*35238bceSAndroid Build Coastguard Worker void test(void)
841*35238bceSAndroid Build Coastguard Worker {
842*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
843*35238bceSAndroid Build Coastguard Worker
844*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_UNITS, 0.0f);
845*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
846*35238bceSAndroid Build Coastguard Worker
847*35238bceSAndroid Build Coastguard Worker {
848*35238bceSAndroid Build Coastguard Worker const float fixedTests[] = {0.0f, 0.5f, -0.5f, 1.5f};
849*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx)
850*35238bceSAndroid Build Coastguard Worker {
851*35238bceSAndroid Build Coastguard Worker glPolygonOffset(0, fixedTests[ndx]);
852*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_UNITS, fixedTests[ndx]);
853*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
854*35238bceSAndroid Build Coastguard Worker }
855*35238bceSAndroid Build Coastguard Worker }
856*35238bceSAndroid Build Coastguard Worker
857*35238bceSAndroid Build Coastguard Worker {
858*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
859*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
860*35238bceSAndroid Build Coastguard Worker {
861*35238bceSAndroid Build Coastguard Worker const GLfloat reference = rnd.getFloat(-64000, 64000);
862*35238bceSAndroid Build Coastguard Worker
863*35238bceSAndroid Build Coastguard Worker glPolygonOffset(0, reference);
864*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_POLYGON_OFFSET_UNITS, reference);
865*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
866*35238bceSAndroid Build Coastguard Worker }
867*35238bceSAndroid Build Coastguard Worker }
868*35238bceSAndroid Build Coastguard Worker }
869*35238bceSAndroid Build Coastguard Worker
870*35238bceSAndroid Build Coastguard Worker private:
871*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
872*35238bceSAndroid Build Coastguard Worker };
873*35238bceSAndroid Build Coastguard Worker
874*35238bceSAndroid Build Coastguard Worker class SampleCoverageCase : public ApiCase
875*35238bceSAndroid Build Coastguard Worker {
876*35238bceSAndroid Build Coastguard Worker public:
SampleCoverageCase(Context & context,StateVerifier * verifier,const char * name,const char * description)877*35238bceSAndroid Build Coastguard Worker SampleCoverageCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
878*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
879*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
880*35238bceSAndroid Build Coastguard Worker {
881*35238bceSAndroid Build Coastguard Worker }
882*35238bceSAndroid Build Coastguard Worker
test(void)883*35238bceSAndroid Build Coastguard Worker void test(void)
884*35238bceSAndroid Build Coastguard Worker {
885*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
886*35238bceSAndroid Build Coastguard Worker
887*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, 1.0f);
888*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
889*35238bceSAndroid Build Coastguard Worker
890*35238bceSAndroid Build Coastguard Worker {
891*35238bceSAndroid Build Coastguard Worker const float fixedTests[] = {0.0f, 0.5f, 0.45f, 0.55f};
892*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx)
893*35238bceSAndroid Build Coastguard Worker {
894*35238bceSAndroid Build Coastguard Worker glSampleCoverage(fixedTests[ndx], GL_FALSE);
895*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, fixedTests[ndx]);
896*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
897*35238bceSAndroid Build Coastguard Worker }
898*35238bceSAndroid Build Coastguard Worker }
899*35238bceSAndroid Build Coastguard Worker
900*35238bceSAndroid Build Coastguard Worker {
901*35238bceSAndroid Build Coastguard Worker const float clampTests[] = {-1.0f, -1.5f, 1.45f, 3.55f};
902*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(clampTests); ++ndx)
903*35238bceSAndroid Build Coastguard Worker {
904*35238bceSAndroid Build Coastguard Worker glSampleCoverage(clampTests[ndx], GL_FALSE);
905*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, de::clamp(clampTests[ndx], 0.0f, 1.0f));
906*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
907*35238bceSAndroid Build Coastguard Worker }
908*35238bceSAndroid Build Coastguard Worker }
909*35238bceSAndroid Build Coastguard Worker
910*35238bceSAndroid Build Coastguard Worker {
911*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
912*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
913*35238bceSAndroid Build Coastguard Worker {
914*35238bceSAndroid Build Coastguard Worker GLfloat reference = rnd.getFloat(0, 1);
915*35238bceSAndroid Build Coastguard Worker GLboolean invert = rnd.getBool() ? GL_TRUE : GL_FALSE;
916*35238bceSAndroid Build Coastguard Worker
917*35238bceSAndroid Build Coastguard Worker glSampleCoverage(reference, invert);
918*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat(m_testCtx, GL_SAMPLE_COVERAGE_VALUE, reference);
919*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
920*35238bceSAndroid Build Coastguard Worker }
921*35238bceSAndroid Build Coastguard Worker }
922*35238bceSAndroid Build Coastguard Worker }
923*35238bceSAndroid Build Coastguard Worker
924*35238bceSAndroid Build Coastguard Worker private:
925*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
926*35238bceSAndroid Build Coastguard Worker };
927*35238bceSAndroid Build Coastguard Worker
928*35238bceSAndroid Build Coastguard Worker class ColorClearCase : public ApiCase
929*35238bceSAndroid Build Coastguard Worker {
930*35238bceSAndroid Build Coastguard Worker public:
ColorClearCase(Context & context,StateVerifier * verifier,const char * name,const char * description)931*35238bceSAndroid Build Coastguard Worker ColorClearCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
932*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
933*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
934*35238bceSAndroid Build Coastguard Worker {
935*35238bceSAndroid Build Coastguard Worker }
936*35238bceSAndroid Build Coastguard Worker
test(void)937*35238bceSAndroid Build Coastguard Worker void test(void)
938*35238bceSAndroid Build Coastguard Worker {
939*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
940*35238bceSAndroid Build Coastguard Worker
941*35238bceSAndroid Build Coastguard Worker // \note Initial color clear value check is temorarily removed. (until the framework does not alter it)
942*35238bceSAndroid Build Coastguard Worker //m_verifier->verifyFloat4Color(m_testCtx, GL_COLOR_CLEAR_VALUE, 0, 0, 0, 0);
943*35238bceSAndroid Build Coastguard Worker //expectError(GL_NO_ERROR);
944*35238bceSAndroid Build Coastguard Worker
945*35238bceSAndroid Build Coastguard Worker {
946*35238bceSAndroid Build Coastguard Worker const struct FixedTest
947*35238bceSAndroid Build Coastguard Worker {
948*35238bceSAndroid Build Coastguard Worker float r, g, b, a;
949*35238bceSAndroid Build Coastguard Worker } fixedTests[] = {
950*35238bceSAndroid Build Coastguard Worker {0.5f, 1.0f, 0.5f, 1.0f},
951*35238bceSAndroid Build Coastguard Worker {0.0f, 0.5f, 0.0f, 0.5f},
952*35238bceSAndroid Build Coastguard Worker {0.0f, 0.0f, 0.0f, 0.0f},
953*35238bceSAndroid Build Coastguard Worker {1.0f, 1.0f, 1.0f, 1.0f},
954*35238bceSAndroid Build Coastguard Worker };
955*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(fixedTests); ++ndx)
956*35238bceSAndroid Build Coastguard Worker {
957*35238bceSAndroid Build Coastguard Worker glClearColor(fixedTests[ndx].r, fixedTests[ndx].g, fixedTests[ndx].b, fixedTests[ndx].a);
958*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat4Color(m_testCtx, GL_COLOR_CLEAR_VALUE, fixedTests[ndx].r, fixedTests[ndx].g,
959*35238bceSAndroid Build Coastguard Worker fixedTests[ndx].b, fixedTests[ndx].a);
960*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
961*35238bceSAndroid Build Coastguard Worker }
962*35238bceSAndroid Build Coastguard Worker }
963*35238bceSAndroid Build Coastguard Worker
964*35238bceSAndroid Build Coastguard Worker {
965*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
966*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
967*35238bceSAndroid Build Coastguard Worker {
968*35238bceSAndroid Build Coastguard Worker const GLfloat r = rnd.getFloat(0, 1);
969*35238bceSAndroid Build Coastguard Worker const GLfloat g = rnd.getFloat(0, 1);
970*35238bceSAndroid Build Coastguard Worker const GLfloat b = rnd.getFloat(0, 1);
971*35238bceSAndroid Build Coastguard Worker const GLfloat a = rnd.getFloat(0, 1);
972*35238bceSAndroid Build Coastguard Worker
973*35238bceSAndroid Build Coastguard Worker glClearColor(r, g, b, a);
974*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloat4Color(m_testCtx, GL_COLOR_CLEAR_VALUE, r, g, b, a);
975*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
976*35238bceSAndroid Build Coastguard Worker }
977*35238bceSAndroid Build Coastguard Worker }
978*35238bceSAndroid Build Coastguard Worker }
979*35238bceSAndroid Build Coastguard Worker
980*35238bceSAndroid Build Coastguard Worker private:
981*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
982*35238bceSAndroid Build Coastguard Worker };
983*35238bceSAndroid Build Coastguard Worker
984*35238bceSAndroid Build Coastguard Worker class DepthClearCase : public ApiCase
985*35238bceSAndroid Build Coastguard Worker {
986*35238bceSAndroid Build Coastguard Worker public:
DepthClearCase(Context & context,StateVerifier * verifier,const char * name,const char * description)987*35238bceSAndroid Build Coastguard Worker DepthClearCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
988*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
989*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
990*35238bceSAndroid Build Coastguard Worker {
991*35238bceSAndroid Build Coastguard Worker }
992*35238bceSAndroid Build Coastguard Worker
test(void)993*35238bceSAndroid Build Coastguard Worker void test(void)
994*35238bceSAndroid Build Coastguard Worker {
995*35238bceSAndroid Build Coastguard Worker const int numIterations = 120;
996*35238bceSAndroid Build Coastguard Worker
997*35238bceSAndroid Build Coastguard Worker de::Random rnd(0xabcdef);
998*35238bceSAndroid Build Coastguard Worker
999*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloatExpanded(m_testCtx, GL_DEPTH_CLEAR_VALUE, 1);
1000*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1001*35238bceSAndroid Build Coastguard Worker
1002*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < numIterations; ++i)
1003*35238bceSAndroid Build Coastguard Worker {
1004*35238bceSAndroid Build Coastguard Worker const GLfloat ref = rnd.getFloat(0, 1);
1005*35238bceSAndroid Build Coastguard Worker
1006*35238bceSAndroid Build Coastguard Worker glClearDepthf(ref);
1007*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloatExpanded(m_testCtx, GL_DEPTH_CLEAR_VALUE, ref);
1008*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1009*35238bceSAndroid Build Coastguard Worker }
1010*35238bceSAndroid Build Coastguard Worker }
1011*35238bceSAndroid Build Coastguard Worker
1012*35238bceSAndroid Build Coastguard Worker private:
1013*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
1014*35238bceSAndroid Build Coastguard Worker };
1015*35238bceSAndroid Build Coastguard Worker
1016*35238bceSAndroid Build Coastguard Worker class AliasedPointSizeRangeCase : public ApiCase
1017*35238bceSAndroid Build Coastguard Worker {
1018*35238bceSAndroid Build Coastguard Worker public:
AliasedPointSizeRangeCase(Context & context,StateVerifier * verifier,const char * name,const char * description)1019*35238bceSAndroid Build Coastguard Worker AliasedPointSizeRangeCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
1020*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
1021*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
1022*35238bceSAndroid Build Coastguard Worker {
1023*35238bceSAndroid Build Coastguard Worker }
1024*35238bceSAndroid Build Coastguard Worker
test(void)1025*35238bceSAndroid Build Coastguard Worker void test(void)
1026*35238bceSAndroid Build Coastguard Worker {
1027*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloatRange(m_testCtx, GL_ALIASED_POINT_SIZE_RANGE, 1, 1);
1028*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1029*35238bceSAndroid Build Coastguard Worker }
1030*35238bceSAndroid Build Coastguard Worker
1031*35238bceSAndroid Build Coastguard Worker private:
1032*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
1033*35238bceSAndroid Build Coastguard Worker };
1034*35238bceSAndroid Build Coastguard Worker
1035*35238bceSAndroid Build Coastguard Worker class AliasedLineWidthRangeCase : public ApiCase
1036*35238bceSAndroid Build Coastguard Worker {
1037*35238bceSAndroid Build Coastguard Worker public:
AliasedLineWidthRangeCase(Context & context,StateVerifier * verifier,const char * name,const char * description)1038*35238bceSAndroid Build Coastguard Worker AliasedLineWidthRangeCase(Context &context, StateVerifier *verifier, const char *name, const char *description)
1039*35238bceSAndroid Build Coastguard Worker : ApiCase(context, name, description)
1040*35238bceSAndroid Build Coastguard Worker , m_verifier(verifier)
1041*35238bceSAndroid Build Coastguard Worker {
1042*35238bceSAndroid Build Coastguard Worker }
1043*35238bceSAndroid Build Coastguard Worker
test(void)1044*35238bceSAndroid Build Coastguard Worker void test(void)
1045*35238bceSAndroid Build Coastguard Worker {
1046*35238bceSAndroid Build Coastguard Worker m_verifier->verifyFloatRange(m_testCtx, GL_ALIASED_LINE_WIDTH_RANGE, 1, 1);
1047*35238bceSAndroid Build Coastguard Worker expectError(GL_NO_ERROR);
1048*35238bceSAndroid Build Coastguard Worker }
1049*35238bceSAndroid Build Coastguard Worker
1050*35238bceSAndroid Build Coastguard Worker private:
1051*35238bceSAndroid Build Coastguard Worker StateVerifier *m_verifier;
1052*35238bceSAndroid Build Coastguard Worker };
1053*35238bceSAndroid Build Coastguard Worker
1054*35238bceSAndroid Build Coastguard Worker #define FOR_EACH_VERIFIER(VERIFIERS, CODE_BLOCK) \
1055*35238bceSAndroid Build Coastguard Worker do \
1056*35238bceSAndroid Build Coastguard Worker { \
1057*35238bceSAndroid Build Coastguard Worker for (int _verifierNdx = 0; _verifierNdx < DE_LENGTH_OF_ARRAY(VERIFIERS); _verifierNdx++) \
1058*35238bceSAndroid Build Coastguard Worker { \
1059*35238bceSAndroid Build Coastguard Worker StateVerifier *verifier = (VERIFIERS)[_verifierNdx]; \
1060*35238bceSAndroid Build Coastguard Worker CODE_BLOCK; \
1061*35238bceSAndroid Build Coastguard Worker } \
1062*35238bceSAndroid Build Coastguard Worker } while (0)
1063*35238bceSAndroid Build Coastguard Worker
1064*35238bceSAndroid Build Coastguard Worker } // namespace
1065*35238bceSAndroid Build Coastguard Worker
FloatStateQueryTests(Context & context)1066*35238bceSAndroid Build Coastguard Worker FloatStateQueryTests::FloatStateQueryTests(Context &context)
1067*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(context, "floats", "Float Values")
1068*35238bceSAndroid Build Coastguard Worker , m_verifierBoolean(DE_NULL)
1069*35238bceSAndroid Build Coastguard Worker , m_verifierInteger(DE_NULL)
1070*35238bceSAndroid Build Coastguard Worker , m_verifierFloat(DE_NULL)
1071*35238bceSAndroid Build Coastguard Worker {
1072*35238bceSAndroid Build Coastguard Worker }
1073*35238bceSAndroid Build Coastguard Worker
~FloatStateQueryTests(void)1074*35238bceSAndroid Build Coastguard Worker FloatStateQueryTests::~FloatStateQueryTests(void)
1075*35238bceSAndroid Build Coastguard Worker {
1076*35238bceSAndroid Build Coastguard Worker deinit();
1077*35238bceSAndroid Build Coastguard Worker }
1078*35238bceSAndroid Build Coastguard Worker
init(void)1079*35238bceSAndroid Build Coastguard Worker void FloatStateQueryTests::init(void)
1080*35238bceSAndroid Build Coastguard Worker {
1081*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_verifierBoolean == DE_NULL);
1082*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_verifierInteger == DE_NULL);
1083*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_verifierFloat == DE_NULL);
1084*35238bceSAndroid Build Coastguard Worker
1085*35238bceSAndroid Build Coastguard Worker m_verifierBoolean =
1086*35238bceSAndroid Build Coastguard Worker new GetBooleanVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
1087*35238bceSAndroid Build Coastguard Worker m_verifierInteger =
1088*35238bceSAndroid Build Coastguard Worker new GetIntegerVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
1089*35238bceSAndroid Build Coastguard Worker m_verifierFloat =
1090*35238bceSAndroid Build Coastguard Worker new GetFloatVerifier(m_context.getRenderContext().getFunctions(), m_context.getTestContext().getLog());
1091*35238bceSAndroid Build Coastguard Worker
1092*35238bceSAndroid Build Coastguard Worker StateVerifier *verifiers[] = {m_verifierBoolean, m_verifierInteger, m_verifierFloat};
1093*35238bceSAndroid Build Coastguard Worker
1094*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers,
1095*35238bceSAndroid Build Coastguard Worker addChild(new DepthRangeCase(m_context, verifier,
1096*35238bceSAndroid Build Coastguard Worker (std::string("depth_range") + verifier->getTestNamePostfix()).c_str(),
1097*35238bceSAndroid Build Coastguard Worker "DEPTH_RANGE")));
1098*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers,
1099*35238bceSAndroid Build Coastguard Worker addChild(new LineWidthCase(m_context, verifier,
1100*35238bceSAndroid Build Coastguard Worker (std::string("line_width") + verifier->getTestNamePostfix()).c_str(),
1101*35238bceSAndroid Build Coastguard Worker "LINE_WIDTH")));
1102*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers, addChild(new PolygonOffsetFactorCase(
1103*35238bceSAndroid Build Coastguard Worker m_context, verifier,
1104*35238bceSAndroid Build Coastguard Worker (std::string("polygon_offset_factor") + verifier->getTestNamePostfix()).c_str(),
1105*35238bceSAndroid Build Coastguard Worker "POLYGON_OFFSET_FACTOR")));
1106*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers, addChild(new PolygonOffsetUnitsCase(
1107*35238bceSAndroid Build Coastguard Worker m_context, verifier,
1108*35238bceSAndroid Build Coastguard Worker (std::string("polygon_offset_units") + verifier->getTestNamePostfix()).c_str(),
1109*35238bceSAndroid Build Coastguard Worker "POLYGON_OFFSET_UNITS")));
1110*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers, addChild(new SampleCoverageCase(
1111*35238bceSAndroid Build Coastguard Worker m_context, verifier,
1112*35238bceSAndroid Build Coastguard Worker (std::string("sample_coverage_value") + verifier->getTestNamePostfix()).c_str(),
1113*35238bceSAndroid Build Coastguard Worker "SAMPLE_COVERAGE_VALUE")));
1114*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(
1115*35238bceSAndroid Build Coastguard Worker verifiers, addChild(new ColorClearCase(
1116*35238bceSAndroid Build Coastguard Worker m_context, verifier, (std::string("color_clear_value") + verifier->getTestNamePostfix()).c_str(),
1117*35238bceSAndroid Build Coastguard Worker "COLOR_CLEAR_VALUE")));
1118*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(
1119*35238bceSAndroid Build Coastguard Worker verifiers, addChild(new DepthClearCase(
1120*35238bceSAndroid Build Coastguard Worker m_context, verifier, (std::string("depth_clear_value") + verifier->getTestNamePostfix()).c_str(),
1121*35238bceSAndroid Build Coastguard Worker "DEPTH_CLEAR_VALUE")));
1122*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers, addChild(new AliasedPointSizeRangeCase(
1123*35238bceSAndroid Build Coastguard Worker m_context, verifier,
1124*35238bceSAndroid Build Coastguard Worker (std::string("aliased_point_size_range") + verifier->getTestNamePostfix()).c_str(),
1125*35238bceSAndroid Build Coastguard Worker "ALIASED_POINT_SIZE_RANGE")));
1126*35238bceSAndroid Build Coastguard Worker FOR_EACH_VERIFIER(verifiers, addChild(new AliasedLineWidthRangeCase(
1127*35238bceSAndroid Build Coastguard Worker m_context, verifier,
1128*35238bceSAndroid Build Coastguard Worker (std::string("aliased_line_width_range") + verifier->getTestNamePostfix()).c_str(),
1129*35238bceSAndroid Build Coastguard Worker "ALIASED_LINE_WIDTH_RANGE")));
1130*35238bceSAndroid Build Coastguard Worker }
1131*35238bceSAndroid Build Coastguard Worker
deinit(void)1132*35238bceSAndroid Build Coastguard Worker void FloatStateQueryTests::deinit(void)
1133*35238bceSAndroid Build Coastguard Worker {
1134*35238bceSAndroid Build Coastguard Worker if (m_verifierBoolean)
1135*35238bceSAndroid Build Coastguard Worker {
1136*35238bceSAndroid Build Coastguard Worker delete m_verifierBoolean;
1137*35238bceSAndroid Build Coastguard Worker m_verifierBoolean = DE_NULL;
1138*35238bceSAndroid Build Coastguard Worker }
1139*35238bceSAndroid Build Coastguard Worker if (m_verifierInteger)
1140*35238bceSAndroid Build Coastguard Worker {
1141*35238bceSAndroid Build Coastguard Worker delete m_verifierInteger;
1142*35238bceSAndroid Build Coastguard Worker m_verifierInteger = DE_NULL;
1143*35238bceSAndroid Build Coastguard Worker }
1144*35238bceSAndroid Build Coastguard Worker if (m_verifierFloat)
1145*35238bceSAndroid Build Coastguard Worker {
1146*35238bceSAndroid Build Coastguard Worker delete m_verifierFloat;
1147*35238bceSAndroid Build Coastguard Worker m_verifierFloat = DE_NULL;
1148*35238bceSAndroid Build Coastguard Worker }
1149*35238bceSAndroid Build Coastguard Worker
1150*35238bceSAndroid Build Coastguard Worker this->TestCaseGroup::deinit();
1151*35238bceSAndroid Build Coastguard Worker }
1152*35238bceSAndroid Build Coastguard Worker
1153*35238bceSAndroid Build Coastguard Worker } // namespace Functional
1154*35238bceSAndroid Build Coastguard Worker } // namespace gles2
1155*35238bceSAndroid Build Coastguard Worker } // namespace deqp
1156