13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program EGL Module
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ---------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief EGL tests
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglConfigList.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluStrUtil.hpp"
273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "egluUtil.hpp"
283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp"
293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector>
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing std::vector;
403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw;
413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
423c827367444ee418f129b2c238299f49d3264554Jarkko PoyryConfigList::ConfigList (EglTestContext& eglTestCtx)
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: TestCase(eglTestCtx, "configs", "Output the list of configs from EGL")
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
483c827367444ee418f129b2c238299f49d3264554Jarkko PoyryConfigList::~ConfigList (void)
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ConfigList::init (void)
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ConfigList::deinit (void)
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::TestNode::IterateResult ConfigList::iterate (void)
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const Library&		egl			= m_eglTestCtx.getLibrary();
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::TestLog&		log			= m_testCtx.getLog();
643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	EGLDisplay			display		= eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay());
653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	vector<EGLConfig>	configs		= eglu::getConfigs(egl, display);
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \todo [2011-03-23 pyry] Check error codes!
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \todo [kalle 10/08/2010] Get EGL version.
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	log.startEglConfigSet("EGL-configs", "List of all EGL configs");
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \todo [kalle 10/08/2010] Add validity checks for the values?
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \todo [kalle 10/08/2010] Adapt for different EGL versions
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (int i = 0; i < (int)configs.size(); i++)
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		qpEglConfigInfo info;
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint val = 0;
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
813c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_BUFFER_SIZE, &val);
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.bufferSize = val;
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_RED_SIZE, &val);
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.redSize = val;
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
873c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_GREEN_SIZE, &val);
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.greenSize = val;
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
903c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_BLUE_SIZE, &val);
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.blueSize = val;
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
933c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_LUMINANCE_SIZE, &val);
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.luminanceSize = val;
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_ALPHA_SIZE, &val);
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.alphaSize = val;
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
993c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_ALPHA_MASK_SIZE, &val);
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.alphaMaskSize = val;
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_BIND_TO_TEXTURE_RGB, &val);
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.bindToTextureRGB = val == EGL_TRUE ? DE_TRUE : DE_FALSE;
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_BIND_TO_TEXTURE_RGBA, &val);
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.bindToTextureRGBA = val == EGL_TRUE ? DE_TRUE : DE_FALSE;
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1083c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_COLOR_BUFFER_TYPE, &val);
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		std::string colorBufferType = de::toString(eglu::getColorBufferTypeStr(val));
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.colorBufferType = colorBufferType.c_str();
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_CONFIG_CAVEAT, &val);
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		std::string caveat = de::toString(eglu::getConfigCaveatStr(val));
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.configCaveat = caveat.c_str();
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_CONFIG_ID, &val);
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.configID = val;
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_CONFORMANT, &val);
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		std::string conformant = de::toString(eglu::getAPIBitsStr(val));
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.conformant = conformant.c_str();
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_DEPTH_SIZE, &val);
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.depthSize = val;
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1263c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_LEVEL, &val);
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.level = val;
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_MAX_PBUFFER_WIDTH, &val);
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.maxPBufferWidth = val;
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_MAX_PBUFFER_HEIGHT, &val);
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.maxPBufferHeight = val;
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1353c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_MAX_PBUFFER_PIXELS, &val);
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.maxPBufferPixels = val;
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_MAX_SWAP_INTERVAL, &val);
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.maxSwapInterval = val;
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_MIN_SWAP_INTERVAL, &val);
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.minSwapInterval = val;
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1443c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_NATIVE_RENDERABLE, &val);
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.nativeRenderable = val == EGL_TRUE ? DE_TRUE : DE_FALSE;
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_RENDERABLE_TYPE, &val);
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		std::string renderableTypes = de::toString(eglu::getAPIBitsStr(val));
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.renderableType = renderableTypes.c_str();
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_SAMPLE_BUFFERS, &val);
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.sampleBuffers = val;
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1543c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_SAMPLES, &val);
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.samples = val;
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_STENCIL_SIZE, &val);
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.stencilSize = val;
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1603c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_SURFACE_TYPE, &val);
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		std::string surfaceTypes = de::toString(eglu::getSurfaceBitsStr(val));
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.surfaceTypes = surfaceTypes.c_str();
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_TYPE, &val);
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		std::string transparentType = de::toString(eglu::getTransparentTypeStr(val));
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.transparentType = transparentType.c_str();
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_RED_VALUE, &val);
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.transparentRedValue = val;
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_GREEN_VALUE, &val);
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.transparentGreenValue = val;
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1743c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.getConfigAttrib(display, configs[i], EGL_TRANSPARENT_BLUE_VALUE, &val);
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		info.transparentBlueValue = val;
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log.writeEglConfig(&info);
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	log.endEglConfigSet();
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1813c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	egl.terminate(display);
1823c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	getTestContext().setTestResult(QP_TEST_RESULT_PASS, "");
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return TestNode::STOP;
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
190