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