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