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 Simple Context construction test.
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglSimpleConfigCase.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuFormatUtil.hpp"
273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "egluUtil.hpp"
283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp"
293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp"
303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "deStringUtil.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector;
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string;
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog;
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing eglu::ConfigInfo;
413c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw;
423c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglu;
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
443c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosSimpleConfigCase::SimpleConfigCase (EglTestContext& eglTestCtx, const char* name, const char* description, const FilterList& filters)
453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	: TestCase	(eglTestCtx, name, description)
463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	, m_filters	(filters)
473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	, m_display	(EGL_NO_DISPLAY)
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
513c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySimpleConfigCase::~SimpleConfigCase (void)
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid SimpleConfigCase::init (void)
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	const Library&		egl		= m_eglTestCtx.getLibrary();
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	DE_ASSERT(m_display == EGL_NO_DISPLAY && m_configs.empty());
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	m_display	= getAndInitDisplay(m_eglTestCtx.getNativeDisplay());
623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	m_configs	= chooseConfigs(egl, m_display, m_filters);
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	// Log matching configs.
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
663c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		vector<EGLint> configIds(m_configs.size());
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		for (size_t ndx = 0; ndx < m_configs.size(); ndx++)
693c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos			configIds[ndx] = getConfigID(egl, m_display, m_configs[ndx]);
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		m_testCtx.getLog() << TestLog::Message << "Compatible configs: " << tcu::formatArray(configIds.begin(), configIds.end()) << TestLog::EndMessage;
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (m_configs.empty())
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
763c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		egl.terminate(m_display);
773c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		m_display = EGL_NO_DISPLAY;
783c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		TCU_THROW(NotSupportedError, "No compatible configs found");
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Init config iter
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_configIter = m_configs.begin();
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Init test case result to Pass
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid SimpleConfigCase::deinit (void)
893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos{
908e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos	if (m_display != EGL_NO_DISPLAY)
918e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos	{
928e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos		m_eglTestCtx.getLibrary().terminate(m_display);
938e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos		m_display = EGL_NO_DISPLAY;
948e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos	}
953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	m_configs.clear();
963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos}
973c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
983c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySimpleConfigCase::IterateResult SimpleConfigCase::iterate (void)
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_ASSERT(m_configIter != m_configs.end());
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	EGLConfig	config	= *m_configIter++;
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	try
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		executeForConfig(m_display, config);
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	catch (const tcu::TestError& e)
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.getLog() << e;
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// \note Other errors are handled by framework (resource / internal errors).
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return (m_configIter != m_configs.end()) ? CONTINUE : STOP;
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1183c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulostemplate <int Red, int Green, int Blue, int Alpha>
1193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool colorBits (const eglu::CandidateConfig& c)
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	return c.redSize()		== Red		&&
1223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		   c.greenSize()	== Green	&&
1233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		   c.blueSize()		== Blue		&&
1243c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		   c.alphaSize()	== Alpha;
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulostemplate <int Red, int Green, int Blue, int Alpha>
1283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool notColorBits (const eglu::CandidateConfig& c)
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	return c.redSize()		!= Red		||
1313c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		   c.greenSize()	!= Green	||
1323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		   c.blueSize()		!= Blue		||
1333c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		   c.alphaSize()	!= Alpha;
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool	hasDepth	(const eglu::CandidateConfig& c)	{ return c.depthSize() > 0;		}
1373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool	noDepth		(const eglu::CandidateConfig& c)	{ return c.depthSize() == 0;	}
1383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool	hasStencil	(const eglu::CandidateConfig& c)	{ return c.stencilSize() > 0;	}
1393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic bool	noStencil	(const eglu::CandidateConfig& c)	{ return c.stencilSize() == 0;	}
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
141a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvistatic bool isConformant (const eglu::CandidateConfig& c)
142a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi{
143a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi	return c.get(EGL_CONFIG_CAVEAT) != EGL_NON_CONFORMANT_CONFIG;
144a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi}
145a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi
1463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid getDefaultFilterLists (vector<NamedFilterList>& lists, const FilterList& baseFilters)
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	static const struct
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		const char*			name;
1513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		eglu::ConfigFilter	filter;
1523c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	} s_colorRules[] =
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1543c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "rgb565",		colorBits<5, 6, 5, 0> },
1553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "rgb888",		colorBits<8, 8, 8, 0> },
1563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "rgba4444",	colorBits<4, 4, 4, 4> },
1573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "rgba5551",	colorBits<5, 5, 5, 1> },
1583c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "rgba8888",	colorBits<8, 8, 8, 8> }
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	static const struct
1623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	{
1633c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		const char*			name;
1643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		eglu::ConfigFilter	filter;
1653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	} s_depthRules[] =
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "no_depth",	noDepth		},
1683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "depth",		hasDepth	},
1693c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	};
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	static const struct
1723c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	{
1733c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		const char*			name;
1743c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		eglu::ConfigFilter	filter;
1753c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	} s_stencilRules[] =
1763c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	{
1773c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "no_stencil",	noStencil	},
1783c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		{ "stencil",	hasStencil	},
1793c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	};
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1813c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	for (int colorRuleNdx = 0; colorRuleNdx < DE_LENGTH_OF_ARRAY(s_colorRules); colorRuleNdx++)
1823c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	{
1833c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		for (int depthRuleNdx = 0; depthRuleNdx < DE_LENGTH_OF_ARRAY(s_depthRules); depthRuleNdx++)
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
1853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos			for (int stencilRuleNdx = 0; stencilRuleNdx < DE_LENGTH_OF_ARRAY(s_stencilRules); stencilRuleNdx++)
1863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos			{
1873c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				const string		name		= string(s_colorRules[colorRuleNdx].name) + "_" + s_depthRules[depthRuleNdx].name + "_" + s_stencilRules[stencilRuleNdx].name;
1883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				NamedFilterList		filters		(name.c_str(), "");
1893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
1903c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				filters << baseFilters
1913c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos						<< s_colorRules[colorRuleNdx].filter
1923c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos						<< s_depthRules[depthRuleNdx].filter
193a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi						<< s_stencilRules[stencilRuleNdx].filter
194a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi						<< isConformant;
1953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
1963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				lists.push_back(filters);
1973c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos			}
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos	// Build "other" set - not configs that don't match any of known color rules
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2033c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		NamedFilterList		filters		("other", "All other configs");
2043c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
2053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		// \todo [2014-12-18 pyry] Optimize rules
2063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		filters << baseFilters
2073c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				<< notColorBits<5, 6, 5, 0>
2083c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				<< notColorBits<8, 8, 8, 0>
2093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				<< notColorBits<4, 4, 4, 4>
2103c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos				<< notColorBits<5, 5, 5, 1>
211a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi				<< notColorBits<8, 8, 8, 8>
212a396e5b66bc656e29921fb16d105a9de1908c5c5Mika Isojärvi				<< isConformant;
2133c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos
2143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos		lists.push_back(filters);
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
220