Home | History | Annotate | Download | only in egl
      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 Negative API Tests.
     22  *//*--------------------------------------------------------------------*/
     23 
     24 #include "teglNegativeApiTests.hpp"
     25 #include "teglApiCase.hpp"
     26 
     27 #include "egluNativeDisplay.hpp"
     28 #include "egluNativeWindow.hpp"
     29 #include "egluUtil.hpp"
     30 #include "egluUtil.hpp"
     31 #include "egluUnique.hpp"
     32 
     33 #include "eglwLibrary.hpp"
     34 
     35 #include <memory>
     36 
     37 using tcu::TestLog;
     38 
     39 namespace deqp
     40 {
     41 namespace egl
     42 {
     43 
     44 using namespace eglw;
     45 
     46 template <deUint32 Type>
     47 static bool renderable (const eglu::CandidateConfig& c)
     48 {
     49 	return (c.renderableType() & Type) == Type;
     50 }
     51 
     52 template <deUint32 Type>
     53 static bool notRenderable (const eglu::CandidateConfig& c)
     54 {
     55 	return (c.renderableType() & Type) == 0;
     56 }
     57 
     58 template <deUint32 Bits>
     59 static bool surfaceBits (const eglu::CandidateConfig& c)
     60 {
     61 	return (c.surfaceType() & Bits) == Bits;
     62 }
     63 
     64 template <deUint32 Bits>
     65 static bool notSurfaceBits (const eglu::CandidateConfig& c)
     66 {
     67 	return (c.surfaceType() & Bits) == 0;
     68 }
     69 
     70 NegativeApiTests::NegativeApiTests (EglTestContext& eglTestCtx)
     71 	: TestCaseGroup(eglTestCtx, "negative_api", "Negative API Tests")
     72 {
     73 }
     74 
     75 NegativeApiTests::~NegativeApiTests (void)
     76 {
     77 }
     78 
     79 void NegativeApiTests::init (void)
     80 {
     81 	// \todo [2012-10-02 pyry] Add tests for EGL_NOT_INITIALIZED to all functions taking in EGLDisplay
     82 	// \todo [2012-10-02 pyry] Implement negative cases for following non-trivial cases:
     83 	//  * eglBindTexImage()
     84 	//    - EGL_BAD_ACCESS is generated if buffer is already bound to a texture
     85 	//    - EGL_BAD_MATCH is generated if the surface attribute EGL_TEXTURE_FORMAT is set to EGL_NO_TEXTURE
     86 	//    - EGL_BAD_MATCH is generated if buffer is not a valid buffer (currently only EGL_BACK_BUFFER may be specified)
     87 	//    - EGL_BAD_SURFACE is generated if surface is not a pbuffer surface supporting texture binding
     88 	//  * eglCopyBuffers()
     89 	//    - EGL_BAD_NATIVE_PIXMAP is generated if the implementation does not support native pixmaps
     90 	//    - EGL_BAD_NATIVE_PIXMAP may be generated if native_pixmap is not a valid native pixmap
     91 	//    - EGL_BAD_MATCH is generated if the format of native_pixmap is not compatible with the color buffer of surface
     92 	//  * eglCreateContext()
     93 	//    - EGL_BAD_MATCH is generated if the current rendering API is EGL_NONE
     94 	//	  - EGL_BAD_MATCH is generated if the server context state for share_context exists in an address space which cannot be shared with the newly created context
     95 	//	  - EGL_BAD_CONTEXT is generated if share_context is not an EGL rendering context of the same client API type as the newly created context and is not EGL_NO_CONTEXT
     96 	//  * eglCreatePbufferFromClientBuffer()
     97 	//    - various BAD_MATCH, BAD_ACCESS etc. conditions
     98 	//  * eglCreatePbufferSurface()
     99 	//    - EGL_BAD_MATCH is generated if the EGL_TEXTURE_FORMAT attribute is not EGL_NO_TEXTURE, and EGL_WIDTH and/or EGL_HEIGHT specify an invalid size
    100 	//  * eglCreatePixmapSurface()
    101 	//    - EGL_BAD_ATTRIBUTE is generated if attrib_list contains an invalid pixmap attribute
    102 	//    - EGL_BAD_MATCH is generated if the attributes of native_pixmap do not correspond to config or if config does not support rendering to pixmaps
    103 	//    - EGL_BAD_MATCH is generated if config does not support the specified OpenVG alpha format attribute or colorspace attribute
    104 	//  * eglCreateWindowSurface()
    105 	//    - EGL_BAD_ATTRIBUTE is generated if attrib_list contains an invalid window attribute
    106 	//    - EGL_BAD_MATCH is generated if the attributes of native_window do not correspond to config or if config does not support rendering to windows
    107 	//    - EGL_BAD_MATCH is generated if config does not support the specified OpenVG alpha format attribute or colorspace attribute
    108 	//  * eglMakeCurrent()
    109 	//    - EGL_BAD_MATCH is generated if draw or read are not compatible with context
    110 	//    - EGL_BAD_MATCH is generated if context is set to EGL_NO_CONTEXT and draw or read are not set to EGL_NO_SURFACE
    111 	//    - EGL_BAD_MATCH is generated if draw or read are set to EGL_NO_SURFACE and context is not set to EGL_NO_CONTEXT
    112 	//    - EGL_BAD_ACCESS is generated if context is current to some other thread
    113 	//    - EGL_BAD_NATIVE_PIXMAP may be generated if a native pixmap underlying either draw or read is no longer valid
    114 	//    - EGL_BAD_NATIVE_WINDOW may be generated if a native window underlying either draw or read is no longer valid
    115 	//  * eglReleaseTexImage()
    116 	//    - EGL_BAD_MATCH is generated if buffer is not a valid buffer (currently only EGL_BACK_BUFFER may be specified)
    117 	//  * eglSwapInterval()
    118 	//    - EGL_BAD_SURFACE is generated if there is no surface bound to the current context
    119 	//  * eglWaitNative()
    120 	//    - EGL_BAD_CURRENT_SURFACE is generated if the surface associated with the current context has a native window or pixmap, and that window or pixmap is no longer valid
    121 
    122 	using namespace eglw;
    123 	using namespace eglu;
    124 
    125 	static const EGLint				s_emptyAttribList[]			= { EGL_NONE };
    126 	static const EGLint				s_es1ContextAttribList[]	= { EGL_CONTEXT_CLIENT_VERSION, 1, EGL_NONE };
    127 	static const EGLint				s_es2ContextAttribList[]	= { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
    128 
    129 	static const EGLenum			s_renderAPIs[]				= { EGL_OPENGL_API, EGL_OPENGL_ES_API, EGL_OPENVG_API };
    130 	static const eglu::ConfigFilter	s_renderAPIFilters[]		= { renderable<EGL_OPENGL_BIT>, renderable<EGL_OPENGL_ES_BIT>, renderable<EGL_OPENVG_BIT> };
    131 
    132 	TEGL_ADD_API_CASE(bind_api, "eglBindAPI() negative tests",
    133 		{
    134 			TestLog& log = m_testCtx.getLog();
    135 			log << TestLog::Section("Test1", "EGL_BAD_PARAMETER is generated if api is not one of the accepted tokens");
    136 
    137 			expectFalse(eglBindAPI(0));
    138 			expectError(EGL_BAD_PARAMETER);
    139 
    140 			expectFalse(eglBindAPI(0xfdfdfdfd));
    141 			expectError(EGL_BAD_PARAMETER);
    142 
    143 			expectFalse(eglBindAPI((EGLenum)0xffffffff));
    144 			expectError(EGL_BAD_PARAMETER);
    145 
    146 			log << TestLog::EndSection;
    147 
    148 			log << TestLog::Section("Test2", "EGL_BAD_PARAMETER is generated if the specified client API is not supported by the EGL display, or no configuration is provided for the specified API.");
    149 
    150 			for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_renderAPIs); ndx++)
    151 			{
    152 				if (!isAPISupported(s_renderAPIs[ndx]))
    153 				{
    154 					if (!eglBindAPI(s_renderAPIs[ndx]))
    155 						expectError(EGL_BAD_PARAMETER);
    156 					else
    157 					{
    158 						EGLConfig eglConfig;
    159 						expectFalse(getConfig(&eglConfig, FilterList() << s_renderAPIFilters[ndx]));
    160 					}
    161 				}
    162 			}
    163 
    164 			log << TestLog::EndSection;
    165 		});
    166 
    167 	TEGL_ADD_API_CASE(bind_tex_image, "eglBindTexImage() negative tests",
    168 		{
    169 			TestLog&	log			= m_testCtx.getLog();
    170 			EGLDisplay	display		= getDisplay();
    171 
    172 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    173 
    174 			expectFalse(eglBindTexImage(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_BACK_BUFFER));
    175 			expectError(EGL_BAD_DISPLAY);
    176 
    177 			expectFalse(eglBindTexImage((EGLDisplay)-1, EGL_NO_SURFACE, EGL_BACK_BUFFER));
    178 			expectError(EGL_BAD_DISPLAY);
    179 
    180 			log << TestLog::EndSection;
    181 
    182 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
    183 
    184 			expectFalse(eglBindTexImage(display, EGL_NO_SURFACE, EGL_BACK_BUFFER));
    185 			expectError(EGL_BAD_SURFACE);
    186 
    187 			expectFalse(eglBindTexImage(display, (EGLSurface)-1, EGL_BACK_BUFFER));
    188 			expectError(EGL_BAD_SURFACE);
    189 
    190 			log << TestLog::EndSection;
    191 		});
    192 
    193 	static const EGLint s_validGenericPbufferAttrib[] = { EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    194 
    195 	TEGL_ADD_API_CASE(copy_buffers, "eglCopyBuffers() negative tests",
    196 		{
    197 			TestLog&							log				= m_testCtx.getLog();
    198 			const eglw::Library&				egl				= m_eglTestCtx.getLibrary();
    199 			EGLDisplay							display			= getDisplay();
    200 			const eglu::NativePixmapFactory&	factory			= eglu::selectNativePixmapFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine());
    201 			de::UniquePtr<eglu::NativePixmap>	pixmap			(factory.createPixmap(&m_eglTestCtx.getNativeDisplay(), 64, 64));
    202 			EGLConfig							config;
    203 
    204 			{
    205 				if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
    206 				{
    207 					eglu::UniqueSurface	surface	(egl, display, egl.createPbufferSurface(display, config, s_validGenericPbufferAttrib));
    208 
    209 					log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    210 
    211 					expectFalse(eglCopyBuffers(EGL_NO_DISPLAY, EGL_NO_SURFACE, pixmap->getLegacyNative()));
    212 					expectError(EGL_BAD_DISPLAY);
    213 
    214 					expectFalse(eglCopyBuffers((EGLDisplay)-1, EGL_NO_SURFACE, pixmap->getLegacyNative()));
    215 					expectError(EGL_BAD_DISPLAY);
    216 
    217 					log << TestLog::EndSection;
    218 				}
    219 			}
    220 
    221 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
    222 
    223 			expectFalse(eglCopyBuffers(display, EGL_NO_SURFACE, pixmap->getLegacyNative()));
    224 			expectError(EGL_BAD_SURFACE);
    225 
    226 			expectFalse(eglCopyBuffers(display, (EGLSurface)-1, pixmap->getLegacyNative()));
    227 			expectError(EGL_BAD_SURFACE);
    228 
    229 			log << TestLog::EndSection;
    230 		});
    231 
    232 	static const EGLint s_invalidChooseConfigAttribList0[]	= { 0, EGL_NONE };
    233 	static const EGLint s_invalidChooseConfigAttribList1[]	= { (EGLint)0xffffffff };
    234 	static const EGLint s_invalidChooseConfigAttribList2[]	= { EGL_BIND_TO_TEXTURE_RGB, 4, EGL_NONE };
    235 	static const EGLint s_invalidChooseConfigAttribList3[]	= { EGL_BIND_TO_TEXTURE_RGBA, 5, EGL_NONE };
    236 	static const EGLint s_invalidChooseConfigAttribList4[]	= { EGL_COLOR_BUFFER_TYPE, 0, EGL_NONE };
    237 	static const EGLint s_invalidChooseConfigAttribList5[]	= { EGL_NATIVE_RENDERABLE, 6, EGL_NONE };
    238 	static const EGLint s_invalidChooseConfigAttribList6[]	= { EGL_TRANSPARENT_TYPE, 6, EGL_NONE };
    239 	static const EGLint* s_invalidChooseConfigAttribLists[] =
    240 	{
    241 		&s_invalidChooseConfigAttribList0[0],
    242 		&s_invalidChooseConfigAttribList1[0],
    243 		&s_invalidChooseConfigAttribList2[0],
    244 		&s_invalidChooseConfigAttribList3[0],
    245 		&s_invalidChooseConfigAttribList4[0],
    246 		&s_invalidChooseConfigAttribList5[0],
    247 		&s_invalidChooseConfigAttribList6[0]
    248 	};
    249 
    250 	TEGL_ADD_API_CASE(choose_config, "eglChooseConfig() negative tests",
    251 		{
    252 			TestLog&	log			= m_testCtx.getLog();
    253 			EGLDisplay	display		= getDisplay();
    254 			EGLConfig	configs[1];
    255 			EGLint		numConfigs;
    256 
    257 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    258 
    259 			expectFalse(eglChooseConfig(EGL_NO_DISPLAY, s_emptyAttribList, &configs[0], DE_LENGTH_OF_ARRAY(configs), &numConfigs));
    260 			expectError(EGL_BAD_DISPLAY);
    261 
    262 			expectFalse(eglChooseConfig((EGLDisplay)-1, s_emptyAttribList, &configs[0], DE_LENGTH_OF_ARRAY(configs), &numConfigs));
    263 			expectError(EGL_BAD_DISPLAY);
    264 
    265 			log << TestLog::EndSection;
    266 
    267 			log << TestLog::Section("Test2", "EGL_BAD_ATTRIBUTE is generated if attribute_list contains an invalid frame buffer configuration attribute");
    268 
    269 			for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_invalidChooseConfigAttribLists); ndx++)
    270 			{
    271 				expectFalse(eglChooseConfig(display, s_invalidChooseConfigAttribLists[ndx], &configs[0], DE_LENGTH_OF_ARRAY(configs), &numConfigs));
    272 				expectError(EGL_BAD_ATTRIBUTE);
    273 			}
    274 
    275 			log << TestLog::EndSection;
    276 
    277 			log << TestLog::Section("Test3", "EGL_BAD_PARAMETER is generated if num_config is NULL");
    278 
    279 			expectFalse(eglChooseConfig(display, s_emptyAttribList, &configs[0], DE_LENGTH_OF_ARRAY(configs), DE_NULL));
    280 			expectError(EGL_BAD_PARAMETER);
    281 
    282 			log << TestLog::EndSection;
    283 		});
    284 
    285 	static const EGLint s_invalidCreateContextAttribList0[] = { 0, EGL_NONE };
    286 	static const EGLint s_invalidCreateContextAttribList1[] = { (EGLint)0xffffffff };
    287 
    288 	TEGL_ADD_API_CASE(create_context, "eglCreateContext() negative tests",
    289 		{
    290 			TestLog&	log			= m_testCtx.getLog();
    291 			EGLDisplay	display		= getDisplay();
    292 
    293 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    294 
    295 			expectNoContext(eglCreateContext(EGL_NO_DISPLAY, DE_NULL, EGL_NO_CONTEXT, s_emptyAttribList));
    296 			expectError(EGL_BAD_DISPLAY);
    297 
    298 			expectNoContext(eglCreateContext((EGLDisplay)-1, DE_NULL, EGL_NO_CONTEXT, s_emptyAttribList));
    299 			expectError(EGL_BAD_DISPLAY);
    300 
    301 			log << TestLog::EndSection;
    302 
    303 			log << TestLog::Section("Test2", "EGL_BAD_CONFIG is generated if config is not an EGL frame buffer configuration");
    304 
    305 			expectNoContext(eglCreateContext(display, (EGLConfig)-1, EGL_NO_CONTEXT, s_emptyAttribList));
    306 			expectError(EGL_BAD_CONFIG);
    307 
    308 			log << TestLog::EndSection;
    309 
    310 			log << TestLog::Section("Test3", "EGL_BAD_CONFIG is generated if config does not support the current rendering API");
    311 
    312 			if (isAPISupported(EGL_OPENGL_API))
    313 			{
    314 				EGLConfig es1OnlyConfig;
    315 				if (getConfig(&es1OnlyConfig, FilterList() << renderable<EGL_OPENGL_ES_BIT> << notRenderable<EGL_OPENGL_BIT>))
    316 				{
    317 					expectTrue(eglBindAPI(EGL_OPENGL_API));
    318 					expectNoContext(eglCreateContext(display, es1OnlyConfig, EGL_NO_CONTEXT, s_es1ContextAttribList));
    319 					expectError(EGL_BAD_CONFIG);
    320 				}
    321 
    322 				EGLConfig es2OnlyConfig;
    323 				if (getConfig(&es2OnlyConfig, FilterList() << renderable<EGL_OPENGL_ES2_BIT> << notRenderable<EGL_OPENGL_BIT>))
    324 				{
    325 					expectTrue(eglBindAPI(EGL_OPENGL_API));
    326 					expectNoContext(eglCreateContext(display, es2OnlyConfig, EGL_NO_CONTEXT, s_es2ContextAttribList));
    327 					expectError(EGL_BAD_CONFIG);
    328 				}
    329 
    330 				EGLConfig vgOnlyConfig;
    331 				if (getConfig(&vgOnlyConfig, FilterList() << renderable<EGL_OPENVG_BIT> << notRenderable<EGL_OPENGL_BIT>))
    332 				{
    333 					expectTrue(eglBindAPI(EGL_OPENGL_API));
    334 					expectNoContext(eglCreateContext(display, vgOnlyConfig, EGL_NO_CONTEXT, s_emptyAttribList));
    335 					expectError(EGL_BAD_CONFIG);
    336 				}
    337 			}
    338 
    339 			if (isAPISupported(EGL_OPENGL_ES_API))
    340 			{
    341 				EGLConfig glOnlyConfig;
    342 				if (getConfig(&glOnlyConfig, FilterList() << renderable<EGL_OPENGL_BIT> << notRenderable<EGL_OPENGL_ES_BIT|EGL_OPENGL_ES2_BIT>))
    343 				{
    344 					expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    345 					expectNoContext(eglCreateContext(display, glOnlyConfig, EGL_NO_CONTEXT, s_emptyAttribList));
    346 					expectError(EGL_BAD_CONFIG);
    347 				}
    348 
    349 				EGLConfig vgOnlyConfig;
    350 				if (getConfig(&vgOnlyConfig, FilterList() << renderable<EGL_OPENVG_BIT> << notRenderable<EGL_OPENGL_ES_BIT|EGL_OPENGL_ES2_BIT>))
    351 				{
    352 					expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    353 					expectNoContext(eglCreateContext(display, vgOnlyConfig, EGL_NO_CONTEXT, s_emptyAttribList));
    354 					expectError(EGL_BAD_CONFIG);
    355 				}
    356 			}
    357 
    358 			if (isAPISupported(EGL_OPENVG_API))
    359 			{
    360 				EGLConfig glOnlyConfig;
    361 				if (getConfig(&glOnlyConfig, FilterList() << renderable<EGL_OPENGL_BIT> << notRenderable<EGL_OPENVG_BIT>))
    362 				{
    363 					expectTrue(eglBindAPI(EGL_OPENVG_API));
    364 					expectNoContext(eglCreateContext(display, glOnlyConfig, EGL_NO_CONTEXT, s_emptyAttribList));
    365 					expectError(EGL_BAD_CONFIG);
    366 				}
    367 
    368 				EGLConfig es1OnlyConfig;
    369 				if (getConfig(&es1OnlyConfig, FilterList() << renderable<EGL_OPENGL_ES_BIT> << notRenderable<EGL_OPENVG_BIT>))
    370 				{
    371 					expectTrue(eglBindAPI(EGL_OPENVG_API));
    372 					expectNoContext(eglCreateContext(display, es1OnlyConfig, EGL_NO_CONTEXT, s_es1ContextAttribList));
    373 					expectError(EGL_BAD_CONFIG);
    374 				}
    375 
    376 				EGLConfig es2OnlyConfig;
    377 				if (getConfig(&es2OnlyConfig, FilterList() << renderable<EGL_OPENGL_ES2_BIT> << notRenderable<EGL_OPENVG_BIT>))
    378 				{
    379 					expectTrue(eglBindAPI(EGL_OPENVG_API));
    380 					expectNoContext(eglCreateContext(display, es2OnlyConfig, EGL_NO_CONTEXT, s_es2ContextAttribList));
    381 					expectError(EGL_BAD_CONFIG);
    382 				}
    383 			}
    384 
    385 			log << TestLog::EndSection;
    386 
    387 			log << TestLog::Section("Test4", "EGL_BAD_CONFIG or EGL_BAD_MATCH is generated if OpenGL ES 1.x context is requested and EGL_RENDERABLE_TYPE attribute of config does not contain EGL_OPENGL_ES_BIT");
    388 
    389 			if (isAPISupported(EGL_OPENGL_ES_API))
    390 			{
    391 				EGLConfig notES1Config;
    392 				if (getConfig(&notES1Config, FilterList() << notRenderable<EGL_OPENGL_ES_BIT>))
    393 				{
    394 					// EGL 1.4, EGL 1.5, and EGL_KHR_create_context contain contradictory language about the expected error.
    395 					Version version = eglu::getVersion(m_eglTestCtx.getLibrary(), display);
    396 					bool hasKhrCreateContext = eglu::hasExtension(m_eglTestCtx.getLibrary(), display, "EGL_KHR_create_context");
    397 
    398 					expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    399 					expectNoContext(eglCreateContext(display, notES1Config, EGL_NO_CONTEXT, s_es1ContextAttribList));
    400 					if (hasKhrCreateContext)
    401 						expectEitherError(EGL_BAD_CONFIG, EGL_BAD_MATCH);
    402 					else
    403 					{
    404 						if (version >= eglu::Version(1, 5))
    405 							expectError(EGL_BAD_MATCH);
    406 						else
    407 							expectError(EGL_BAD_CONFIG);
    408 					}
    409 				}
    410 			}
    411 
    412 			log << TestLog::EndSection;
    413 
    414 			log << TestLog::Section("Test5", "EGL_BAD_CONFIG or EGL_BAD_MATCH is generated if OpenGL ES 2.x context is requested and EGL_RENDERABLE_TYPE attribute of config does not contain EGL_OPENGL_ES2_BIT");
    415 
    416 			if (isAPISupported(EGL_OPENGL_ES_API))
    417 			{
    418 				EGLConfig notES2Config;
    419 				if (getConfig(&notES2Config, FilterList() << notRenderable<EGL_OPENGL_ES2_BIT>))
    420 				{
    421 					// EGL 1.4, EGL 1.5, and EGL_KHR_create_context contain contradictory language about the expected error.
    422 					Version version = eglu::getVersion(m_eglTestCtx.getLibrary(), display);
    423 					bool hasKhrCreateContext = eglu::hasExtension(m_eglTestCtx.getLibrary(), display, "EGL_KHR_create_context");
    424 
    425 					expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    426 					expectNoContext(eglCreateContext(display, notES2Config, EGL_NO_CONTEXT, s_es2ContextAttribList));
    427 					if (hasKhrCreateContext)
    428 						expectEitherError(EGL_BAD_CONFIG, EGL_BAD_MATCH);
    429 					else
    430 					{
    431 						if (version >= eglu::Version(1, 5))
    432 							expectError(EGL_BAD_MATCH);
    433 						else
    434 							expectError(EGL_BAD_CONFIG);
    435 					}
    436 				}
    437 			}
    438 
    439 			log << TestLog::EndSection;
    440 
    441 			log << TestLog::Section("Test6", "EGL_BAD_ATTRIBUTE is generated if attrib_list contains an invalid context attribute");
    442 
    443 			if (isAPISupported(EGL_OPENGL_API) && !eglu::hasExtension(m_eglTestCtx.getLibrary(), display, "EGL_KHR_create_context"))
    444 			{
    445 				EGLConfig glConfig;
    446 				if (getConfig(&glConfig, FilterList() << renderable<EGL_OPENGL_BIT>))
    447 				{
    448 					expectTrue(eglBindAPI(EGL_OPENGL_API));
    449 					expectNoContext(eglCreateContext(display, glConfig, EGL_NO_CONTEXT, s_es1ContextAttribList));
    450 					expectError(EGL_BAD_ATTRIBUTE);
    451 				}
    452 			}
    453 
    454 			if (isAPISupported(EGL_OPENVG_API))
    455 			{
    456 				EGLConfig vgConfig;
    457 				if (getConfig(&vgConfig, FilterList() << renderable<EGL_OPENVG_BIT>))
    458 				{
    459 					expectTrue(eglBindAPI(EGL_OPENVG_API));
    460 					expectNoContext(eglCreateContext(display, vgConfig, EGL_NO_CONTEXT, s_es1ContextAttribList));
    461 					expectError(EGL_BAD_ATTRIBUTE);
    462 				}
    463 			}
    464 
    465 			if (isAPISupported(EGL_OPENGL_ES_API))
    466 			{
    467 				bool		gotConfig	= false;
    468 				EGLConfig	esConfig;
    469 
    470 				gotConfig = getConfig(&esConfig, FilterList() << renderable<EGL_OPENGL_ES_BIT>) ||
    471 							getConfig(&esConfig, FilterList() << renderable<EGL_OPENGL_ES2_BIT>);
    472 
    473 				if (gotConfig)
    474 				{
    475 					expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    476 					expectNoContext(eglCreateContext(display, esConfig, EGL_NO_CONTEXT, s_invalidCreateContextAttribList0));
    477 					expectError(EGL_BAD_ATTRIBUTE);
    478 					expectNoContext(eglCreateContext(display, esConfig, EGL_NO_CONTEXT, s_invalidCreateContextAttribList1));
    479 					expectError(EGL_BAD_ATTRIBUTE);
    480 				}
    481 			}
    482 
    483 			log << TestLog::EndSection;
    484 		});
    485 
    486 	TEGL_ADD_API_CASE(create_pbuffer_from_client_buffer, "eglCreatePbufferFromClientBuffer() negative tests",
    487 		{
    488 			TestLog&	log			= m_testCtx.getLog();
    489 			EGLDisplay	display		= getDisplay();
    490 			EGLConfig	anyConfig;
    491 			EGLint		unused		= 0;
    492 
    493 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    494 
    495 			expectNoSurface(eglCreatePbufferFromClientBuffer(EGL_NO_DISPLAY, EGL_OPENVG_IMAGE, 0, (EGLConfig)0, DE_NULL));
    496 			expectError(EGL_BAD_DISPLAY);
    497 
    498 			expectNoSurface(eglCreatePbufferFromClientBuffer((EGLDisplay)-1, EGL_OPENVG_IMAGE, 0, (EGLConfig)0, DE_NULL));
    499 			expectError(EGL_BAD_DISPLAY);
    500 
    501 			log << TestLog::EndSection;
    502 
    503 			if (isAPISupported(EGL_OPENVG_API))
    504 			{
    505 				log << TestLog::Section("Test2", "EGL_BAD_CONFIG or EGL_BAD_PARAMETER is generated if config is not an EGL frame buffer configuration and if buffer is not valid OpenVG image");
    506 
    507 				expectNoSurface(eglCreatePbufferFromClientBuffer(display, EGL_OPENVG_IMAGE, (EGLClientBuffer)-1, (EGLConfig)-1, DE_NULL));
    508 				expectEitherError(EGL_BAD_CONFIG, EGL_BAD_PARAMETER);
    509 
    510 				log << TestLog::EndSection;
    511 
    512 				log << TestLog::Section("Test3", "EGL_BAD_PARAMETER is generated if buftype is not EGL_OPENVG_IMAGE");
    513 
    514 				expectTrue(eglGetConfigs(display, &anyConfig, 1, &unused));
    515 
    516 				log << TestLog::EndSection;
    517 
    518 				log << TestLog::Section("Test4", "EGL_BAD_PARAMETER is generated if buffer is not valid OpenVG image");
    519 				expectNoSurface(eglCreatePbufferFromClientBuffer(display, EGL_OPENVG_IMAGE, (EGLClientBuffer)-1, anyConfig, DE_NULL));
    520 				expectError(EGL_BAD_PARAMETER);
    521 
    522 				log << TestLog::EndSection;
    523 			}
    524 		});
    525 
    526 	static const EGLint s_invalidGenericPbufferAttrib0[] = { 0, EGL_NONE };
    527 	static const EGLint s_invalidGenericPbufferAttrib1[] = { (EGLint)0xffffffff };
    528 	static const EGLint s_negativeWidthPbufferAttrib[] = { EGL_WIDTH, -1, EGL_HEIGHT, 64, EGL_NONE };
    529 	static const EGLint s_negativeHeightPbufferAttrib[] = { EGL_WIDTH, 64, EGL_HEIGHT, -1, EGL_NONE };
    530 	static const EGLint s_negativeWidthAndHeightPbufferAttrib[] = { EGL_WIDTH, -1, EGL_HEIGHT, -1, EGL_NONE };
    531 	static const EGLint* s_invalidGenericPbufferAttribs[] =
    532 	{
    533 		s_invalidGenericPbufferAttrib0,
    534 		s_invalidGenericPbufferAttrib1,
    535 	};
    536 
    537 	static const EGLint s_invalidNoEsPbufferAttrib0[] = { EGL_MIPMAP_TEXTURE, EGL_TRUE, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    538 	static const EGLint s_invalidNoEsPbufferAttrib1[] = { EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    539 	static const EGLint s_invalidNoEsPbufferAttrib2[] = { EGL_TEXTURE_TARGET, EGL_TEXTURE_2D, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    540 	static const EGLint* s_invalidNoEsPbufferAttribs[] =
    541 	{
    542 		s_invalidNoEsPbufferAttrib0,
    543 		s_invalidNoEsPbufferAttrib1,
    544 		s_invalidNoEsPbufferAttrib2
    545 	};
    546 
    547 	static const EGLint s_invalidEsPbufferAttrib0[] = { EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE, EGL_TEXTURE_TARGET, EGL_TEXTURE_2D, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    548 	static const EGLint s_invalidEsPbufferAttrib1[] = { EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, EGL_TEXTURE_TARGET, EGL_NO_TEXTURE, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    549 	static const EGLint* s_invalidEsPbufferAttribs[] =
    550 	{
    551 		s_invalidEsPbufferAttrib0,
    552 		s_invalidEsPbufferAttrib1
    553 	};
    554 
    555 	static const EGLint s_vgPreMultAlphaPbufferAttrib[] = { EGL_ALPHA_FORMAT, EGL_ALPHA_FORMAT_PRE, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    556 	static const EGLint s_vgLinearColorspacePbufferAttrib[] = { EGL_COLORSPACE, EGL_VG_COLORSPACE_LINEAR, EGL_WIDTH, 64, EGL_HEIGHT, 64, EGL_NONE };
    557 
    558 	TEGL_ADD_API_CASE(create_pbuffer_surface, "eglCreatePbufferSurface() negative tests",
    559 		{
    560 			TestLog&	log			= m_testCtx.getLog();
    561 			EGLDisplay	display		= getDisplay();
    562 
    563 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    564 
    565 			expectNoSurface(eglCreatePbufferSurface(EGL_NO_DISPLAY, DE_NULL, s_emptyAttribList));
    566 			expectError(EGL_BAD_DISPLAY);
    567 
    568 			expectNoSurface(eglCreatePbufferSurface((EGLDisplay)-1, DE_NULL, s_emptyAttribList));
    569 			expectError(EGL_BAD_DISPLAY);
    570 
    571 			log << TestLog::EndSection;
    572 
    573 			log << TestLog::Section("Test2", "EGL_BAD_CONFIG is generated if config is not an EGL frame buffer configuration");
    574 
    575 			expectNoSurface(eglCreatePbufferSurface(display, (EGLConfig)-1, s_emptyAttribList));
    576 			expectError(EGL_BAD_CONFIG);
    577 
    578 			log << TestLog::EndSection;
    579 
    580 			log << TestLog::Section("Test3", "EGL_BAD_ATTRIBUTE is generated if attrib_list contains an invalid pixel buffer attribute");
    581 
    582 			// Generic pbuffer-capable config
    583 			EGLConfig genericConfig;
    584 			if (getConfig(&genericConfig, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
    585 			{
    586 				for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_invalidGenericPbufferAttribs); ndx++)
    587 				{
    588 					expectNoSurface(eglCreatePbufferSurface(display, genericConfig, s_invalidGenericPbufferAttribs[ndx]));
    589 					expectError(EGL_BAD_ATTRIBUTE);
    590 				}
    591 			}
    592 
    593 			log << TestLog::EndSection;
    594 
    595 			log << TestLog::Section("Test4", "EGL_BAD_MATCH is generated if config does not support rendering to pixel buffers");
    596 
    597 			EGLConfig noPbufferConfig;
    598 			if (getConfig(&noPbufferConfig, FilterList() << notSurfaceBits<EGL_PBUFFER_BIT>))
    599 			{
    600 				expectNoSurface(eglCreatePbufferSurface(display, noPbufferConfig, s_validGenericPbufferAttrib));
    601 				expectError(EGL_BAD_MATCH);
    602 			}
    603 
    604 			log << TestLog::EndSection;
    605 
    606 			log << TestLog::Section("Test5", "EGL_BAD_ATTRIBUTE is generated if attrib_list contains any of the attributes EGL_MIPMAP_TEXTURE, EGL_TEXTURE_FORMAT, or EGL_TEXTURE_TARGET, and config does not support OpenGL ES rendering");
    607 
    608 			EGLConfig noEsConfig;
    609 			if (getConfig(&noEsConfig, FilterList() << notRenderable<EGL_OPENGL_ES_BIT|EGL_OPENGL_ES2_BIT>))
    610 			{
    611 				for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_invalidNoEsPbufferAttribs); ndx++)
    612 				{
    613 					expectNoSurface(eglCreatePbufferSurface(display, noEsConfig, s_invalidNoEsPbufferAttribs[ndx]));
    614 					expectError(EGL_BAD_MATCH);
    615 				}
    616 			}
    617 
    618 			log << TestLog::EndSection;
    619 
    620 			log << TestLog::Section("Test6", "EGL_BAD_MATCH is generated if the EGL_TEXTURE_FORMAT attribute is EGL_NO_TEXTURE, and EGL_TEXTURE_TARGET is something other than EGL_NO_TEXTURE; or, EGL_TEXTURE_FORMAT is something other than EGL_NO_TEXTURE, and EGL_TEXTURE_TARGET is EGL_NO_TEXTURE");
    621 
    622 			// ES1 or ES2 config.
    623 			EGLConfig	esConfig;
    624 			bool		gotEsConfig	= getConfig(&esConfig, FilterList() << renderable<EGL_OPENGL_ES_BIT>) ||
    625 									  getConfig(&esConfig, FilterList() << renderable<EGL_OPENGL_ES2_BIT>);
    626 			if (gotEsConfig)
    627 			{
    628 				for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(s_invalidEsPbufferAttribs); ndx++)
    629 				{
    630 					expectNoSurface(eglCreatePbufferSurface(display, esConfig, s_invalidEsPbufferAttribs[ndx]));
    631 					expectError(EGL_BAD_MATCH);
    632 				}
    633 			}
    634 
    635 			log << TestLog::EndSection;
    636 
    637 			log << TestLog::Section("Test7", "EGL_BAD_MATCH is generated if config does not support the specified OpenVG alpha format attribute or colorspace attribute");
    638 
    639 			EGLConfig vgNoPreConfig;
    640 			if (getConfig(&vgNoPreConfig, FilterList() << renderable<EGL_OPENVG_BIT> << notSurfaceBits<EGL_VG_ALPHA_FORMAT_PRE_BIT>))
    641 			{
    642 				expectNoSurface(eglCreatePbufferSurface(display, vgNoPreConfig, s_vgPreMultAlphaPbufferAttrib));
    643 				expectError(EGL_BAD_MATCH);
    644 			}
    645 
    646 			EGLConfig vgNoLinearConfig;
    647 			if (getConfig(&vgNoLinearConfig, FilterList() << renderable<EGL_OPENVG_BIT> << notSurfaceBits<EGL_VG_COLORSPACE_LINEAR_BIT>))
    648 			{
    649 				expectNoSurface(eglCreatePbufferSurface(display, vgNoLinearConfig, s_vgLinearColorspacePbufferAttrib));
    650 				expectError(EGL_BAD_MATCH);
    651 			}
    652 
    653 			log << TestLog::EndSection;
    654 
    655 			log << TestLog::Section("Test8", "EGL_BAD_PARAMETER is generated if EGL_WIDTH or EGL_HEIGHT is negative");
    656 
    657 			if (getConfig(&genericConfig, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
    658 			{
    659 				expectNoSurface(eglCreatePbufferSurface(display, genericConfig, s_negativeWidthPbufferAttrib));
    660 				expectError(EGL_BAD_PARAMETER);
    661 
    662 				expectNoSurface(eglCreatePbufferSurface(display, genericConfig, s_negativeHeightPbufferAttrib));
    663 				expectError(EGL_BAD_PARAMETER);
    664 
    665 				expectNoSurface(eglCreatePbufferSurface(display, genericConfig, s_negativeWidthAndHeightPbufferAttrib));
    666 				expectError(EGL_BAD_PARAMETER);
    667 			}
    668 
    669 			log << TestLog::EndSection;
    670 
    671 		});
    672 
    673 	TEGL_ADD_API_CASE(create_pixmap_surface, "eglCreatePixmapSurface() negative tests",
    674 		{
    675 			TestLog&	log			= m_testCtx.getLog();
    676 			EGLDisplay	display		= getDisplay();
    677 
    678 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    679 
    680 			expectNoSurface(eglCreatePixmapSurface(EGL_NO_DISPLAY, DE_NULL, DE_NULL, s_emptyAttribList));
    681 			expectError(EGL_BAD_DISPLAY);
    682 
    683 			expectNoSurface(eglCreatePixmapSurface((EGLDisplay)-1, DE_NULL, DE_NULL, s_emptyAttribList));
    684 			expectError(EGL_BAD_DISPLAY);
    685 
    686 			log << TestLog::EndSection;
    687 
    688 			log << TestLog::Section("Test2", "EGL_BAD_CONFIG or EGL_BAD_PARAMETER is generated if config is not an EGL frame buffer configuration or if the PixmapSurface call is not supported");
    689 
    690 			expectNoSurface(eglCreatePixmapSurface(display, (EGLConfig)-1, DE_NULL, s_emptyAttribList));
    691 			expectEitherError(EGL_BAD_CONFIG, EGL_BAD_PARAMETER);
    692 
    693 			log << TestLog::EndSection;
    694 		});
    695 
    696 	TEGL_ADD_API_CASE(create_window_surface, "eglCreateWindowSurface() negative tests",
    697 		{
    698 			EGLConfig				config			= DE_NULL;
    699 			bool					gotConfig		= getConfig(&config, FilterList() << renderable<EGL_OPENGL_ES2_BIT> << surfaceBits<EGL_WINDOW_BIT>);
    700 
    701 			if (gotConfig)
    702 			{
    703 				TestLog&							log				= m_testCtx.getLog();
    704 				EGLDisplay							display			= getDisplay();
    705 				const eglu::NativeWindowFactory&	factory			= eglu::selectNativeWindowFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine());
    706 				de::UniquePtr<eglu::NativeWindow>	window			(factory.createWindow(&m_eglTestCtx.getNativeDisplay(), display, config, DE_NULL, eglu::WindowParams(256, 256, eglu::parseWindowVisibility(m_testCtx.getCommandLine()))));
    707 
    708 				log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    709 
    710 				expectNoSurface(eglCreateWindowSurface(EGL_NO_DISPLAY, config, window->getLegacyNative(), s_emptyAttribList));
    711 				expectError(EGL_BAD_DISPLAY);
    712 
    713 				expectNoSurface(eglCreateWindowSurface((EGLDisplay)-1, config, window->getLegacyNative(), s_emptyAttribList));
    714 				expectError(EGL_BAD_DISPLAY);
    715 
    716 				log << TestLog::EndSection;
    717 			}
    718 		});
    719 
    720 	TEGL_ADD_API_CASE(destroy_context, "eglDestroyContext() negative tests",
    721 		{
    722 			TestLog&	log			= m_testCtx.getLog();
    723 			EGLDisplay	display		= getDisplay();
    724 
    725 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    726 
    727 			expectFalse(eglDestroyContext(EGL_NO_DISPLAY, DE_NULL));
    728 			expectError(EGL_BAD_DISPLAY);
    729 
    730 			expectFalse(eglDestroyContext((EGLDisplay)-1, DE_NULL));
    731 			expectError(EGL_BAD_DISPLAY);
    732 
    733 			log << TestLog::EndSection;
    734 
    735 			log << TestLog::Section("Test2", "EGL_BAD_CONTEXT is generated if context is not an EGL rendering context");
    736 
    737 			expectFalse(eglDestroyContext(display, DE_NULL));
    738 			expectError(EGL_BAD_CONTEXT);
    739 
    740 			expectFalse(eglDestroyContext(display, (EGLContext)-1));
    741 			expectError(EGL_BAD_CONTEXT);
    742 
    743 			log << TestLog::EndSection;
    744 		});
    745 
    746 	TEGL_ADD_API_CASE(destroy_surface, "eglDestroySurface() negative tests",
    747 		{
    748 			TestLog&	log			= m_testCtx.getLog();
    749 			EGLDisplay	display		= getDisplay();
    750 
    751 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    752 
    753 			expectFalse(eglDestroySurface(EGL_NO_DISPLAY, DE_NULL));
    754 			expectError(EGL_BAD_DISPLAY);
    755 
    756 			expectFalse(eglDestroySurface((EGLDisplay)-1, DE_NULL));
    757 			expectError(EGL_BAD_DISPLAY);
    758 
    759 			log << TestLog::EndSection;
    760 
    761 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
    762 
    763 			expectFalse(eglDestroySurface(display, DE_NULL));
    764 			expectError(EGL_BAD_SURFACE);
    765 
    766 			expectFalse(eglDestroySurface(display, (EGLSurface)-1));
    767 			expectError(EGL_BAD_SURFACE);
    768 
    769 			log << TestLog::EndSection;
    770 		});
    771 
    772 	TEGL_ADD_API_CASE(get_config_attrib, "eglGetConfigAttrib() negative tests",
    773 		{
    774 			TestLog&	log			= m_testCtx.getLog();
    775 			EGLDisplay	display		= getDisplay();
    776 			EGLint		value		= 0;
    777 
    778 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    779 
    780 			expectFalse(eglGetConfigAttrib(EGL_NO_DISPLAY, DE_NULL, EGL_RED_SIZE, &value));
    781 			expectError(EGL_BAD_DISPLAY);
    782 
    783 			expectFalse(eglGetConfigAttrib((EGLDisplay)-1, DE_NULL, EGL_RED_SIZE, &value));
    784 			expectError(EGL_BAD_DISPLAY);
    785 
    786 			log << TestLog::EndSection;
    787 
    788 			log << TestLog::Section("Test2", "EGL_BAD_CONFIG is generated if config is not an EGL frame buffer configuration");
    789 
    790 			expectFalse(eglGetConfigAttrib(display, (EGLConfig)-1, EGL_RED_SIZE, &value));
    791 			expectError(EGL_BAD_CONFIG);
    792 
    793 			log << TestLog::EndSection;
    794 
    795 			// Any config.
    796 			EGLConfig	config		= DE_NULL;
    797 			bool		hasConfig	= getConfig(&config, FilterList());
    798 
    799 			log << TestLog::Section("Test3", "EGL_BAD_ATTRIBUTE is generated if attribute is not a valid frame buffer configuration attribute");
    800 
    801 			if (hasConfig)
    802 			{
    803 				expectFalse(eglGetConfigAttrib(display, config, 0, &value));
    804 				expectError(EGL_BAD_ATTRIBUTE);
    805 
    806 				expectFalse(eglGetConfigAttrib(display, config, -1, &value));
    807 				expectError(EGL_BAD_ATTRIBUTE);
    808 			}
    809 
    810 			log << TestLog::EndSection;
    811 		});
    812 
    813 	TEGL_ADD_API_CASE(get_configs, "eglGetConfigs() negative tests",
    814 		{
    815 			TestLog&	log			= m_testCtx.getLog();
    816 			EGLDisplay	display		= getDisplay();
    817 			EGLConfig	cfgs[1];
    818 			EGLint		numCfgs		= 0;
    819 
    820 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    821 
    822 			expectFalse(eglGetConfigs(EGL_NO_DISPLAY, &cfgs[0], DE_LENGTH_OF_ARRAY(cfgs), &numCfgs));
    823 			expectError(EGL_BAD_DISPLAY);
    824 
    825 			expectFalse(eglGetConfigs((EGLDisplay)-1, &cfgs[0], DE_LENGTH_OF_ARRAY(cfgs), &numCfgs));
    826 			expectError(EGL_BAD_DISPLAY);
    827 
    828 			log << TestLog::EndSection;
    829 
    830 			log << TestLog::Section("Test2", "EGL_BAD_PARAMETER is generated if num_config is NULL");
    831 
    832 			expectFalse(eglGetConfigs(display, &cfgs[0], DE_LENGTH_OF_ARRAY(cfgs), DE_NULL));
    833 			expectError(EGL_BAD_PARAMETER);
    834 
    835 			log << TestLog::EndSection;
    836 		});
    837 
    838 	TEGL_ADD_API_CASE(initialize, "eglInitialize() negative tests",
    839 		{
    840 			TestLog&	log			= m_testCtx.getLog();
    841 			EGLint		major		= 0;
    842 			EGLint		minor		= 0;
    843 
    844 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    845 
    846 			expectFalse(eglInitialize(EGL_NO_DISPLAY, &major, &minor));
    847 			expectError(EGL_BAD_DISPLAY);
    848 
    849 			expectFalse(eglInitialize((EGLDisplay)-1, &major, &minor));
    850 			expectError(EGL_BAD_DISPLAY);
    851 
    852 			log << TestLog::EndSection;
    853 		});
    854 
    855 	TEGL_ADD_API_CASE(make_current, "eglMakeCurrent() negative tests",
    856 		{
    857 			TestLog&	log			= m_testCtx.getLog();
    858 			EGLDisplay	display		= getDisplay();
    859 
    860 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
    861 
    862 			expectFalse(eglMakeCurrent(EGL_NO_DISPLAY, DE_NULL, DE_NULL, DE_NULL));
    863 			expectError(EGL_BAD_DISPLAY);
    864 
    865 			expectFalse(eglMakeCurrent((EGLDisplay)-1, DE_NULL, DE_NULL, DE_NULL));
    866 			expectError(EGL_BAD_DISPLAY);
    867 
    868 			log << TestLog::EndSection;
    869 
    870 			// Create simple pbuffer surface.
    871 			EGLSurface surface = EGL_NO_SURFACE;
    872 			{
    873 				EGLConfig config;
    874 				if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
    875 				{
    876 					surface = eglCreatePbufferSurface(display, config, s_validGenericPbufferAttrib);
    877 					expectError(EGL_SUCCESS);
    878 				}
    879 			}
    880 
    881 			// Create simple ES2 context
    882 			EGLContext context = EGL_NO_CONTEXT;
    883 			{
    884 				EGLConfig config;
    885 				if (getConfig(&config, FilterList() << renderable<EGL_OPENGL_ES2_BIT>))
    886 				{
    887 					context = eglCreateContext(display, config, EGL_NO_CONTEXT, s_es2ContextAttribList);
    888 					expectError(EGL_SUCCESS);
    889 				}
    890 			}
    891 
    892 			if (surface != EGL_NO_SURFACE && context != EGL_NO_CONTEXT)
    893 			{
    894 				log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
    895 
    896 				expectFalse(eglMakeCurrent(display, (EGLSurface)-1, (EGLSurface)-1, context));
    897 				expectError(EGL_BAD_SURFACE);
    898 
    899 				expectFalse(eglMakeCurrent(display, surface, (EGLSurface)-1, context));
    900 				expectError(EGL_BAD_SURFACE);
    901 
    902 				expectFalse(eglMakeCurrent(display, (EGLSurface)-1, surface, context));
    903 				expectError(EGL_BAD_SURFACE);
    904 
    905 				log << TestLog::EndSection;
    906 			}
    907 
    908 			if (surface)
    909 			{
    910 				log << TestLog::Section("Test3", "EGL_BAD_CONTEXT is generated if context is not an EGL rendering context");
    911 
    912 				expectFalse(eglMakeCurrent(display, surface, surface, (EGLContext)-1));
    913 				expectError(EGL_BAD_CONTEXT);
    914 
    915 				log << TestLog::EndSection;
    916 			}
    917 
    918 			if (surface != EGL_NO_SURFACE)
    919 			{
    920 				log << TestLog::Section("Test4", "EGL_BAD_MATCH is generated if read or draw surface is not EGL_NO_SURFACE and context is EGL_NO_CONTEXT");
    921 
    922 				expectFalse(eglMakeCurrent(display, surface, EGL_NO_SURFACE, EGL_NO_CONTEXT));
    923 				expectError(EGL_BAD_MATCH);
    924 
    925 				expectFalse(eglMakeCurrent(display, EGL_NO_SURFACE, surface, EGL_NO_CONTEXT));
    926 				expectError(EGL_BAD_MATCH);
    927 
    928 				expectFalse(eglMakeCurrent(display, surface, surface, EGL_NO_CONTEXT));
    929 				expectError(EGL_BAD_MATCH);
    930 
    931 				log << TestLog::EndSection;
    932 			}
    933 
    934 			if (context)
    935 			{
    936 				eglDestroyContext(display, context);
    937 				expectError(EGL_SUCCESS);
    938 			}
    939 
    940 			if (surface)
    941 			{
    942 				eglDestroySurface(display, surface);
    943 				expectError(EGL_SUCCESS);
    944 			}
    945 		});
    946 
    947 	TEGL_ADD_API_CASE(get_current_context, "eglGetCurrentContext() negative tests",
    948 		{
    949 			expectNoContext(eglGetCurrentContext());
    950 
    951 			if (isAPISupported(EGL_OPENGL_ES_API))
    952 			{
    953 				expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    954 				expectError(EGL_SUCCESS);
    955 
    956 				expectNoContext(eglGetCurrentContext());
    957 				expectError(EGL_SUCCESS);
    958 			}
    959 		});
    960 
    961 	TEGL_ADD_API_CASE(get_current_surface, "eglGetCurrentSurface() negative tests",
    962 		{
    963 			TestLog&	log			= m_testCtx.getLog();
    964 			EGLDisplay	display		= getDisplay();
    965 			EGLConfig	config		= DE_NULL;
    966 			EGLContext	context		= EGL_NO_CONTEXT;
    967 			EGLSurface	surface		= EGL_NO_SURFACE;
    968 			bool		gotConfig	= getConfig(&config, FilterList() << renderable<EGL_OPENGL_ES2_BIT> << surfaceBits<EGL_PBUFFER_BIT>);
    969 
    970 			if (gotConfig)
    971 			{
    972 				expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
    973 				expectError(EGL_SUCCESS);
    974 
    975 				context = eglCreateContext(display, config, EGL_NO_CONTEXT, s_es2ContextAttribList);
    976 				expectError(EGL_SUCCESS);
    977 
    978 				// Create simple pbuffer surface.
    979 				surface = eglCreatePbufferSurface(display, config, s_validGenericPbufferAttrib);
    980 				expectError(EGL_SUCCESS);
    981 
    982 				expectTrue(eglMakeCurrent(display, surface, surface, context));
    983 				expectError(EGL_SUCCESS);
    984 
    985 				log << TestLog::Section("Test1", "EGL_BAD_PARAMETER is generated if readdraw is neither EGL_READ nor EGL_DRAW");
    986 
    987 				expectNoSurface(eglGetCurrentSurface(EGL_NONE));
    988 				expectError(EGL_BAD_PARAMETER);
    989 
    990 				log << TestLog::EndSection;
    991 
    992 				expectTrue(eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
    993 				expectError(EGL_SUCCESS);
    994 
    995 				if (surface != EGL_NO_SURFACE)
    996 				{
    997 					expectTrue(eglDestroySurface(display, surface));
    998 					expectError(EGL_SUCCESS);
    999 				}
   1000 
   1001 				if (context != EGL_NO_CONTEXT)
   1002 				{
   1003 					expectTrue(eglDestroyContext(display, context));
   1004 					expectError(EGL_SUCCESS);
   1005 				}
   1006 			}
   1007 		});
   1008 
   1009 	TEGL_ADD_API_CASE(query_context, "eglQueryContext() negative tests",
   1010 		{
   1011 			TestLog&	log			= m_testCtx.getLog();
   1012 			EGLDisplay	display		= getDisplay();
   1013 			EGLint		value		= 0;
   1014 
   1015 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1016 
   1017 			expectFalse(eglQueryContext(EGL_NO_DISPLAY, DE_NULL, EGL_CONFIG_ID, &value));
   1018 			expectError(EGL_BAD_DISPLAY);
   1019 
   1020 			expectFalse(eglQueryContext((EGLDisplay)-1, DE_NULL, EGL_CONFIG_ID, &value));
   1021 			expectError(EGL_BAD_DISPLAY);
   1022 
   1023 			log << TestLog::EndSection;
   1024 
   1025 			log << TestLog::Section("Test2", "EGL_BAD_CONTEXT is generated if context is not an EGL rendering context");
   1026 
   1027 			expectFalse(eglQueryContext(display, DE_NULL, EGL_CONFIG_ID, &value));
   1028 			expectError(EGL_BAD_CONTEXT);
   1029 
   1030 			expectFalse(eglQueryContext(display, DE_NULL, EGL_CONFIG_ID, &value));
   1031 			expectError(EGL_BAD_CONTEXT);
   1032 
   1033 			log << TestLog::EndSection;
   1034 
   1035 			// Create ES2 context.
   1036 			EGLConfig	config		= DE_NULL;
   1037 			EGLContext	context		= DE_NULL;
   1038 			bool		gotConfig	= getConfig(&config, FilterList() << renderable<EGL_OPENGL_ES2_BIT>);
   1039 
   1040 			if (gotConfig)
   1041 			{
   1042 				expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
   1043 				expectError(EGL_SUCCESS);
   1044 
   1045 				context = eglCreateContext(display, config, EGL_NO_CONTEXT, s_es2ContextAttribList);
   1046 				expectError(EGL_SUCCESS);
   1047 			}
   1048 
   1049 			log << TestLog::Section("Test3", "EGL_BAD_ATTRIBUTE is generated if attribute is not a valid context attribute");
   1050 
   1051 			if (context)
   1052 			{
   1053 				expectFalse(eglQueryContext(display, context, 0, &value));
   1054 				expectError(EGL_BAD_ATTRIBUTE);
   1055 				expectFalse(eglQueryContext(display, context, -1, &value));
   1056 				expectError(EGL_BAD_ATTRIBUTE);
   1057 				expectFalse(eglQueryContext(display, context, EGL_RED_SIZE, &value));
   1058 				expectError(EGL_BAD_ATTRIBUTE);
   1059 			}
   1060 
   1061 			log << TestLog::EndSection;
   1062 
   1063 			if (context)
   1064 			{
   1065 				expectTrue(eglDestroyContext(display, context));
   1066 				expectError(EGL_SUCCESS);
   1067 			}
   1068 		});
   1069 
   1070 	TEGL_ADD_API_CASE(query_string, "eglQueryString() negative tests",
   1071 		{
   1072 			TestLog&	log			= m_testCtx.getLog();
   1073 			EGLDisplay	display		= getDisplay();
   1074 
   1075 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1076 
   1077 			expectNull(eglQueryString(EGL_NO_DISPLAY, EGL_VENDOR));
   1078 			expectError(EGL_BAD_DISPLAY);
   1079 
   1080 			expectNull(eglQueryString((EGLDisplay)-1, EGL_VENDOR));
   1081 			expectError(EGL_BAD_DISPLAY);
   1082 
   1083 			log << TestLog::EndSection;
   1084 
   1085 			log << TestLog::Section("Test2", "EGL_BAD_PARAMETER is generated if name is not an accepted value");
   1086 
   1087 			expectNull(eglQueryString(display, 0));
   1088 			expectError(EGL_BAD_PARAMETER);
   1089 			expectNull(eglQueryString(display, -1));
   1090 			expectError(EGL_BAD_PARAMETER);
   1091 
   1092 			log << TestLog::EndSection;
   1093 		});
   1094 
   1095 	TEGL_ADD_API_CASE(query_surface, "eglQuerySurface() negative tests",
   1096 		{
   1097 			TestLog&	log			= m_testCtx.getLog();
   1098 			EGLDisplay	display		= getDisplay();
   1099 			EGLint		value		= 0;
   1100 
   1101 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1102 
   1103 			expectFalse(eglQuerySurface(EGL_NO_DISPLAY, DE_NULL, EGL_CONFIG_ID, &value));
   1104 			expectError(EGL_BAD_DISPLAY);
   1105 
   1106 			expectFalse(eglQuerySurface((EGLDisplay)-1, DE_NULL, EGL_CONFIG_ID, &value));
   1107 			expectError(EGL_BAD_DISPLAY);
   1108 
   1109 			log << TestLog::EndSection;
   1110 
   1111 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
   1112 
   1113 			expectFalse(eglQuerySurface(display, DE_NULL, EGL_CONFIG_ID, &value));
   1114 			expectError(EGL_BAD_SURFACE);
   1115 
   1116 			expectFalse(eglQuerySurface(display, (EGLSurface)-1, EGL_CONFIG_ID, &value));
   1117 			expectError(EGL_BAD_SURFACE);
   1118 
   1119 			log << TestLog::EndSection;
   1120 
   1121 			// Create pbuffer surface.
   1122 			EGLSurface surface = EGL_NO_SURFACE;
   1123 			{
   1124 				EGLConfig config;
   1125 				if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
   1126 				{
   1127 					surface = eglCreatePbufferSurface(display, config, s_validGenericPbufferAttrib);
   1128 					expectError(EGL_SUCCESS);
   1129 				}
   1130 				else
   1131 					log << TestLog::Message << "// WARNING: No suitable config found, testing will be incomplete" << TestLog::EndMessage;
   1132 			}
   1133 
   1134 			log << TestLog::Section("Test3", "EGL_BAD_ATTRIBUTE is generated if attribute is not a valid surface attribute");
   1135 
   1136 			if (surface)
   1137 			{
   1138 				expectFalse(eglQuerySurface(display, surface, 0, &value));
   1139 				expectError(EGL_BAD_ATTRIBUTE);
   1140 
   1141 				expectFalse(eglQuerySurface(display, surface, -1, &value));
   1142 				expectError(EGL_BAD_ATTRIBUTE);
   1143 			}
   1144 
   1145 			log << TestLog::EndSection;
   1146 
   1147 			if (surface)
   1148 			{
   1149 				eglDestroySurface(display, surface);
   1150 				expectError(EGL_SUCCESS);
   1151 			}
   1152 		});
   1153 
   1154 	TEGL_ADD_API_CASE(release_tex_image, "eglReleaseTexImage() negative tests",
   1155 		{
   1156 			TestLog&	log			= m_testCtx.getLog();
   1157 			EGLDisplay	display		= getDisplay();
   1158 
   1159 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1160 
   1161 			expectFalse(eglReleaseTexImage(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_BACK_BUFFER));
   1162 			expectError(EGL_BAD_DISPLAY);
   1163 
   1164 			expectFalse(eglReleaseTexImage((EGLDisplay)-1, EGL_NO_SURFACE, EGL_BACK_BUFFER));
   1165 			expectError(EGL_BAD_DISPLAY);
   1166 
   1167 			log << TestLog::EndSection;
   1168 
   1169 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
   1170 
   1171 			expectFalse(eglReleaseTexImage(display, EGL_NO_SURFACE, EGL_BACK_BUFFER));
   1172 			expectError(EGL_BAD_SURFACE);
   1173 
   1174 			expectFalse(eglReleaseTexImage(display, (EGLSurface)-1, EGL_BACK_BUFFER));
   1175 			expectError(EGL_BAD_SURFACE);
   1176 
   1177 			log << TestLog::EndSection;
   1178 		});
   1179 
   1180 	TEGL_ADD_API_CASE(surface_attrib, "eglSurfaceAttrib() negative tests",
   1181 		{
   1182 			TestLog&	log			= m_testCtx.getLog();
   1183 			EGLDisplay	display		= getDisplay();
   1184 
   1185 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1186 
   1187 			expectFalse(eglSurfaceAttrib(EGL_NO_DISPLAY, DE_NULL, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED));
   1188 			expectError(EGL_BAD_DISPLAY);
   1189 
   1190 			expectFalse(eglSurfaceAttrib((EGLDisplay)-1, DE_NULL, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED));
   1191 			expectError(EGL_BAD_DISPLAY);
   1192 
   1193 			log << TestLog::EndSection;
   1194 
   1195 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
   1196 
   1197 			expectFalse(eglSurfaceAttrib(display, DE_NULL, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED));
   1198 			expectError(EGL_BAD_SURFACE);
   1199 
   1200 			expectFalse(eglSurfaceAttrib(display, (EGLSurface)-1, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED));
   1201 			expectError(EGL_BAD_SURFACE);
   1202 
   1203 			log << TestLog::EndSection;
   1204 
   1205 			{
   1206 				// Create pbuffer surface.
   1207 				EGLSurface surface = EGL_NO_SURFACE;
   1208 				{
   1209 					EGLConfig config;
   1210 					if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT>))
   1211 					{
   1212 						surface = eglCreatePbufferSurface(display, config, s_validGenericPbufferAttrib);
   1213 						expectError(EGL_SUCCESS);
   1214 					}
   1215 					else
   1216 						log << TestLog::Message << "// WARNING: No suitable config found, testing will be incomplete" << TestLog::EndMessage;
   1217 				}
   1218 
   1219 				log << TestLog::Section("Test3", "EGL_BAD_ATTRIBUTE is generated if attribute is not a valid surface attribute");
   1220 
   1221 				if (surface)
   1222 				{
   1223 					expectFalse(eglSurfaceAttrib(display, surface, 0, 0));
   1224 					expectError(EGL_BAD_ATTRIBUTE);
   1225 
   1226 					expectFalse(eglSurfaceAttrib(display, surface, -1, 0));
   1227 					expectError(EGL_BAD_ATTRIBUTE);
   1228 				}
   1229 
   1230 				log << TestLog::EndSection;
   1231 
   1232 				if (surface)
   1233 				{
   1234 					eglDestroySurface(display, surface);
   1235 					expectError(EGL_SUCCESS);
   1236 				}
   1237 			}
   1238 
   1239 			{
   1240 				// Create pbuffer surface without EGL_MULTISAMPLE_RESOLVE_BOX_BIT.
   1241 				EGLSurface surface = EGL_NO_SURFACE;
   1242 				{
   1243 					EGLConfig config;
   1244 					if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT> << notSurfaceBits<EGL_MULTISAMPLE_RESOLVE_BOX_BIT>))
   1245 					{
   1246 						surface = eglCreatePbufferSurface(display, config, s_validGenericPbufferAttrib);
   1247 						expectError(EGL_SUCCESS);
   1248 					}
   1249 					else
   1250 						log << TestLog::Message << "// WARNING: No suitable config found, testing will be incomplete" << TestLog::EndMessage;
   1251 				}
   1252 
   1253 				log << TestLog::Section("Test4", "EGL_BAD_MATCH is generated if attribute is EGL_MULTISAMPLE_RESOLVE, value is EGL_MULTISAMPLE_RESOLVE_BOX, and the EGL_SURFACE_TYPE attribute of the EGLConfig used to create surface does not contain EGL_MULTISAMPLE_RESOLVE_BOX_BIT");
   1254 
   1255 				if (surface)
   1256 				{
   1257 					expectFalse(eglSurfaceAttrib(display, surface, EGL_MULTISAMPLE_RESOLVE, EGL_MULTISAMPLE_RESOLVE_BOX));
   1258 					expectError(EGL_BAD_MATCH);
   1259 				}
   1260 
   1261 				log << TestLog::EndSection;
   1262 
   1263 				if (surface)
   1264 				{
   1265 					eglDestroySurface(display, surface);
   1266 					expectError(EGL_SUCCESS);
   1267 				}
   1268 			}
   1269 
   1270 			{
   1271 				// Create pbuffer surface without EGL_SWAP_BEHAVIOR_PRESERVED_BIT.
   1272 				EGLSurface surface = EGL_NO_SURFACE;
   1273 				{
   1274 					EGLConfig config;
   1275 					if (getConfig(&config, FilterList() << surfaceBits<EGL_PBUFFER_BIT> << notSurfaceBits<EGL_SWAP_BEHAVIOR_PRESERVED_BIT>))
   1276 					{
   1277 						surface = eglCreatePbufferSurface(display, config, s_validGenericPbufferAttrib);
   1278 						expectError(EGL_SUCCESS);
   1279 					}
   1280 					else
   1281 						log << TestLog::Message << "// WARNING: No suitable config found, testing will be incomplete" << TestLog::EndMessage;
   1282 				}
   1283 
   1284 				log << TestLog::Section("Test5", "EGL_BAD_MATCH is generated if attribute is EGL_SWAP_BEHAVIOR, value is EGL_BUFFER_PRESERVED, and the EGL_SURFACE_TYPE attribute of the EGLConfig used to create surface does not contain EGL_SWAP_BEHAVIOR_PRESERVED_BIT");
   1285 
   1286 				if (surface)
   1287 				{
   1288 					expectFalse(eglSurfaceAttrib(display, surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED));
   1289 					expectError(EGL_BAD_MATCH);
   1290 				}
   1291 
   1292 				log << TestLog::EndSection;
   1293 
   1294 				if (surface)
   1295 				{
   1296 					eglDestroySurface(display, surface);
   1297 					expectError(EGL_SUCCESS);
   1298 				}
   1299 			}
   1300 		});
   1301 
   1302 	TEGL_ADD_API_CASE(swap_buffers, "eglSwapBuffers() negative tests",
   1303 		{
   1304 			TestLog&	log			= m_testCtx.getLog();
   1305 			EGLDisplay	display		= getDisplay();
   1306 
   1307 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1308 
   1309 			expectFalse(eglSwapBuffers(EGL_NO_DISPLAY, DE_NULL));
   1310 			expectError(EGL_BAD_DISPLAY);
   1311 
   1312 			expectFalse(eglSwapBuffers((EGLDisplay)-1, DE_NULL));
   1313 			expectError(EGL_BAD_DISPLAY);
   1314 
   1315 			log << TestLog::EndSection;
   1316 
   1317 			log << TestLog::Section("Test2", "EGL_BAD_SURFACE is generated if surface is not an EGL surface");
   1318 
   1319 			expectFalse(eglSwapBuffers(display, DE_NULL));
   1320 			expectError(EGL_BAD_SURFACE);
   1321 
   1322 			expectFalse(eglSwapBuffers(display, (EGLSurface)-1));
   1323 			expectError(EGL_BAD_SURFACE);
   1324 
   1325 			log << TestLog::EndSection;
   1326 		});
   1327 
   1328 	TEGL_ADD_API_CASE(swap_interval, "eglSwapInterval() negative tests",
   1329 		{
   1330 			TestLog&	log			= m_testCtx.getLog();
   1331 			EGLDisplay	display		= getDisplay();
   1332 
   1333 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1334 
   1335 			expectFalse(eglSwapInterval(EGL_NO_DISPLAY, 0));
   1336 			expectError(EGL_BAD_DISPLAY);
   1337 
   1338 			expectFalse(eglSwapInterval((EGLDisplay)-1, 0));
   1339 			expectError(EGL_BAD_DISPLAY);
   1340 
   1341 			log << TestLog::EndSection;
   1342 
   1343 			log << TestLog::Section("Test2", "EGL_BAD_CONTEXT is generated if there is no current context on the calling thread");
   1344 
   1345 			expectFalse(eglSwapInterval(display, 0));
   1346 			expectError(EGL_BAD_CONTEXT);
   1347 
   1348 			log << TestLog::EndSection;
   1349 		});
   1350 
   1351 	TEGL_ADD_API_CASE(terminate, "eglTerminate() negative tests",
   1352 		{
   1353 			TestLog&	log			= m_testCtx.getLog();
   1354 
   1355 			log << TestLog::Section("Test1", "EGL_BAD_DISPLAY is generated if display is not an EGL display connection");
   1356 
   1357 			expectFalse(eglTerminate(EGL_NO_DISPLAY));
   1358 			expectError(EGL_BAD_DISPLAY);
   1359 
   1360 			expectFalse(eglTerminate((EGLDisplay)-1));
   1361 			expectError(EGL_BAD_DISPLAY);
   1362 
   1363 			log << TestLog::EndSection;
   1364 		});
   1365 
   1366 	TEGL_ADD_API_CASE(wait_native, "eglWaitNative() negative tests",
   1367 		{
   1368 			EGLConfig				config			= DE_NULL;
   1369 			bool					gotConfig		= getConfig(&config, FilterList() << renderable<EGL_OPENGL_ES2_BIT> << surfaceBits<EGL_WINDOW_BIT>);
   1370 
   1371 			if (gotConfig)
   1372 			{
   1373 				TestLog&							log				= m_testCtx.getLog();
   1374 				const Library&						egl				= m_eglTestCtx.getLibrary();
   1375 				EGLDisplay							display			= getDisplay();
   1376 				const eglu::NativeWindowFactory&	factory			= eglu::selectNativeWindowFactory(m_eglTestCtx.getNativeDisplayFactory(), m_testCtx.getCommandLine());
   1377 				de::UniquePtr<eglu::NativeWindow>	window			(factory.createWindow(&m_eglTestCtx.getNativeDisplay(), display, config, DE_NULL, eglu::WindowParams(256, 256, eglu::parseWindowVisibility(m_testCtx.getCommandLine()))));
   1378 				eglu::UniqueSurface					surface			(egl, display, eglu::createWindowSurface(m_eglTestCtx.getNativeDisplay(), *window, display, config, DE_NULL));
   1379 				EGLContext							context			= EGL_NO_CONTEXT;
   1380 
   1381 				expectTrue(eglBindAPI(EGL_OPENGL_ES_API));
   1382 				expectError(EGL_SUCCESS);
   1383 
   1384 				context = eglCreateContext(display, config, EGL_NO_CONTEXT, s_es2ContextAttribList);
   1385 				expectError(EGL_SUCCESS);
   1386 
   1387 				expectTrue(eglMakeCurrent(display, *surface, *surface, context));
   1388 				expectError(EGL_SUCCESS);
   1389 
   1390 				log << TestLog::Section("Test1", "EGL_BAD_PARAMETER is generated if engine is not a recognized marking engine and native rendering is supported by current surface");
   1391 
   1392 				eglWaitNative(-1);
   1393 				expectEitherError(EGL_BAD_PARAMETER, EGL_SUCCESS);
   1394 
   1395 				log << TestLog::EndSection;
   1396 
   1397 				expectTrue(eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
   1398 				expectError(EGL_SUCCESS);
   1399 
   1400 				if (context != EGL_NO_CONTEXT)
   1401 				{
   1402 					expectTrue(eglDestroyContext(display, context));
   1403 					expectError(EGL_SUCCESS);
   1404 				}
   1405 			}
   1406 		});
   1407 }
   1408 
   1409 } // egl
   1410 } // deqp
   1411