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 EGL_KHR_fence_sync and EGL_KHR_reusable_sync tests
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglSyncTests.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluNativeWindow.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluStrUtil.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "egluUtil.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuCommandLine.hpp"
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluDefs.hpp"
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <EGL/eglext.h>
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <GLES2/gl2.h>
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef EGL_KHR_wait_sync
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define EGL_KHR_wait_sync 1
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytypedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifdef EGL_EGLEXT_PROTOTYPES
423c827367444ee418f129b2c238299f49d3264554Jarkko PoyryEGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif /* EGL_KHR_wait_sync */
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector>
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string>
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <sstream>
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <set>
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector;
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string;
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::set;
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog;
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryconst char* getSyncTypeName (EGLenum syncType)
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (syncType)
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case EGL_SYNC_FENCE_KHR:	return "EGL_SYNC_FENCE_KHR";
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case EGL_SYNC_REUSABLE_KHR:	return "EGL_SYNC_REUSABLE_KHR";
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(DE_FALSE);
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return "<Unknown>";
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SyncTest : public TestCase
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	enum Extension
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EXTENSION_NONE				= 0,
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EXTENSION_WAIT_SYNC			= (0x1 << 0),
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EXTENSION_FENCE_SYNC		= (0x1 << 1),
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EXTENSION_REUSABLE_SYNC		= (0x1 << 2)
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry									SyncTest	(EglTestContext& eglTestCtx, EGLenum syncType, Extension extensions, const char* name, const char* description);
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry									~SyncTest	(void);
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void							init		(void);
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	void							deinit		(void);
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected:
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const EGLenum					m_syncType;
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const Extension					m_extensions;
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	EGLDisplay						m_eglDisplay;
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	EGLConfig						m_eglConfig;
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	EGLSurface						m_eglSurface;
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	eglu::NativeWindow*				m_nativeWindow;
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	EGLContext						m_eglContext;
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	EGLSyncKHR						m_sync;
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	struct
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		PFNEGLCREATESYNCKHRPROC		createSync;
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		PFNEGLDESTROYSYNCKHRPROC	destroySync;
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		PFNEGLCLIENTWAITSYNCKHRPROC	clientWaitSync;
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		PFNEGLGETSYNCATTRIBKHRPROC	getSyncAttrib;
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		PFNEGLWAITSYNCKHRPROC		waitSync;
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		PFNEGLSIGNALSYNCKHRPROC		signalSync;
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	} m_ext;
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1153c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySyncTest::SyncTest (EglTestContext& eglTestCtx, EGLenum syncType, Extension extensions, const char* name, const char* description)
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: TestCase			(eglTestCtx, name, description)
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_syncType		(syncType)
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_extensions		(extensions)
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_eglDisplay		(EGL_NO_DISPLAY)
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_eglSurface		(EGL_NO_SURFACE)
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_nativeWindow	(DE_NULL)
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_eglContext		(EGL_NO_CONTEXT)
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	, m_sync			(EGL_NO_SYNC_KHR)
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.createSync		= DE_NULL;
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.destroySync		= DE_NULL;
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.clientWaitSync	= DE_NULL;
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.getSyncAttrib		= DE_NULL;
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.waitSync			= DE_NULL;
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1323c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySyncTest::~SyncTest (void)
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	SyncTest::deinit();
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid requiredEGLExtensions (EGLDisplay display, SyncTest::Extension requiredExtensions)
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	SyncTest::Extension foundExtensions = SyncTest::EXTENSION_NONE;
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::istringstream	extensionStream(eglQueryString(display, EGL_EXTENSIONS));
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	string				extension;
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TCU_CHECK_EGL_MSG("eglQueryString(display, EGL_EXTENSIONS)");
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	while (std::getline(extensionStream, extension, ' '))
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (extension == "EGL_KHR_fence_sync")
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			foundExtensions = (SyncTest::Extension)(foundExtensions | SyncTest::EXTENSION_FENCE_SYNC);
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (extension == "EGL_KHR_reusable_sync")
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			foundExtensions = (SyncTest::Extension)(foundExtensions | SyncTest::EXTENSION_REUSABLE_SYNC);
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (extension == "EGL_KHR_wait_sync")
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			foundExtensions = (SyncTest::Extension)(foundExtensions | SyncTest::EXTENSION_WAIT_SYNC);
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		const SyncTest::Extension missingExtensions = (SyncTest::Extension)((foundExtensions & requiredExtensions) ^ requiredExtensions);
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if ((missingExtensions & SyncTest::EXTENSION_FENCE_SYNC) != 0)
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::NotSupportedError("EGL_KHR_fence_sync not supported", "", __FILE__, __LINE__);
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if ((missingExtensions & SyncTest::EXTENSION_REUSABLE_SYNC) != 0)
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::NotSupportedError("EGL_KHR_reusable_sync not supported", "", __FILE__, __LINE__);
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if ((missingExtensions & SyncTest::EXTENSION_WAIT_SYNC) != 0)
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			throw tcu::NotSupportedError("EGL_KHR_wait_sync not supported", "", __FILE__, __LINE__);
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid requiredGLESExtensions (void)
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	bool				found = false;
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	std::istringstream	extensionStream((const char*)glGetString(GL_EXTENSIONS));
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	string				extension;
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	GLU_CHECK_MSG("glGetString(GL_EXTENSIONS)");
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	while (std::getline(extensionStream, extension, ' '))
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (extension == "GL_OES_EGL_sync")
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			found = true;
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (!found)
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		throw tcu::NotSupportedError("GL_OES_EGL_sync not supported", "", __FILE__, __LINE__);
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1873c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySyncTest::Extension getSyncTypeExtension (EGLenum syncType)
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	switch (syncType)
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case EGL_SYNC_FENCE_KHR:	return SyncTest::EXTENSION_FENCE_SYNC;
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		case EGL_SYNC_REUSABLE_KHR:	return SyncTest::EXTENSION_REUSABLE_SYNC;
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		default:
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(DE_FALSE);
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return SyncTest::EXTENSION_NONE;
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid SyncTest::init (void)
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const EGLint displayAttribList[] =
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGL_RENDERABLE_TYPE,	EGL_OPENGL_ES2_BIT,
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGL_SURFACE_TYPE,		EGL_WINDOW_BIT,
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGL_ALPHA_SIZE,			1,
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGL_NONE
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const EGLint contextAttribList[] =
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGL_CONTEXT_CLIENT_VERSION, 2,
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGL_NONE
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	};
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	tcu::egl::Display&	display = m_eglTestCtx.getDisplay();
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	vector<EGLConfig>	configs;
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	display.chooseConfig(displayAttribList, configs);
2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_eglDisplay	= display.getEGLDisplay();
2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_eglConfig 	= configs[0];
2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		const Extension syncTypeExtension = getSyncTypeExtension(m_syncType);
2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		requiredEGLExtensions(m_eglDisplay, (Extension)(m_extensions | syncTypeExtension));
2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.createSync		= (PFNEGLCREATESYNCKHRPROC)eglGetProcAddress("eglCreateSyncKHR");
2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.destroySync		= (PFNEGLDESTROYSYNCKHRPROC)eglGetProcAddress("eglDestroySyncKHR");
2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.clientWaitSync	= (PFNEGLCLIENTWAITSYNCKHRPROC)eglGetProcAddress("eglClientWaitSyncKHR");
2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.getSyncAttrib		= (PFNEGLGETSYNCATTRIBKHRPROC)eglGetProcAddress("eglGetSyncAttribKHR");
2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.waitSync			= (PFNEGLWAITSYNCKHRPROC)eglGetProcAddress("eglWaitSyncKHR");
2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_ext.signalSync		= (PFNEGLSIGNALSYNCKHRPROC)eglGetProcAddress("eglSignalSyncKHR");
2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Create context
2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TCU_CHECK_EGL_CALL(eglBindAPI(EGL_OPENGL_ES_API));
2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_eglContext = eglCreateContext(m_eglDisplay, m_eglConfig, EGL_NO_CONTEXT, contextAttribList);
2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TCU_CHECK_EGL_MSG("Failed to create GLES2 context");
2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Create surface
2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_nativeWindow = m_eglTestCtx.createNativeWindow(m_eglDisplay, m_eglConfig, DE_NULL, 480, 480, eglu::parseWindowVisibility(m_testCtx.getCommandLine()));
2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	m_eglSurface = eglu::createWindowSurface(m_eglTestCtx.getNativeDisplay(), *m_nativeWindow, m_eglDisplay, m_eglConfig, DE_NULL);
2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	TCU_CHECK_EGL_CALL(eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext));
2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	requiredGLESExtensions();
2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid SyncTest::deinit (void)
2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	if (m_eglDisplay != EGL_NO_DISPLAY)
2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_sync != EGL_NO_SYNC_KHR)
2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_CALL(m_ext.destroySync(m_eglDisplay, m_sync));
2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_sync = EGL_NO_SYNC_KHR;
2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_eglContext != EGL_NO_CONTEXT)
2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_CALL(eglDestroyContext(m_eglDisplay, m_eglContext));
2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_eglContext = EGL_NO_CONTEXT;
2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_eglSurface != EGL_NO_SURFACE)
2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_CALL(eglDestroySurface(m_eglDisplay, m_eglSurface));
2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_eglSurface = EGL_NO_SURFACE;
2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		delete m_nativeWindow;
2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_nativeWindow = DE_NULL;
2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_eglDisplay = EGL_NO_DISPLAY;
2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateNullAttribsTest : public SyncTest
2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					CreateNullAttribsTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "create_null_attribs", "create_null_attribs") {}
2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateEmptyAttribsTest : public SyncTest
2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					CreateEmptyAttribsTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "create_empty_attribs", "create_empty_attribs") {}
3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		const EGLint attribList[] = {
3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGL_NONE
3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		};
3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, attribList);
3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", { EGL_NONE })" << TestLog::EndMessage;
3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateInvalidDisplayTest : public SyncTest
3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					CreateInvalidDisplayTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "create_invalid_display", "create_invalid_display") {}
3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(EGL_NO_DISPLAY, m_syncType, NULL);
3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(EGL_NO_DISPLAY, " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_DISPLAY)
3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_DISPLAY" << TestLog::EndMessage;
3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_sync == EGL_NO_SYNC_KHR);
3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateInvalidTypeTest : public SyncTest
3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					CreateInvalidTypeTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "create_invalid_type", "create_invalid_type") {}
3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, EGL_NONE, NULL);
3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", EGL_NONE, NULL)" << TestLog::EndMessage;
3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_ATTRIBUTE)
3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_ATTRIBUTE" << TestLog::EndMessage;
3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_sync == EGL_NO_SYNC_KHR);
3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateInvalidAttribsTest : public SyncTest
3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					CreateInvalidAttribsTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "create_invalid_attribs", "create_invalid_attribs") {}
3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint attribs[] = {
3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			2, 3, 4, 5,
3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGL_NONE
3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		};
3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, attribs);
3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", { 2, 3, 4, 5, EGL_NONE })" << TestLog::EndMessage;
3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_ATTRIBUTE)
4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_ATTRIBUTE" << TestLog::EndMessage;
4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_sync == EGL_NO_SYNC_KHR);
4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateInvalidContextTest : public SyncTest
4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					CreateInvalidContextTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "create_invalid_context", "create_invalid_context") {}
4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglMakeCurrent(" << m_eglDisplay << ", EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)" << TestLog::EndMessage;
4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_MATCH)
4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_MATCH" << TestLog::EndMessage;
4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_sync == EGL_NO_SYNC_KHR);
4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitNoTimeoutTest : public SyncTest
4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitNoTimeoutTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_no_timeout", "wait_no_timeout") {}
4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.clientWaitSync(m_eglDisplay, m_sync, 0, 0);
4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", 0, 0)" << TestLog::EndMessage;
4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_syncType == EGL_SYNC_FENCE_KHR)
4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK(status == EGL_CONDITION_SATISFIED_KHR || status == EGL_TIMEOUT_EXPIRED_KHR);
4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (m_syncType == EGL_SYNC_REUSABLE_KHR)
4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK(status == EGL_TIMEOUT_EXPIRED_KHR);
4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else
4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(DE_FALSE);
4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitForeverTest : public SyncTest
4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitForeverTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_forever", "wait_forever") {}
4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_syncType == EGL_SYNC_REUSABLE_KHR)
4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGLBoolean ret = m_ext.signalSync(m_eglDisplay, m_sync, EGL_SIGNALED_KHR);
4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << ret << " = eglSignalSyncKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SIGNALED_KHR)" << TestLog::EndMessage;
4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_MSG("eglSignalSyncKHR()");
5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (m_syncType == EGL_SYNC_FENCE_KHR)
5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_CHECK_CALL(glFlush());
5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "glFlush()" << TestLog::EndMessage;
5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else
5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(DE_FALSE);
5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.clientWaitSync(m_eglDisplay, m_sync, 0, EGL_FOREVER_KHR);
5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", 0, EGL_FOREVER_KHR)" << TestLog::EndMessage;
5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_CONDITION_SATISFIED_KHR);
5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglClientWaitSyncKHR()");
5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitNoContextTest : public SyncTest
5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitNoContextTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_no_context", "wait_no_Context") {}
5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_syncType == EGL_SYNC_REUSABLE_KHR)
5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGLBoolean ret = m_ext.signalSync(m_eglDisplay, m_sync, EGL_SIGNALED_KHR);
5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << ret << " = eglSignalSyncKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SIGNALED_KHR)" << TestLog::EndMessage;
5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_MSG("eglSignalSyncKHR()");
5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (m_syncType == EGL_SYNC_FENCE_KHR)
5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_CHECK_CALL(glFlush());
5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "glFlush()" << TestLog::EndMessage;
5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else
5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(DE_FALSE);
5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglMakeCurrent(" << m_eglDisplay << ", EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)" << TestLog::EndMessage;
5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint result = m_ext.clientWaitSync(m_eglDisplay, m_sync, 0, EGL_FOREVER_KHR);
5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", 0, EGL_FOREVER_KHR)" << TestLog::EndMessage;
5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_CONDITION_SATISFIED_KHR);
5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitForeverFlushTest : public SyncTest
5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitForeverFlushTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_forever_flush", "wait_forever_flush") {}
5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_syncType == EGL_SYNC_REUSABLE_KHR)
5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGLBoolean ret = m_ext.signalSync(m_eglDisplay, m_sync, EGL_SIGNALED_KHR);
5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << ret << " = eglSignalSyncKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SIGNALED_KHR)" << TestLog::EndMessage;
5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_MSG("eglSignalSyncKHR()");
5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.clientWaitSync(m_eglDisplay, m_sync, EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR);
5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR)" << TestLog::EndMessage;
5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_CONDITION_SATISFIED_KHR);
5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitInvalidDisplayTest : public SyncTest
5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitInvalidDisplayTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_invalid_display", "wait_invalid_display") {}
5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate							(void)
6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.clientWaitSync(EGL_NO_DISPLAY, m_sync, EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR);
6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglClientWaitSyncKHR(EGL_NO_DISPLAY, " << m_sync << ", EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR)" << TestLog::EndMessage;
6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_DISPLAY)
6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_DISPLAY" << TestLog::EndMessage;
6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_FALSE);
6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitInvalidSyncTest : public SyncTest
6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitInvalidSyncTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_invalid_sync", "wait_invalid_sync") {}
6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.clientWaitSync(m_eglDisplay, EGL_NO_SYNC_KHR, 0, EGL_FOREVER_KHR);
6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", EGL_NO_SYNC_KHR, 0, EGL_FOREVER_KHR)" << TestLog::EndMessage;
6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_FALSE);
6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ClientWaitInvalidFlagTest : public SyncTest
6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					ClientWaitInvalidFlagTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "wait_invalid_flag", "wait_invalid_flag") {}
6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.clientWaitSync(m_eglDisplay, m_sync, 0xFFFFFFFF, EGL_FOREVER_KHR);
6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", 0xFFFFFFFF, EGL_FOREVER_KHR)" << TestLog::EndMessage;
6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_FALSE);
6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncTypeTest : public SyncTest
6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncTypeTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_type", "get_type") {}
6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate			(void)
7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint type = 0;
7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(m_ext.getSyncAttrib(m_eglDisplay, m_sync, EGL_SYNC_TYPE_KHR, &type));
7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglGetSyncAttribKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_TYPE_KHR, {" << type << "})" << TestLog::EndMessage;
7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(type == ((EGLint)m_syncType));
7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncStatusTest : public SyncTest
7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncStatusTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_status", "get_status") {}
7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate				(void)
7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = 0;
7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(m_ext.getSyncAttrib(m_eglDisplay, m_sync, EGL_SYNC_STATUS_KHR, &status));
7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglGetSyncAttribKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_STATUS_KHR, {" << status << "})" << TestLog::EndMessage;
7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_syncType == EGL_SYNC_FENCE_KHR)
7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK(status == EGL_SIGNALED_KHR || status == EGL_UNSIGNALED_KHR);
7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (m_syncType == EGL_SYNC_REUSABLE_KHR)
7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK(status == EGL_UNSIGNALED_KHR);
7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncStatusSignaledTest : public SyncTest
7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncStatusSignaledTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_status_signaled", "get_status_signaled") {}
7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.clientWaitSync);
7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (m_syncType == EGL_SYNC_REUSABLE_KHR)
7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGLBoolean ret = m_ext.signalSync(m_eglDisplay, m_sync, EGL_SIGNALED_KHR);
7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << ret << " = eglSignalSyncKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SIGNALED_KHR)" << TestLog::EndMessage;
7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK_EGL_MSG("eglSignalSyncKHR()");
7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (m_syncType == EGL_SYNC_FENCE_KHR)
7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			GLU_CHECK_CALL(glFinish());
7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "glFinish()" << TestLog::EndMessage;
7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else
7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			DE_ASSERT(DE_FALSE);
7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			EGLint status = m_ext.clientWaitSync(m_eglDisplay, m_sync, EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR);
7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << status << " = eglClientWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, EGL_FOREVER_KHR)" << TestLog::EndMessage;
7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			TCU_CHECK(status == EGL_CONDITION_SATISFIED_KHR);
7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = 0;
7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(m_ext.getSyncAttrib(m_eglDisplay, m_sync, EGL_SYNC_STATUS_KHR, &status));
7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglGetSyncAttribKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_STATUS_KHR, {" << status << "})" << TestLog::EndMessage;
7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_SIGNALED_KHR);
7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncConditionTest : public SyncTest
7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncConditionTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_condition", "get_condition") {}
8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint condition = 0;
8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(m_ext.getSyncAttrib(m_eglDisplay, m_sync, EGL_SYNC_CONDITION_KHR, &condition));
8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglGetSyncAttribKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_CONDITION_KHR, {" << condition << "})" << TestLog::EndMessage;
8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(condition == EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR);
8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncInvalidDisplayTest : public SyncTest
8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncInvalidDisplayTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_invalid_display", "get_invalid_display") {}
8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint condition = 0xF0F0F;
8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLBoolean result = m_ext.getSyncAttrib(EGL_NO_DISPLAY, m_sync, EGL_SYNC_CONDITION_KHR, &condition);
8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglGetSyncAttribKHR(EGL_NO_DISPLAY, " << m_sync << ", EGL_SYNC_CONDITION_KHR, {" << condition << "})" << TestLog::EndMessage;
8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_DISPLAY)
8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_DISPLAY" << TestLog::EndMessage;
8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_FALSE);
8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(condition == 0xF0F0F);
8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncInvalidSyncTest : public SyncTest
8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncInvalidSyncTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_invalid_sync", "get_invalid_sync") {}
8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint condition = 0xF0F0F;
8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLBoolean result = m_ext.getSyncAttrib(m_eglDisplay, EGL_NO_SYNC_KHR, EGL_SYNC_CONDITION_KHR, &condition);
8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglGetSyncAttribKHR(" << m_eglDisplay << ", EGL_NO_SYNC_KHR, EGL_SYNC_CONDITION_KHR, {" << condition << "})" << TestLog::EndMessage;
8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_FALSE);
8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(condition == 0xF0F0F);
8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncInvalidAttributeTest : public SyncTest
8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncInvalidAttributeTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_invalid_attribute", "get_invalid_attribute") {}
8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint condition = 0xF0F0F;
9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLBoolean result = m_ext.getSyncAttrib(m_eglDisplay, m_sync, EGL_NONE, &condition);
9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglGetSyncAttribKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_NONE, {" << condition << "})" << TestLog::EndMessage;
9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_ATTRIBUTE)
9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_ATTRIBUTE" << TestLog::EndMessage;
9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_FALSE);
9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(condition == 0xF0F0F);
9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GetSyncInvalidValueTest : public SyncTest
9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					GetSyncInvalidValueTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "get_invalid_value", "get_invalid_value") {}
9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.getSyncAttrib);
9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLBoolean result = m_ext.getSyncAttrib(m_eglDisplay, m_sync, EGL_SYNC_TYPE_KHR, NULL);
9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglGetSyncAttribKHR(" << m_eglDisplay << ", " << m_sync << ", EGL_SYNC_CONDITION_KHR, NULL)" << TestLog::EndMessage;
9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_FALSE);
9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DestroySyncTest : public SyncTest
9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					DestroySyncTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "destroy", "destroy") {}
9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate			(void)
9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.destroySync);
9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglDestroySyncKHR(" << m_eglDisplay << ", " << m_sync << ")" << TestLog::EndMessage;
9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_CALL(m_ext.destroySync(m_eglDisplay, m_sync));
9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = EGL_NO_SYNC_KHR;
9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DestroySyncInvalidDislayTest : public SyncTest
9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					DestroySyncInvalidDislayTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "destroy_invalid_display", "destroy_invalid_display") {}
9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate							(void)
9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.destroySync);
9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << "eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLBoolean result = m_ext.destroySync(EGL_NO_DISPLAY, m_sync);
10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglDestroySyncKHR(EGL_NO_DISPLAY, " << m_sync << ")" << TestLog::EndMessage;
10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_DISPLAY)
10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_DISPLAY" << TestLog::EndMessage;
10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_FALSE);
10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DestroySyncInvalidSyncTest : public SyncTest
10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					DestroySyncInvalidSyncTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_NONE, "destroy_invalid_sync", "destroy_invalid_sync") {}
10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.destroySync);
10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLBoolean result = m_ext.destroySync(m_eglDisplay, EGL_NO_SYNC_KHR);
10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << result << " = eglDestroySyncKHR(" << m_eglDisplay << ", EGL_NO_SYNC_KHR)" << TestLog::EndMessage;
10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(result == EGL_FALSE);
10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass WaitSyncTest : public SyncTest
10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					WaitSyncTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_WAIT_SYNC, "wait_server", "wait_server") {}
10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate			(void)
10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.waitSync);
10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.waitSync(m_eglDisplay, m_sync, 0);
10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", 0, 0)" << TestLog::EndMessage;
10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_TRUE);
10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		GLU_CHECK_CALL(glFinish());
10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass WaitSyncInvalidDisplayTest : public SyncTest
10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					WaitSyncInvalidDisplayTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_WAIT_SYNC, "wait_server_invalid_display", "wait_server_invalid_display") {}
10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate						(void)
10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.waitSync);
10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.waitSync(EGL_NO_DISPLAY, m_sync, 0);
10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglWaitSyncKHR(EGL_NO_DISPLAY, " << m_sync << ", 0)" << TestLog::EndMessage;
10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_DISPLAY)
11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_DISPLAY" << TestLog::EndMessage;
11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_FALSE);
11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass WaitSyncInvalidSyncTest : public SyncTest
11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					WaitSyncInvalidSyncTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_WAIT_SYNC, "wait_server_invalid_sync", "wait_server_invalid_sync") {}
11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.waitSync);
11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.waitSync(m_eglDisplay, EGL_NO_SYNC_KHR, 0);
11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglWaitSyncKHR(" << m_eglDisplay << ", EGL_NO_SYNC_KHR, 0)" << TestLog::EndMessage;
11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_FALSE);
11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass WaitSyncInvalidFlagTest : public SyncTest
11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry					WaitSyncInvalidFlagTest	(EglTestContext& eglTestCtx, EGLenum syncType) : SyncTest(eglTestCtx, syncType, SyncTest::EXTENSION_WAIT_SYNC, "wait_server_invalid_flag", "wait_server_invalid_flag") {}
11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	IterateResult	iterate					(void)
11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestLog& log = m_testCtx.getLog();
11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.createSync);
11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(m_ext.waitSync);
11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_sync = m_ext.createSync(m_eglDisplay, m_syncType, NULL);
11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << m_sync << " = eglCreateSyncKHR(" << m_eglDisplay << ", " << getSyncTypeName(m_syncType) << ", NULL)" << TestLog::EndMessage;
11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK_EGL_MSG("eglCreateSyncKHR()");
11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint status = m_ext.waitSync(m_eglDisplay, m_sync, 0xFFFFFFFF);
11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << status << " = eglWaitSyncKHR(" << m_eglDisplay << ", " << m_sync << ", 0xFFFFFFFF)" << TestLog::EndMessage;
11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		EGLint error = eglGetError();
11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		log << TestLog::Message << error << " = eglGetError()" << TestLog::EndMessage;
11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (error != EGL_BAD_PARAMETER)
11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		{
11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			log << TestLog::Message << "Unexpected error '" << eglu::getErrorStr(error) << "' expected EGL_BAD_PARAMETER" << TestLog::EndMessage;
11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			return STOP;
11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		}
11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TCU_CHECK(status == EGL_FALSE);
11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return STOP;
11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous
11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11833c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFenceSyncTests::FenceSyncTests (EglTestContext& eglTestCtx)
11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: TestCaseGroup	(eglTestCtx, "fence_sync", "EGL_KHR_fence_sync extension tests")
11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FenceSyncTests::init (void)
11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Add valid API test
11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestCaseGroup* const valid = new TestCaseGroup(m_eglTestCtx, "valid", "Valid function calls");
11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglCreateSyncKHR tests
11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new CreateNullAttribsTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new CreateEmptyAttribsTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglClientWaitSyncKHR tests
11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitNoTimeoutTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitForeverTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitNoContextTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitForeverFlushTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglGetSyncAttribKHR tests
12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncTypeTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncStatusTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncStatusSignaledTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncConditionTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglDestroySyncKHR tests
12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new DestroySyncTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglWaitSyncKHR tests
12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new WaitSyncTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		addChild(valid);
12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Add negative API tests
12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestCaseGroup* const invalid = new TestCaseGroup(m_eglTestCtx, "invalid", "Invalid function calls");
12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglCreateSyncKHR tests
12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidTypeTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidAttribsTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidContextTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglClientWaitSyncKHR tests
12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new ClientWaitInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new ClientWaitInvalidSyncTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new ClientWaitInvalidFlagTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglGetSyncAttribKHR tests
12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidSyncTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidAttributeTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidValueTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglDestroySyncKHR tests
12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new DestroySyncInvalidDislayTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new DestroySyncInvalidSyncTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglWaitSyncKHR tests
12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new WaitSyncInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new WaitSyncInvalidSyncTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new WaitSyncInvalidFlagTest(m_eglTestCtx, EGL_SYNC_FENCE_KHR));
12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		addChild(invalid);
12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12533c827367444ee418f129b2c238299f49d3264554Jarkko PoyryReusableSyncTests::ReusableSyncTests (EglTestContext& eglTestCtx)
12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	: TestCaseGroup	(eglTestCtx, "reusable_sync", "EGL_KHR_reusable_sync extension tests")
12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ReusableSyncTests::init (void)
12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Add valid API test
12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestCaseGroup* const valid = new TestCaseGroup(m_eglTestCtx, "valid", "Valid function calls");
12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglCreateSyncKHR tests
12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new CreateNullAttribsTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new CreateEmptyAttribsTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglClientWaitSyncKHR tests
12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitNoTimeoutTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitForeverTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitNoContextTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new ClientWaitForeverFlushTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglGetSyncAttribKHR tests
12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncTypeTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncStatusTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new GetSyncStatusSignaledTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglDestroySyncKHR tests
12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new DestroySyncTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglWaitSyncKHR tests
12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		valid->addChild(new WaitSyncTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		addChild(valid);
12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Add negative API tests
12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		TestCaseGroup* const invalid = new TestCaseGroup(m_eglTestCtx, "invalid", "Invalid function calls");
12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglCreateSyncKHR tests
12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidTypeTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidAttribsTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new CreateInvalidContextTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglClientWaitSyncKHR tests
12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new ClientWaitInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new ClientWaitInvalidSyncTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new ClientWaitInvalidFlagTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglGetSyncAttribKHR tests
13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidSyncTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidAttributeTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new GetSyncInvalidValueTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglDestroySyncKHR tests
13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new DestroySyncInvalidDislayTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new DestroySyncInvalidSyncTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		// eglWaitSyncKHR tests
13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new WaitSyncInvalidDisplayTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new WaitSyncInvalidSyncTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		invalid->addChild(new WaitSyncInvalidFlagTest(m_eglTestCtx, EGL_SYNC_REUSABLE_KHR));
13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		addChild(invalid);
13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl
13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp
1324