1/*-------------------------------------------------------------------------
2 * drawElements Quality Program EGL Module
3 * ---------------------------------------
4 *
5 * Copyright 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief EGL tests
22 *//*--------------------------------------------------------------------*/
23
24#include "teglConfigList.hpp"
25#include "tcuTestLog.hpp"
26#include "egluStrUtil.hpp"
27#include "egluUtil.hpp"
28#include "eglwLibrary.hpp"
29#include "eglwEnums.hpp"
30#include "deStringUtil.hpp"
31
32#include <vector>
33
34namespace deqp
35{
36namespace egl
37{
38
39using std::vector;
40using namespace eglw;
41
42ConfigList::ConfigList (EglTestContext& eglTestCtx)
43	: TestCase(eglTestCtx, "configs", "Output the list of configs from EGL")
44
45{
46}
47
48ConfigList::~ConfigList (void)
49{
50}
51
52void ConfigList::init (void)
53{
54}
55
56void ConfigList::deinit (void)
57{
58}
59
60tcu::TestNode::IterateResult ConfigList::iterate (void)
61{
62	const Library&		egl			= m_eglTestCtx.getLibrary();
63	tcu::TestLog&		log			= m_testCtx.getLog();
64	EGLDisplay			display		= eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay());
65	vector<EGLConfig>	configs		= eglu::getConfigs(egl, display);
66
67	// \todo [2011-03-23 pyry] Check error codes!
68
69	// \todo [kalle 10/08/2010] Get EGL version.
70
71	log.startEglConfigSet("EGL-configs", "List of all EGL configs");
72
73	// \todo [kalle 10/08/2010] Add validity checks for the values?
74	// \todo [kalle 10/08/2010] Adapt for different EGL versions
75
76	for (int i = 0; i < (int)configs.size(); i++)
77	{
78		qpEglConfigInfo info;
79		EGLint val = 0;
80
81		egl.getConfigAttrib(display, configs[i], EGL_BUFFER_SIZE, &val);
82		info.bufferSize = val;
83
84		egl.getConfigAttrib(display, configs[i], EGL_RED_SIZE, &val);
85		info.redSize = val;
86
87		egl.getConfigAttrib(display, configs[i], EGL_GREEN_SIZE, &val);
88		info.greenSize = val;
89
90		egl.getConfigAttrib(display, configs[i], EGL_BLUE_SIZE, &val);
91		info.blueSize = val;
92
93		egl.getConfigAttrib(display, configs[i], EGL_LUMINANCE_SIZE, &val);
94		info.luminanceSize = val;
95
96		egl.getConfigAttrib(display, configs[i], EGL_ALPHA_SIZE, &val);
97		info.alphaSize = val;
98
99		egl.getConfigAttrib(display, configs[i], EGL_ALPHA_MASK_SIZE, &val);
100		info.alphaMaskSize = val;
101
102		egl.getConfigAttrib(display, configs[i], EGL_BIND_TO_TEXTURE_RGB, &val);
103		info.bindToTextureRGB = val == EGL_TRUE ? DE_TRUE : DE_FALSE;
104
105		egl.getConfigAttrib(display, configs[i], EGL_BIND_TO_TEXTURE_RGBA, &val);
106		info.bindToTextureRGBA = val == EGL_TRUE ? DE_TRUE : DE_FALSE;
107
108		egl.getConfigAttrib(display, configs[i], EGL_COLOR_BUFFER_TYPE, &val);
109		std::string colorBufferType = de::toString(eglu::getColorBufferTypeStr(val));
110		info.colorBufferType = colorBufferType.c_str();
111
112		egl.getConfigAttrib(display, configs[i], EGL_CONFIG_CAVEAT, &val);
113		std::string caveat = de::toString(eglu::getConfigCaveatStr(val));
114		info.configCaveat = caveat.c_str();
115
116		egl.getConfigAttrib(display, configs[i], EGL_CONFIG_ID, &val);
117		info.configID = val;
118
119		egl.getConfigAttrib(display, configs[i], EGL_CONFORMANT, &val);
120		std::string conformant = de::toString(eglu::getAPIBitsStr(val));
121		info.conformant = conformant.c_str();
122
123		egl.getConfigAttrib(display, configs[i], EGL_DEPTH_SIZE, &val);
124		info.depthSize = val;
125
126		egl.getConfigAttrib(display, configs[i], EGL_LEVEL, &val);
127		info.level = val;
128
129		egl.getConfigAttrib(display, configs[i], EGL_MAX_PBUFFER_WIDTH, &val);
130		info.maxPBufferWidth = val;
131
132		egl.getConfigAttrib(display, configs[i], EGL_MAX_PBUFFER_HEIGHT, &val);
133		info.maxPBufferHeight = val;
134
135		egl.getConfigAttrib(display, configs[i], EGL_MAX_PBUFFER_PIXELS, &val);
136		info.maxPBufferPixels = val;
137
138		egl.getConfigAttrib(display, configs[i], EGL_MAX_SWAP_INTERVAL, &val);
139		info.maxSwapInterval = val;
140
141		egl.getConfigAttrib(display, configs[i], EGL_MIN_SWAP_INTERVAL, &val);
142		info.minSwapInterval = val;
143
144		egl.getConfigAttrib(display, configs[i], EGL_NATIVE_RENDERABLE, &val);
145		info.nativeRenderable = val == EGL_TRUE ? DE_TRUE : DE_FALSE;
146
147		egl.getConfigAttrib(display, configs[i], EGL_RENDERABLE_TYPE, &val);
148		std::string renderableTypes = de::toString(eglu::getAPIBitsStr(val));
149		info.renderableType = renderableTypes.c_str();
150
151		egl.getConfigAttrib(display, configs[i], EGL_SAMPLE_BUFFERS, &val);
152		info.sampleBuffers = val;
153
154		egl.getConfigAttrib(display, configs[i], EGL_SAMPLES, &val);
155		info.samples = val;
156
157		egl.getConfigAttrib(display, configs[i], EGL_STENCIL_SIZE, &val);
158		info.stencilSize = val;
159
160		egl.getConfigAttrib(display, configs[i], EGL_SURFACE_TYPE, &val);
161		std::string surfaceTypes = de::toString(eglu::getSurfaceBitsStr(val));
162		info.surfaceTypes = surfaceTypes.c_str();
163
164		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_TYPE, &val);
165		std::string transparentType = de::toString(eglu::getTransparentTypeStr(val));
166		info.transparentType = transparentType.c_str();
167
168		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_RED_VALUE, &val);
169		info.transparentRedValue = val;
170
171		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_GREEN_VALUE, &val);
172		info.transparentGreenValue = val;
173
174		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_BLUE_VALUE, &val);
175		info.transparentBlueValue = val;
176
177		log.writeEglConfig(&info);
178	}
179	log.endEglConfigSet();
180
181	egl.terminate(display);
182
183	getTestContext().setTestResult(QP_TEST_RESULT_PASS, "");
184
185	return TestNode::STOP;
186}
187
188} // egl
189} // deqp
190