1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program EGL 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 Config query tests.
22*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker
24*35238bceSAndroid Build Coastguard Worker #include "teglQueryConfigTests.hpp"
25*35238bceSAndroid Build Coastguard Worker #include "teglSimpleConfigCase.hpp"
26*35238bceSAndroid Build Coastguard Worker #include "tcuTestLog.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "tcuTestContext.hpp"
28*35238bceSAndroid Build Coastguard Worker #include "tcuCommandLine.hpp"
29*35238bceSAndroid Build Coastguard Worker #include "egluCallLogWrapper.hpp"
30*35238bceSAndroid Build Coastguard Worker #include "egluStrUtil.hpp"
31*35238bceSAndroid Build Coastguard Worker #include "egluUtil.hpp"
32*35238bceSAndroid Build Coastguard Worker #include "eglwLibrary.hpp"
33*35238bceSAndroid Build Coastguard Worker #include "eglwEnums.hpp"
34*35238bceSAndroid Build Coastguard Worker #include "deRandom.hpp"
35*35238bceSAndroid Build Coastguard Worker
36*35238bceSAndroid Build Coastguard Worker #include <string>
37*35238bceSAndroid Build Coastguard Worker #include <vector>
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker namespace deqp
40*35238bceSAndroid Build Coastguard Worker {
41*35238bceSAndroid Build Coastguard Worker namespace egl
42*35238bceSAndroid Build Coastguard Worker {
43*35238bceSAndroid Build Coastguard Worker
44*35238bceSAndroid Build Coastguard Worker using eglu::ConfigInfo;
45*35238bceSAndroid Build Coastguard Worker using tcu::TestLog;
46*35238bceSAndroid Build Coastguard Worker using namespace eglw;
47*35238bceSAndroid Build Coastguard Worker
logConfigAttribute(TestLog & log,EGLenum attrib,EGLint value)48*35238bceSAndroid Build Coastguard Worker static void logConfigAttribute(TestLog &log, EGLenum attrib, EGLint value)
49*35238bceSAndroid Build Coastguard Worker {
50*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << " " << eglu::getConfigAttribName(attrib) << ": "
51*35238bceSAndroid Build Coastguard Worker << eglu::getConfigAttribValueStr(attrib, value) << TestLog::EndMessage;
52*35238bceSAndroid Build Coastguard Worker }
53*35238bceSAndroid Build Coastguard Worker
isAttributePresent(const eglu::Version & version,EGLenum attribute)54*35238bceSAndroid Build Coastguard Worker static bool isAttributePresent(const eglu::Version &version, EGLenum attribute)
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker switch (attribute)
57*35238bceSAndroid Build Coastguard Worker {
58*35238bceSAndroid Build Coastguard Worker case EGL_CONFORMANT:
59*35238bceSAndroid Build Coastguard Worker if (version < eglu::Version(1, 3))
60*35238bceSAndroid Build Coastguard Worker return false;
61*35238bceSAndroid Build Coastguard Worker break;
62*35238bceSAndroid Build Coastguard Worker case EGL_LUMINANCE_SIZE:
63*35238bceSAndroid Build Coastguard Worker case EGL_ALPHA_MASK_SIZE:
64*35238bceSAndroid Build Coastguard Worker case EGL_COLOR_BUFFER_TYPE:
65*35238bceSAndroid Build Coastguard Worker case EGL_MATCH_NATIVE_PIXMAP:
66*35238bceSAndroid Build Coastguard Worker if (version < eglu::Version(1, 2))
67*35238bceSAndroid Build Coastguard Worker return false;
68*35238bceSAndroid Build Coastguard Worker break;
69*35238bceSAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_RGB:
70*35238bceSAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_RGBA:
71*35238bceSAndroid Build Coastguard Worker case EGL_MAX_SWAP_INTERVAL:
72*35238bceSAndroid Build Coastguard Worker case EGL_MIN_SWAP_INTERVAL:
73*35238bceSAndroid Build Coastguard Worker case EGL_RENDERABLE_TYPE:
74*35238bceSAndroid Build Coastguard Worker if (version < eglu::Version(1, 1))
75*35238bceSAndroid Build Coastguard Worker return false;
76*35238bceSAndroid Build Coastguard Worker break;
77*35238bceSAndroid Build Coastguard Worker default:
78*35238bceSAndroid Build Coastguard Worker break;
79*35238bceSAndroid Build Coastguard Worker }
80*35238bceSAndroid Build Coastguard Worker
81*35238bceSAndroid Build Coastguard Worker return true;
82*35238bceSAndroid Build Coastguard Worker }
83*35238bceSAndroid Build Coastguard Worker
hasRequiredExtension(const eglw::Library & egl,EGLDisplay display,EGLenum attribute)84*35238bceSAndroid Build Coastguard Worker static bool hasRequiredExtension(const eglw::Library &egl, EGLDisplay display, EGLenum attribute)
85*35238bceSAndroid Build Coastguard Worker {
86*35238bceSAndroid Build Coastguard Worker switch (attribute)
87*35238bceSAndroid Build Coastguard Worker {
88*35238bceSAndroid Build Coastguard Worker case EGL_RECORDABLE_ANDROID:
89*35238bceSAndroid Build Coastguard Worker return eglu::hasExtension(egl, display, "EGL_ANDROID_recordable");
90*35238bceSAndroid Build Coastguard Worker default:
91*35238bceSAndroid Build Coastguard Worker break;
92*35238bceSAndroid Build Coastguard Worker }
93*35238bceSAndroid Build Coastguard Worker
94*35238bceSAndroid Build Coastguard Worker return true;
95*35238bceSAndroid Build Coastguard Worker }
96*35238bceSAndroid Build Coastguard Worker
97*35238bceSAndroid Build Coastguard Worker class GetConfigsBoundsCase : public TestCase, protected eglu::CallLogWrapper
98*35238bceSAndroid Build Coastguard Worker {
99*35238bceSAndroid Build Coastguard Worker public:
GetConfigsBoundsCase(EglTestContext & eglTestCtx,const char * name,const char * description)100*35238bceSAndroid Build Coastguard Worker GetConfigsBoundsCase(EglTestContext &eglTestCtx, const char *name, const char *description)
101*35238bceSAndroid Build Coastguard Worker : TestCase(eglTestCtx, name, description)
102*35238bceSAndroid Build Coastguard Worker , CallLogWrapper(eglTestCtx.getLibrary(), eglTestCtx.getTestContext().getLog())
103*35238bceSAndroid Build Coastguard Worker , m_display(EGL_NO_DISPLAY)
104*35238bceSAndroid Build Coastguard Worker {
105*35238bceSAndroid Build Coastguard Worker }
106*35238bceSAndroid Build Coastguard Worker
init(void)107*35238bceSAndroid Build Coastguard Worker void init(void)
108*35238bceSAndroid Build Coastguard Worker {
109*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_display == EGL_NO_DISPLAY);
110*35238bceSAndroid Build Coastguard Worker m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay());
111*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
112*35238bceSAndroid Build Coastguard Worker }
113*35238bceSAndroid Build Coastguard Worker
deinit(void)114*35238bceSAndroid Build Coastguard Worker void deinit(void)
115*35238bceSAndroid Build Coastguard Worker {
116*35238bceSAndroid Build Coastguard Worker m_eglTestCtx.getLibrary().terminate(m_display);
117*35238bceSAndroid Build Coastguard Worker m_display = EGL_NO_DISPLAY;
118*35238bceSAndroid Build Coastguard Worker }
119*35238bceSAndroid Build Coastguard Worker
checkGetConfigsBounds(de::Random & rnd,const int numConfigAll,const int numConfigRequested)120*35238bceSAndroid Build Coastguard Worker void checkGetConfigsBounds(de::Random &rnd, const int numConfigAll, const int numConfigRequested)
121*35238bceSAndroid Build Coastguard Worker {
122*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
123*35238bceSAndroid Build Coastguard Worker std::vector<EGLConfig> buffer(numConfigAll + 10);
124*35238bceSAndroid Build Coastguard Worker
125*35238bceSAndroid Build Coastguard Worker std::vector<uint32_t> magicBuffer((buffer.size() * sizeof(EGLConfig)) / sizeof(uint32_t) + 1);
126*35238bceSAndroid Build Coastguard Worker const EGLConfig *magicConfigs = reinterpret_cast<EGLConfig *>(&magicBuffer[0]);
127*35238bceSAndroid Build Coastguard Worker
128*35238bceSAndroid Build Coastguard Worker int numConfigReturned;
129*35238bceSAndroid Build Coastguard Worker
130*35238bceSAndroid Build Coastguard Worker // Fill buffers with magic
131*35238bceSAndroid Build Coastguard Worker for (size_t ndx = 0; ndx < magicBuffer.size(); ndx++)
132*35238bceSAndroid Build Coastguard Worker magicBuffer[ndx] = rnd.getUint32();
133*35238bceSAndroid Build Coastguard Worker for (size_t ndx = 0; ndx < buffer.size(); ndx++)
134*35238bceSAndroid Build Coastguard Worker buffer[ndx] = magicConfigs[ndx];
135*35238bceSAndroid Build Coastguard Worker
136*35238bceSAndroid Build Coastguard Worker eglGetConfigs(m_display, &buffer[0], numConfigRequested, &numConfigReturned);
137*35238bceSAndroid Build Coastguard Worker eglu::checkError(eglGetError(), DE_NULL, __FILE__, __LINE__);
138*35238bceSAndroid Build Coastguard Worker
139*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << numConfigReturned << " configs returned" << TestLog::EndMessage;
140*35238bceSAndroid Build Coastguard Worker
141*35238bceSAndroid Build Coastguard Worker // Compare results with stored magic
142*35238bceSAndroid Build Coastguard Worker {
143*35238bceSAndroid Build Coastguard Worker int numOverwritten = 0;
144*35238bceSAndroid Build Coastguard Worker
145*35238bceSAndroid Build Coastguard Worker for (size_t ndx = 0; ndx < buffer.size(); ndx++)
146*35238bceSAndroid Build Coastguard Worker {
147*35238bceSAndroid Build Coastguard Worker if (buffer[ndx] == magicConfigs[ndx])
148*35238bceSAndroid Build Coastguard Worker {
149*35238bceSAndroid Build Coastguard Worker numOverwritten = (int)ndx;
150*35238bceSAndroid Build Coastguard Worker break;
151*35238bceSAndroid Build Coastguard Worker }
152*35238bceSAndroid Build Coastguard Worker }
153*35238bceSAndroid Build Coastguard Worker
154*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << numOverwritten << " values actually written" << TestLog::EndMessage;
155*35238bceSAndroid Build Coastguard Worker
156*35238bceSAndroid Build Coastguard Worker if (numConfigReturned > deMax32(numConfigRequested, 0))
157*35238bceSAndroid Build Coastguard Worker {
158*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, more configs returned than requested." << TestLog::EndMessage;
159*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Too many configs returned");
160*35238bceSAndroid Build Coastguard Worker }
161*35238bceSAndroid Build Coastguard Worker
162*35238bceSAndroid Build Coastguard Worker if (numOverwritten > deMax32(numConfigReturned, 0))
163*35238bceSAndroid Build Coastguard Worker {
164*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, buffer overflow detected." << TestLog::EndMessage;
165*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Buffer overflow");
166*35238bceSAndroid Build Coastguard Worker }
167*35238bceSAndroid Build Coastguard Worker else if (numOverwritten != numConfigReturned)
168*35238bceSAndroid Build Coastguard Worker {
169*35238bceSAndroid Build Coastguard Worker log << TestLog::Message
170*35238bceSAndroid Build Coastguard Worker << "Fail, reported number of returned configs differs from number of values written."
171*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
172*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Incorrect size");
173*35238bceSAndroid Build Coastguard Worker }
174*35238bceSAndroid Build Coastguard Worker }
175*35238bceSAndroid Build Coastguard Worker }
176*35238bceSAndroid Build Coastguard Worker
iterate(void)177*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void)
178*35238bceSAndroid Build Coastguard Worker {
179*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
180*35238bceSAndroid Build Coastguard Worker EGLint numConfigAll;
181*35238bceSAndroid Build Coastguard Worker
182*35238bceSAndroid Build Coastguard Worker enableLogging(true);
183*35238bceSAndroid Build Coastguard Worker
184*35238bceSAndroid Build Coastguard Worker eglGetConfigs(m_display, 0, 0, &numConfigAll);
185*35238bceSAndroid Build Coastguard Worker
186*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << numConfigAll << " configs available" << TestLog::EndMessage;
187*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << TestLog::EndMessage;
188*35238bceSAndroid Build Coastguard Worker
189*35238bceSAndroid Build Coastguard Worker if (numConfigAll > 0)
190*35238bceSAndroid Build Coastguard Worker {
191*35238bceSAndroid Build Coastguard Worker de::Random rnd(123);
192*35238bceSAndroid Build Coastguard Worker
193*35238bceSAndroid Build Coastguard Worker for (int i = 0; i < 5; i++)
194*35238bceSAndroid Build Coastguard Worker {
195*35238bceSAndroid Build Coastguard Worker checkGetConfigsBounds(rnd, numConfigAll, rnd.getInt(0, numConfigAll));
196*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << TestLog::EndMessage;
197*35238bceSAndroid Build Coastguard Worker }
198*35238bceSAndroid Build Coastguard Worker
199*35238bceSAndroid Build Coastguard Worker checkGetConfigsBounds(rnd, numConfigAll, -1);
200*35238bceSAndroid Build Coastguard Worker }
201*35238bceSAndroid Build Coastguard Worker else
202*35238bceSAndroid Build Coastguard Worker {
203*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "No configs");
204*35238bceSAndroid Build Coastguard Worker }
205*35238bceSAndroid Build Coastguard Worker
206*35238bceSAndroid Build Coastguard Worker enableLogging(false);
207*35238bceSAndroid Build Coastguard Worker
208*35238bceSAndroid Build Coastguard Worker return STOP;
209*35238bceSAndroid Build Coastguard Worker }
210*35238bceSAndroid Build Coastguard Worker
211*35238bceSAndroid Build Coastguard Worker protected:
212*35238bceSAndroid Build Coastguard Worker EGLDisplay m_display;
213*35238bceSAndroid Build Coastguard Worker };
214*35238bceSAndroid Build Coastguard Worker
215*35238bceSAndroid Build Coastguard Worker class GetConfigAttribCase : public TestCase, protected eglu::CallLogWrapper
216*35238bceSAndroid Build Coastguard Worker {
217*35238bceSAndroid Build Coastguard Worker public:
218*35238bceSAndroid Build Coastguard Worker GetConfigAttribCase(EglTestContext &eglTestCtx, const char *name, const char *description);
219*35238bceSAndroid Build Coastguard Worker
220*35238bceSAndroid Build Coastguard Worker void init(void);
221*35238bceSAndroid Build Coastguard Worker void deinit(void);
222*35238bceSAndroid Build Coastguard Worker IterateResult iterate(void);
223*35238bceSAndroid Build Coastguard Worker
224*35238bceSAndroid Build Coastguard Worker EGLint getValue(EGLConfig config, EGLenum attrib, bool logValue = true);
225*35238bceSAndroid Build Coastguard Worker
226*35238bceSAndroid Build Coastguard Worker virtual void executeTest(EGLConfig config) = 0;
227*35238bceSAndroid Build Coastguard Worker
228*35238bceSAndroid Build Coastguard Worker protected:
229*35238bceSAndroid Build Coastguard Worker EGLDisplay m_display;
230*35238bceSAndroid Build Coastguard Worker
231*35238bceSAndroid Build Coastguard Worker private:
232*35238bceSAndroid Build Coastguard Worker std::vector<EGLConfig> m_configs;
233*35238bceSAndroid Build Coastguard Worker std::vector<EGLConfig>::const_iterator m_configsIter;
234*35238bceSAndroid Build Coastguard Worker };
235*35238bceSAndroid Build Coastguard Worker
GetConfigAttribCase(EglTestContext & eglTestCtx,const char * name,const char * description)236*35238bceSAndroid Build Coastguard Worker GetConfigAttribCase::GetConfigAttribCase(EglTestContext &eglTestCtx, const char *name, const char *description)
237*35238bceSAndroid Build Coastguard Worker : TestCase(eglTestCtx, name, description)
238*35238bceSAndroid Build Coastguard Worker , CallLogWrapper(eglTestCtx.getLibrary(), eglTestCtx.getTestContext().getLog())
239*35238bceSAndroid Build Coastguard Worker , m_display(EGL_NO_DISPLAY)
240*35238bceSAndroid Build Coastguard Worker {
241*35238bceSAndroid Build Coastguard Worker }
242*35238bceSAndroid Build Coastguard Worker
init(void)243*35238bceSAndroid Build Coastguard Worker void GetConfigAttribCase::init(void)
244*35238bceSAndroid Build Coastguard Worker {
245*35238bceSAndroid Build Coastguard Worker DE_ASSERT(m_display == EGL_NO_DISPLAY);
246*35238bceSAndroid Build Coastguard Worker m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay());
247*35238bceSAndroid Build Coastguard Worker m_configs = eglu::getConfigs(m_eglTestCtx.getLibrary(), m_display);
248*35238bceSAndroid Build Coastguard Worker m_configsIter = m_configs.begin();
249*35238bceSAndroid Build Coastguard Worker
250*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
251*35238bceSAndroid Build Coastguard Worker }
252*35238bceSAndroid Build Coastguard Worker
deinit(void)253*35238bceSAndroid Build Coastguard Worker void GetConfigAttribCase::deinit(void)
254*35238bceSAndroid Build Coastguard Worker {
255*35238bceSAndroid Build Coastguard Worker m_eglTestCtx.getLibrary().terminate(m_display);
256*35238bceSAndroid Build Coastguard Worker m_display = EGL_NO_DISPLAY;
257*35238bceSAndroid Build Coastguard Worker }
258*35238bceSAndroid Build Coastguard Worker
iterate(void)259*35238bceSAndroid Build Coastguard Worker tcu::TestNode::IterateResult GetConfigAttribCase::iterate(void)
260*35238bceSAndroid Build Coastguard Worker {
261*35238bceSAndroid Build Coastguard Worker tcu::TestLog &log = m_testCtx.getLog();
262*35238bceSAndroid Build Coastguard Worker
263*35238bceSAndroid Build Coastguard Worker if (m_configsIter == m_configs.end())
264*35238bceSAndroid Build Coastguard Worker {
265*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "No configs available." << TestLog::EndMessage;
266*35238bceSAndroid Build Coastguard Worker return STOP;
267*35238bceSAndroid Build Coastguard Worker }
268*35238bceSAndroid Build Coastguard Worker
269*35238bceSAndroid Build Coastguard Worker {
270*35238bceSAndroid Build Coastguard Worker const EGLConfig config = *m_configsIter;
271*35238bceSAndroid Build Coastguard Worker EGLint id;
272*35238bceSAndroid Build Coastguard Worker
273*35238bceSAndroid Build Coastguard Worker eglGetConfigAttrib(m_display, config, EGL_CONFIG_ID, &id);
274*35238bceSAndroid Build Coastguard Worker eglu::checkError(eglGetError(), DE_NULL, __FILE__, __LINE__);
275*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Config ID " << id << TestLog::EndMessage;
276*35238bceSAndroid Build Coastguard Worker
277*35238bceSAndroid Build Coastguard Worker executeTest(config);
278*35238bceSAndroid Build Coastguard Worker }
279*35238bceSAndroid Build Coastguard Worker
280*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << TestLog::EndMessage;
281*35238bceSAndroid Build Coastguard Worker
282*35238bceSAndroid Build Coastguard Worker m_configsIter++;
283*35238bceSAndroid Build Coastguard Worker
284*35238bceSAndroid Build Coastguard Worker if (m_configsIter == m_configs.end())
285*35238bceSAndroid Build Coastguard Worker return STOP;
286*35238bceSAndroid Build Coastguard Worker else
287*35238bceSAndroid Build Coastguard Worker return CONTINUE;
288*35238bceSAndroid Build Coastguard Worker }
289*35238bceSAndroid Build Coastguard Worker
getValue(EGLConfig config,EGLenum attrib,bool logValue)290*35238bceSAndroid Build Coastguard Worker EGLint GetConfigAttribCase::getValue(EGLConfig config, EGLenum attrib, bool logValue)
291*35238bceSAndroid Build Coastguard Worker {
292*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
293*35238bceSAndroid Build Coastguard Worker EGLint value;
294*35238bceSAndroid Build Coastguard Worker
295*35238bceSAndroid Build Coastguard Worker eglGetConfigAttrib(m_display, config, attrib, &value);
296*35238bceSAndroid Build Coastguard Worker eglu::checkError(eglGetError(), DE_NULL, __FILE__, __LINE__);
297*35238bceSAndroid Build Coastguard Worker
298*35238bceSAndroid Build Coastguard Worker if (logValue)
299*35238bceSAndroid Build Coastguard Worker logConfigAttribute(log, attrib, value);
300*35238bceSAndroid Build Coastguard Worker
301*35238bceSAndroid Build Coastguard Worker return value;
302*35238bceSAndroid Build Coastguard Worker }
303*35238bceSAndroid Build Coastguard Worker
304*35238bceSAndroid Build Coastguard Worker class GetConfigAttribSimpleCase : public GetConfigAttribCase
305*35238bceSAndroid Build Coastguard Worker {
306*35238bceSAndroid Build Coastguard Worker public:
GetConfigAttribSimpleCase(EglTestContext & eglTestCtx,const char * name,const char * description,EGLenum attribute)307*35238bceSAndroid Build Coastguard Worker GetConfigAttribSimpleCase(EglTestContext &eglTestCtx, const char *name, const char *description, EGLenum attribute)
308*35238bceSAndroid Build Coastguard Worker : GetConfigAttribCase(eglTestCtx, name, description)
309*35238bceSAndroid Build Coastguard Worker , m_attrib(attribute)
310*35238bceSAndroid Build Coastguard Worker {
311*35238bceSAndroid Build Coastguard Worker }
312*35238bceSAndroid Build Coastguard Worker
checkColorBufferType(EGLint value)313*35238bceSAndroid Build Coastguard Worker void checkColorBufferType(EGLint value)
314*35238bceSAndroid Build Coastguard Worker {
315*35238bceSAndroid Build Coastguard Worker const bool isRGBBuffer = value == EGL_RGB_BUFFER;
316*35238bceSAndroid Build Coastguard Worker const bool isLuminanceBuffer = value == EGL_LUMINANCE_BUFFER;
317*35238bceSAndroid Build Coastguard Worker const bool isYuvBuffer = value == EGL_YUV_BUFFER_EXT;
318*35238bceSAndroid Build Coastguard Worker const bool hasYuvSupport = eglu::hasExtension(m_eglTestCtx.getLibrary(), m_display, "EGL_EXT_yuv_surface");
319*35238bceSAndroid Build Coastguard Worker
320*35238bceSAndroid Build Coastguard Worker if (!(isRGBBuffer || isLuminanceBuffer || (isYuvBuffer && hasYuvSupport)))
321*35238bceSAndroid Build Coastguard Worker {
322*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
323*35238bceSAndroid Build Coastguard Worker
324*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, invalid EGL_COLOR_BUFFER_TYPE value" << TestLog::EndMessage;
325*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid value");
326*35238bceSAndroid Build Coastguard Worker }
327*35238bceSAndroid Build Coastguard Worker }
328*35238bceSAndroid Build Coastguard Worker
checkCaveat(EGLint value)329*35238bceSAndroid Build Coastguard Worker void checkCaveat(EGLint value)
330*35238bceSAndroid Build Coastguard Worker {
331*35238bceSAndroid Build Coastguard Worker if (!(value == EGL_NONE || value == EGL_SLOW_CONFIG || value == EGL_NON_CONFORMANT_CONFIG))
332*35238bceSAndroid Build Coastguard Worker {
333*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
334*35238bceSAndroid Build Coastguard Worker
335*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, invalid EGL_CONFIG_CAVEAT value" << TestLog::EndMessage;
336*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid value");
337*35238bceSAndroid Build Coastguard Worker }
338*35238bceSAndroid Build Coastguard Worker }
339*35238bceSAndroid Build Coastguard Worker
checkTransparentType(EGLint value)340*35238bceSAndroid Build Coastguard Worker void checkTransparentType(EGLint value)
341*35238bceSAndroid Build Coastguard Worker {
342*35238bceSAndroid Build Coastguard Worker if (!(value == EGL_NONE || value == EGL_TRANSPARENT_RGB))
343*35238bceSAndroid Build Coastguard Worker {
344*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
345*35238bceSAndroid Build Coastguard Worker
346*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, invalid EGL_TRANSPARENT_TYPE value" << TestLog::EndMessage;
347*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid value");
348*35238bceSAndroid Build Coastguard Worker }
349*35238bceSAndroid Build Coastguard Worker }
350*35238bceSAndroid Build Coastguard Worker
checkBoolean(EGLenum attrib,EGLint value)351*35238bceSAndroid Build Coastguard Worker void checkBoolean(EGLenum attrib, EGLint value)
352*35238bceSAndroid Build Coastguard Worker {
353*35238bceSAndroid Build Coastguard Worker if (!(value == EGL_FALSE || value == EGL_TRUE))
354*35238bceSAndroid Build Coastguard Worker {
355*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
356*35238bceSAndroid Build Coastguard Worker
357*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, " << eglu::getConfigAttribStr(attrib) << " should be a boolean value."
358*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
359*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid value");
360*35238bceSAndroid Build Coastguard Worker }
361*35238bceSAndroid Build Coastguard Worker }
362*35238bceSAndroid Build Coastguard Worker
checkInteger(EGLenum attrib,EGLint value)363*35238bceSAndroid Build Coastguard Worker void checkInteger(EGLenum attrib, EGLint value)
364*35238bceSAndroid Build Coastguard Worker {
365*35238bceSAndroid Build Coastguard Worker if (attrib == EGL_NATIVE_VISUAL_ID || attrib == EGL_NATIVE_VISUAL_TYPE) // Implementation-defined
366*35238bceSAndroid Build Coastguard Worker return;
367*35238bceSAndroid Build Coastguard Worker
368*35238bceSAndroid Build Coastguard Worker if (attrib == EGL_CONFIG_ID && value < 1)
369*35238bceSAndroid Build Coastguard Worker {
370*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
371*35238bceSAndroid Build Coastguard Worker
372*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, config IDs should be positive integer values beginning from 1."
373*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
374*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid value");
375*35238bceSAndroid Build Coastguard Worker }
376*35238bceSAndroid Build Coastguard Worker }
377*35238bceSAndroid Build Coastguard Worker
checkSurfaceTypeMask(EGLint value)378*35238bceSAndroid Build Coastguard Worker void checkSurfaceTypeMask(EGLint value)
379*35238bceSAndroid Build Coastguard Worker {
380*35238bceSAndroid Build Coastguard Worker const EGLint wantedBits = EGL_WINDOW_BIT | EGL_PIXMAP_BIT | EGL_PBUFFER_BIT;
381*35238bceSAndroid Build Coastguard Worker
382*35238bceSAndroid Build Coastguard Worker if ((value & wantedBits) == 0)
383*35238bceSAndroid Build Coastguard Worker {
384*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
385*35238bceSAndroid Build Coastguard Worker
386*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, config does not actually support creation of any surface type?"
387*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
388*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid value");
389*35238bceSAndroid Build Coastguard Worker }
390*35238bceSAndroid Build Coastguard Worker }
391*35238bceSAndroid Build Coastguard Worker
checkAttribute(EGLenum attrib,EGLint value)392*35238bceSAndroid Build Coastguard Worker void checkAttribute(EGLenum attrib, EGLint value)
393*35238bceSAndroid Build Coastguard Worker {
394*35238bceSAndroid Build Coastguard Worker switch (attrib)
395*35238bceSAndroid Build Coastguard Worker {
396*35238bceSAndroid Build Coastguard Worker case EGL_COLOR_BUFFER_TYPE:
397*35238bceSAndroid Build Coastguard Worker checkColorBufferType(value);
398*35238bceSAndroid Build Coastguard Worker break;
399*35238bceSAndroid Build Coastguard Worker case EGL_CONFIG_CAVEAT:
400*35238bceSAndroid Build Coastguard Worker checkCaveat(value);
401*35238bceSAndroid Build Coastguard Worker break;
402*35238bceSAndroid Build Coastguard Worker case EGL_TRANSPARENT_TYPE:
403*35238bceSAndroid Build Coastguard Worker checkTransparentType(value);
404*35238bceSAndroid Build Coastguard Worker break;
405*35238bceSAndroid Build Coastguard Worker case EGL_CONFORMANT:
406*35238bceSAndroid Build Coastguard Worker case EGL_RENDERABLE_TYPE:
407*35238bceSAndroid Build Coastguard Worker // Just print what we know
408*35238bceSAndroid Build Coastguard Worker break;
409*35238bceSAndroid Build Coastguard Worker case EGL_SURFACE_TYPE:
410*35238bceSAndroid Build Coastguard Worker checkSurfaceTypeMask(value);
411*35238bceSAndroid Build Coastguard Worker break;
412*35238bceSAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_RGB:
413*35238bceSAndroid Build Coastguard Worker case EGL_BIND_TO_TEXTURE_RGBA:
414*35238bceSAndroid Build Coastguard Worker case EGL_NATIVE_RENDERABLE:
415*35238bceSAndroid Build Coastguard Worker case EGL_RECORDABLE_ANDROID:
416*35238bceSAndroid Build Coastguard Worker checkBoolean(attrib, value);
417*35238bceSAndroid Build Coastguard Worker break;
418*35238bceSAndroid Build Coastguard Worker default:
419*35238bceSAndroid Build Coastguard Worker checkInteger(attrib, value);
420*35238bceSAndroid Build Coastguard Worker }
421*35238bceSAndroid Build Coastguard Worker }
422*35238bceSAndroid Build Coastguard Worker
executeTest(EGLConfig config)423*35238bceSAndroid Build Coastguard Worker void executeTest(EGLConfig config)
424*35238bceSAndroid Build Coastguard Worker {
425*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
426*35238bceSAndroid Build Coastguard Worker eglu::Version version = eglu::getVersion(m_eglTestCtx.getLibrary(), m_display);
427*35238bceSAndroid Build Coastguard Worker
428*35238bceSAndroid Build Coastguard Worker if (!isAttributePresent(version, m_attrib))
429*35238bceSAndroid Build Coastguard Worker {
430*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << eglu::getConfigAttribStr(m_attrib) << " not supported by this EGL version";
431*35238bceSAndroid Build Coastguard Worker }
432*35238bceSAndroid Build Coastguard Worker else if (!hasRequiredExtension(m_eglTestCtx.getLibrary(), m_display, m_attrib))
433*35238bceSAndroid Build Coastguard Worker {
434*35238bceSAndroid Build Coastguard Worker std::string message =
435*35238bceSAndroid Build Coastguard Worker std::string(eglu::getConfigAttribName(m_attrib)) + " not supported due to missing extension";
436*35238bceSAndroid Build Coastguard Worker TCU_THROW(NotSupportedError, message);
437*35238bceSAndroid Build Coastguard Worker }
438*35238bceSAndroid Build Coastguard Worker else
439*35238bceSAndroid Build Coastguard Worker {
440*35238bceSAndroid Build Coastguard Worker EGLint value;
441*35238bceSAndroid Build Coastguard Worker
442*35238bceSAndroid Build Coastguard Worker enableLogging(true);
443*35238bceSAndroid Build Coastguard Worker
444*35238bceSAndroid Build Coastguard Worker eglGetConfigAttrib(m_display, config, m_attrib, &value);
445*35238bceSAndroid Build Coastguard Worker eglu::checkError(eglGetError(), DE_NULL, __FILE__, __LINE__);
446*35238bceSAndroid Build Coastguard Worker
447*35238bceSAndroid Build Coastguard Worker logConfigAttribute(log, m_attrib, value);
448*35238bceSAndroid Build Coastguard Worker checkAttribute(m_attrib, value);
449*35238bceSAndroid Build Coastguard Worker
450*35238bceSAndroid Build Coastguard Worker enableLogging(false);
451*35238bceSAndroid Build Coastguard Worker }
452*35238bceSAndroid Build Coastguard Worker }
453*35238bceSAndroid Build Coastguard Worker
454*35238bceSAndroid Build Coastguard Worker private:
455*35238bceSAndroid Build Coastguard Worker EGLenum m_attrib;
456*35238bceSAndroid Build Coastguard Worker };
457*35238bceSAndroid Build Coastguard Worker
458*35238bceSAndroid Build Coastguard Worker class GetConfigAttribBufferSizeCase : public GetConfigAttribCase
459*35238bceSAndroid Build Coastguard Worker {
460*35238bceSAndroid Build Coastguard Worker public:
GetConfigAttribBufferSizeCase(EglTestContext & eglTestCtx,const char * name,const char * description)461*35238bceSAndroid Build Coastguard Worker GetConfigAttribBufferSizeCase(EglTestContext &eglTestCtx, const char *name, const char *description)
462*35238bceSAndroid Build Coastguard Worker : GetConfigAttribCase(eglTestCtx, name, description)
463*35238bceSAndroid Build Coastguard Worker {
464*35238bceSAndroid Build Coastguard Worker }
465*35238bceSAndroid Build Coastguard Worker
executeTest(EGLConfig config)466*35238bceSAndroid Build Coastguard Worker void executeTest(EGLConfig config)
467*35238bceSAndroid Build Coastguard Worker {
468*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
469*35238bceSAndroid Build Coastguard Worker
470*35238bceSAndroid Build Coastguard Worker const EGLint colorBufferType = getValue(config, EGL_COLOR_BUFFER_TYPE);
471*35238bceSAndroid Build Coastguard Worker
472*35238bceSAndroid Build Coastguard Worker const EGLint bufferSize = getValue(config, EGL_BUFFER_SIZE);
473*35238bceSAndroid Build Coastguard Worker const EGLint redSize = getValue(config, EGL_RED_SIZE);
474*35238bceSAndroid Build Coastguard Worker const EGLint greenSize = getValue(config, EGL_GREEN_SIZE);
475*35238bceSAndroid Build Coastguard Worker const EGLint blueSize = getValue(config, EGL_BLUE_SIZE);
476*35238bceSAndroid Build Coastguard Worker const EGLint luminanceSize = getValue(config, EGL_LUMINANCE_SIZE);
477*35238bceSAndroid Build Coastguard Worker const EGLint alphaSize = getValue(config, EGL_ALPHA_SIZE);
478*35238bceSAndroid Build Coastguard Worker
479*35238bceSAndroid Build Coastguard Worker if (alphaSize < 0)
480*35238bceSAndroid Build Coastguard Worker {
481*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, alpha size must be zero or positive." << TestLog::EndMessage;
482*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid alpha size");
483*35238bceSAndroid Build Coastguard Worker }
484*35238bceSAndroid Build Coastguard Worker
485*35238bceSAndroid Build Coastguard Worker if (colorBufferType == EGL_RGB_BUFFER)
486*35238bceSAndroid Build Coastguard Worker {
487*35238bceSAndroid Build Coastguard Worker if (luminanceSize != 0)
488*35238bceSAndroid Build Coastguard Worker {
489*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, luminance size must be zero for an RGB buffer."
490*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
491*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid luminance size");
492*35238bceSAndroid Build Coastguard Worker }
493*35238bceSAndroid Build Coastguard Worker
494*35238bceSAndroid Build Coastguard Worker if (redSize <= 0 || greenSize <= 0 || blueSize <= 0)
495*35238bceSAndroid Build Coastguard Worker {
496*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, RGB component sizes must be positive for an RGB buffer."
497*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
498*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid color component size");
499*35238bceSAndroid Build Coastguard Worker }
500*35238bceSAndroid Build Coastguard Worker
501*35238bceSAndroid Build Coastguard Worker if (bufferSize != (redSize + greenSize + blueSize + alphaSize))
502*35238bceSAndroid Build Coastguard Worker {
503*35238bceSAndroid Build Coastguard Worker log << TestLog::Message
504*35238bceSAndroid Build Coastguard Worker << "Fail, buffer size must be equal to the sum of RGB component sizes and alpha size."
505*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
506*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid buffer size");
507*35238bceSAndroid Build Coastguard Worker }
508*35238bceSAndroid Build Coastguard Worker }
509*35238bceSAndroid Build Coastguard Worker else if (colorBufferType == EGL_LUMINANCE_BUFFER)
510*35238bceSAndroid Build Coastguard Worker {
511*35238bceSAndroid Build Coastguard Worker if (luminanceSize <= 0)
512*35238bceSAndroid Build Coastguard Worker {
513*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, luminance size must be positive for a luminance buffer."
514*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
515*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid luminance size");
516*35238bceSAndroid Build Coastguard Worker }
517*35238bceSAndroid Build Coastguard Worker
518*35238bceSAndroid Build Coastguard Worker if (redSize != 0 || greenSize != 0 || blueSize != 0)
519*35238bceSAndroid Build Coastguard Worker {
520*35238bceSAndroid Build Coastguard Worker log << TestLog::Message << "Fail, RGB component sizes must be zero for a luminance buffer."
521*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
522*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid color component size");
523*35238bceSAndroid Build Coastguard Worker }
524*35238bceSAndroid Build Coastguard Worker
525*35238bceSAndroid Build Coastguard Worker if (bufferSize != (luminanceSize + alphaSize))
526*35238bceSAndroid Build Coastguard Worker {
527*35238bceSAndroid Build Coastguard Worker log << TestLog::Message
528*35238bceSAndroid Build Coastguard Worker << "Fail, buffer size must be equal to the sum of luminance size and alpha size."
529*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
530*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid buffer size");
531*35238bceSAndroid Build Coastguard Worker }
532*35238bceSAndroid Build Coastguard Worker }
533*35238bceSAndroid Build Coastguard Worker }
534*35238bceSAndroid Build Coastguard Worker };
535*35238bceSAndroid Build Coastguard Worker
536*35238bceSAndroid Build Coastguard Worker class GetConfigAttribTransparentValueCase : public GetConfigAttribCase
537*35238bceSAndroid Build Coastguard Worker {
538*35238bceSAndroid Build Coastguard Worker public:
GetConfigAttribTransparentValueCase(EglTestContext & eglTestCtx,const char * name,const char * description)539*35238bceSAndroid Build Coastguard Worker GetConfigAttribTransparentValueCase(EglTestContext &eglTestCtx, const char *name, const char *description)
540*35238bceSAndroid Build Coastguard Worker : GetConfigAttribCase(eglTestCtx, name, description)
541*35238bceSAndroid Build Coastguard Worker {
542*35238bceSAndroid Build Coastguard Worker }
543*35238bceSAndroid Build Coastguard Worker
executeTest(EGLConfig config)544*35238bceSAndroid Build Coastguard Worker void executeTest(EGLConfig config)
545*35238bceSAndroid Build Coastguard Worker {
546*35238bceSAndroid Build Coastguard Worker TestLog &log = m_testCtx.getLog();
547*35238bceSAndroid Build Coastguard Worker
548*35238bceSAndroid Build Coastguard Worker const EGLint transparentType = getValue(config, EGL_TRANSPARENT_TYPE);
549*35238bceSAndroid Build Coastguard Worker const EGLint redValue = getValue(config, EGL_TRANSPARENT_RED_VALUE);
550*35238bceSAndroid Build Coastguard Worker const EGLint greenValue = getValue(config, EGL_TRANSPARENT_GREEN_VALUE);
551*35238bceSAndroid Build Coastguard Worker const EGLint blueValue = getValue(config, EGL_TRANSPARENT_BLUE_VALUE);
552*35238bceSAndroid Build Coastguard Worker
553*35238bceSAndroid Build Coastguard Worker const EGLint redSize = getValue(config, EGL_RED_SIZE);
554*35238bceSAndroid Build Coastguard Worker const EGLint greenSize = getValue(config, EGL_GREEN_SIZE);
555*35238bceSAndroid Build Coastguard Worker const EGLint blueSize = getValue(config, EGL_BLUE_SIZE);
556*35238bceSAndroid Build Coastguard Worker
557*35238bceSAndroid Build Coastguard Worker if (transparentType == EGL_TRANSPARENT_RGB)
558*35238bceSAndroid Build Coastguard Worker {
559*35238bceSAndroid Build Coastguard Worker if ((redValue < 0 || redValue >= (1 << redSize)) || (greenValue < 0 || greenValue >= (1 << greenSize)) ||
560*35238bceSAndroid Build Coastguard Worker (blueValue < 0 || blueValue >= (1 << blueSize)))
561*35238bceSAndroid Build Coastguard Worker {
562*35238bceSAndroid Build Coastguard Worker log << TestLog::Message
563*35238bceSAndroid Build Coastguard Worker << "Fail, transparent color values must lie between 0 and the maximum component value."
564*35238bceSAndroid Build Coastguard Worker << TestLog::EndMessage;
565*35238bceSAndroid Build Coastguard Worker m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Invalid transparent color value");
566*35238bceSAndroid Build Coastguard Worker }
567*35238bceSAndroid Build Coastguard Worker }
568*35238bceSAndroid Build Coastguard Worker }
569*35238bceSAndroid Build Coastguard Worker };
570*35238bceSAndroid Build Coastguard Worker
QueryConfigTests(EglTestContext & eglTestCtx)571*35238bceSAndroid Build Coastguard Worker QueryConfigTests::QueryConfigTests(EglTestContext &eglTestCtx)
572*35238bceSAndroid Build Coastguard Worker : TestCaseGroup(eglTestCtx, "query_config", "Surface config query tests")
573*35238bceSAndroid Build Coastguard Worker {
574*35238bceSAndroid Build Coastguard Worker }
575*35238bceSAndroid Build Coastguard Worker
~QueryConfigTests(void)576*35238bceSAndroid Build Coastguard Worker QueryConfigTests::~QueryConfigTests(void)
577*35238bceSAndroid Build Coastguard Worker {
578*35238bceSAndroid Build Coastguard Worker }
579*35238bceSAndroid Build Coastguard Worker
init(void)580*35238bceSAndroid Build Coastguard Worker void QueryConfigTests::init(void)
581*35238bceSAndroid Build Coastguard Worker {
582*35238bceSAndroid Build Coastguard Worker // eglGetGonfigs
583*35238bceSAndroid Build Coastguard Worker {
584*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *getConfigsGroup = new tcu::TestCaseGroup(m_testCtx, "get_configs", "eglGetConfigs tests");
585*35238bceSAndroid Build Coastguard Worker addChild(getConfigsGroup);
586*35238bceSAndroid Build Coastguard Worker
587*35238bceSAndroid Build Coastguard Worker getConfigsGroup->addChild(
588*35238bceSAndroid Build Coastguard Worker new GetConfigsBoundsCase(m_eglTestCtx, "get_configs_bounds", "eglGetConfigs bounds checking test"));
589*35238bceSAndroid Build Coastguard Worker }
590*35238bceSAndroid Build Coastguard Worker
591*35238bceSAndroid Build Coastguard Worker // eglGetConfigAttrib
592*35238bceSAndroid Build Coastguard Worker {
593*35238bceSAndroid Build Coastguard Worker static const struct
594*35238bceSAndroid Build Coastguard Worker {
595*35238bceSAndroid Build Coastguard Worker EGLenum attribute;
596*35238bceSAndroid Build Coastguard Worker const char *testName;
597*35238bceSAndroid Build Coastguard Worker } attributes[] = {
598*35238bceSAndroid Build Coastguard Worker {EGL_BUFFER_SIZE, "buffer_size"},
599*35238bceSAndroid Build Coastguard Worker {EGL_RED_SIZE, "red_size"},
600*35238bceSAndroid Build Coastguard Worker {EGL_GREEN_SIZE, "green_size"},
601*35238bceSAndroid Build Coastguard Worker {EGL_BLUE_SIZE, "blue_size"},
602*35238bceSAndroid Build Coastguard Worker {EGL_LUMINANCE_SIZE, "luminance_size"},
603*35238bceSAndroid Build Coastguard Worker {EGL_ALPHA_SIZE, "alpha_size"},
604*35238bceSAndroid Build Coastguard Worker {EGL_ALPHA_MASK_SIZE, "alpha_mask_size"},
605*35238bceSAndroid Build Coastguard Worker {EGL_BIND_TO_TEXTURE_RGB, "bind_to_texture_rgb"},
606*35238bceSAndroid Build Coastguard Worker {EGL_BIND_TO_TEXTURE_RGBA, "bind_to_texture_rgba"},
607*35238bceSAndroid Build Coastguard Worker {EGL_COLOR_BUFFER_TYPE, "color_buffer_type"},
608*35238bceSAndroid Build Coastguard Worker {EGL_CONFIG_CAVEAT, "config_caveat"},
609*35238bceSAndroid Build Coastguard Worker {EGL_CONFIG_ID, "config_id"},
610*35238bceSAndroid Build Coastguard Worker {EGL_CONFORMANT, "conformant"},
611*35238bceSAndroid Build Coastguard Worker {EGL_DEPTH_SIZE, "depth_size"},
612*35238bceSAndroid Build Coastguard Worker {EGL_LEVEL, "level"},
613*35238bceSAndroid Build Coastguard Worker {EGL_MAX_SWAP_INTERVAL, "max_swap_interval"},
614*35238bceSAndroid Build Coastguard Worker {EGL_MIN_SWAP_INTERVAL, "min_swap_interval"},
615*35238bceSAndroid Build Coastguard Worker {EGL_NATIVE_RENDERABLE, "native_renderable"},
616*35238bceSAndroid Build Coastguard Worker {EGL_NATIVE_VISUAL_TYPE, "native_visual_type"},
617*35238bceSAndroid Build Coastguard Worker {EGL_RENDERABLE_TYPE, "renderable_type"},
618*35238bceSAndroid Build Coastguard Worker {EGL_SAMPLE_BUFFERS, "sample_buffers"},
619*35238bceSAndroid Build Coastguard Worker {EGL_SAMPLES, "samples"},
620*35238bceSAndroid Build Coastguard Worker {EGL_STENCIL_SIZE, "stencil_size"},
621*35238bceSAndroid Build Coastguard Worker {EGL_SURFACE_TYPE, "surface_type"},
622*35238bceSAndroid Build Coastguard Worker {EGL_TRANSPARENT_TYPE, "transparent_type"},
623*35238bceSAndroid Build Coastguard Worker {EGL_TRANSPARENT_RED_VALUE, "transparent_red_value"},
624*35238bceSAndroid Build Coastguard Worker {EGL_TRANSPARENT_GREEN_VALUE, "transparent_green_value"},
625*35238bceSAndroid Build Coastguard Worker {EGL_TRANSPARENT_BLUE_VALUE, "transparent_blue_value"},
626*35238bceSAndroid Build Coastguard Worker {EGL_RECORDABLE_ANDROID, "recordable_android"},
627*35238bceSAndroid Build Coastguard Worker };
628*35238bceSAndroid Build Coastguard Worker
629*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *simpleGroup =
630*35238bceSAndroid Build Coastguard Worker new tcu::TestCaseGroup(m_testCtx, "get_config_attrib", "eglGetConfigAttrib() tests");
631*35238bceSAndroid Build Coastguard Worker addChild(simpleGroup);
632*35238bceSAndroid Build Coastguard Worker
633*35238bceSAndroid Build Coastguard Worker for (int ndx = 0; ndx < (int)DE_LENGTH_OF_ARRAY(attributes); ndx++)
634*35238bceSAndroid Build Coastguard Worker {
635*35238bceSAndroid Build Coastguard Worker simpleGroup->addChild(new GetConfigAttribSimpleCase(
636*35238bceSAndroid Build Coastguard Worker m_eglTestCtx, attributes[ndx].testName, "Simple attribute query case", attributes[ndx].attribute));
637*35238bceSAndroid Build Coastguard Worker }
638*35238bceSAndroid Build Coastguard Worker }
639*35238bceSAndroid Build Coastguard Worker
640*35238bceSAndroid Build Coastguard Worker // Attribute constraints
641*35238bceSAndroid Build Coastguard Worker {
642*35238bceSAndroid Build Coastguard Worker tcu::TestCaseGroup *constraintsGroup =
643*35238bceSAndroid Build Coastguard Worker new tcu::TestCaseGroup(m_testCtx, "constraints", "Attribute constraint tests");
644*35238bceSAndroid Build Coastguard Worker addChild(constraintsGroup);
645*35238bceSAndroid Build Coastguard Worker
646*35238bceSAndroid Build Coastguard Worker constraintsGroup->addChild(
647*35238bceSAndroid Build Coastguard Worker new GetConfigAttribBufferSizeCase(m_eglTestCtx, "color_buffer_size", "Color buffer component sizes"));
648*35238bceSAndroid Build Coastguard Worker constraintsGroup->addChild(
649*35238bceSAndroid Build Coastguard Worker new GetConfigAttribTransparentValueCase(m_eglTestCtx, "transparent_value", "Transparent color value"));
650*35238bceSAndroid Build Coastguard Worker }
651*35238bceSAndroid Build Coastguard Worker }
652*35238bceSAndroid Build Coastguard Worker
653*35238bceSAndroid Build Coastguard Worker } // namespace egl
654*35238bceSAndroid Build Coastguard Worker } // namespace deqp
655