199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi/*------------------------------------------------------------------------- 299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * drawElements Quality Program EGL Module 399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * --------------------------------------- 499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * 599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * Copyright 2016 The Android Open Source Project 699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * 799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * Licensed under the Apache License, Version 2.0 (the "License"); 899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * you may not use this file except in compliance with the License. 999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * You may obtain a copy of the License at 1099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * 1199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * http://www.apache.org/licenses/LICENSE-2.0 1299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * 1399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * Unless required by applicable law or agreed to in writing, software 1499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * distributed under the License is distributed on an "AS IS" BASIS, 1599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * See the License for the specific language governing permissions and 1799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * limitations under the License. 1899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * 1999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi *//*! 2099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * \file 2199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi * \brief EGL thread clean up tests 2299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi *//*--------------------------------------------------------------------*/ 2399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 2499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "teglThreadCleanUpTests.hpp" 2599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 2699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "egluUtil.hpp" 2799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "egluUnique.hpp" 2899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "egluConfigFilter.hpp" 2999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 3099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "eglwLibrary.hpp" 3199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "eglwEnums.hpp" 3299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 3399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "tcuMaybe.hpp" 3499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "tcuTestLog.hpp" 3599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 3699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi#include "deThread.hpp" 3799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 3899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvinamespace deqp 3999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 4099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvinamespace egl 4199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 4299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvinamespace 4399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 4499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 4599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärviusing namespace eglw; 4699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärviusing tcu::TestLog; 4799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 4899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvibool isES2Renderable (const eglu::CandidateConfig& c) 4999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 5099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return (c.get(EGL_RENDERABLE_TYPE) & EGL_OPENGL_ES2_BIT) == EGL_OPENGL_ES2_BIT; 5199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi} 5299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 5399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvibool isPBuffer (const eglu::CandidateConfig& c) 5499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 5599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return (c.surfaceType() & EGL_PBUFFER_BIT) == EGL_PBUFFER_BIT; 5699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi} 5799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 5899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärviclass Thread : public de::Thread 5999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 6099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvipublic: 6199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi Thread (const Library& egl, EGLDisplay display, EGLSurface surface, EGLContext context, EGLConfig config, tcu::Maybe<eglu::Error>& error) 6299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi : m_egl (egl) 6399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_display (display) 6499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_surface (surface) 6599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_context (context) 6699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_config (config) 6799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_error (error) 6899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 6999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 7099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 7199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi void testContext (EGLContext context) 7299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 7399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_surface != EGL_NO_SURFACE) 7499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 7599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLU_CHECK_MSG(m_egl, "eglCreateContext"); 7699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_egl.makeCurrent(m_display, m_surface, m_surface, context); 7799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLU_CHECK_MSG(m_egl, "eglMakeCurrent"); 7899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 7999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi else 8099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 8199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const EGLint attribs[] = 8299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 8399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_WIDTH, 32, 8499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_HEIGHT, 32, 8599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_NONE 8699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi }; 8799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const eglu::UniqueSurface surface (m_egl, m_display, m_egl.createPbufferSurface(m_display, m_config, attribs)); 8899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 8999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLU_CHECK_MSG(m_egl, "eglCreateContext"); 9099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_egl.makeCurrent(m_display, *surface, *surface, context); 9199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLU_CHECK_MSG(m_egl, "eglMakeCurrent"); 9299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 9399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 9499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 9599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi void run (void) 9699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 9799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi try 9899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 99653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos const EGLint attribList[] = 10099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 10199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_CONTEXT_CLIENT_VERSION, 2, 10299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_NONE 10399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi }; 10499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 10599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_egl.bindAPI(EGL_OPENGL_ES_API); 10699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 10799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_context == EGL_NO_CONTEXT) 10899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 10999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const eglu::UniqueContext context (m_egl, m_display, m_egl.createContext(m_display, m_config, EGL_NO_CONTEXT, attribList)); 11099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 11199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi testContext(*context); 11299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 11399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi else 11499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 11599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi testContext(m_context); 11699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 11799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 11899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 11999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi catch (const eglu::Error& error) 12099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 12199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_error = error; 12299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 12399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 12499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 12599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärviprivate: 12699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const Library& m_egl; 12799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const EGLDisplay m_display; 12899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const EGLSurface m_surface; 12999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const EGLContext m_context; 13099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const EGLConfig m_config; 13199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi tcu::Maybe<eglu::Error>& m_error; 13299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi}; 13399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 13499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärviclass ThreadCleanUpTest : public TestCase 13599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 13699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvipublic: 13799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi enum ContextType 13899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 13999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi CONTEXTTYPE_SINGLE = 0, 14099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi CONTEXTTYPE_MULTI 14199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi }; 14299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 14399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi enum SurfaceType 14499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 14599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi SURFACETYPE_SINGLE = 0, 14699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi SURFACETYPE_MULTI 14799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi }; 14899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 14999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi static std::string testCaseName (ContextType contextType, SurfaceType surfaceType) 15099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 15199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi std::string name; 15299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 15399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (contextType == CONTEXTTYPE_SINGLE) 15499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi name += "single_context_"; 15599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi else 15699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi name += "multi_context_"; 15799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 15899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (surfaceType ==SURFACETYPE_SINGLE) 15999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi name += "single_surface"; 16099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi else 16199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi name += "multi_surface"; 16299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 16399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return name; 16499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 16599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 16699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 16799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi ThreadCleanUpTest (EglTestContext& eglTestCtx, ContextType contextType, SurfaceType surfaceType) 16899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi : TestCase (eglTestCtx, testCaseName(contextType, surfaceType).c_str(), "Simple thread context clean up test") 16999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_contextType (contextType) 17099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_surfaceType (surfaceType) 17199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_iterCount (250) 17299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_iterNdx (0) 17399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_display (EGL_NO_DISPLAY) 17499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_config (0) 17599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi , m_surface (EGL_NO_SURFACE) 176e12d5fa7246dca6af962249786ec7396129945d1Pyry Haulos , m_context (EGL_NO_CONTEXT) 17799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 17899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 17999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 18099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi ~ThreadCleanUpTest (void) 18199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 18299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi deinit(); 18399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 18499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 18599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi void init (void) 18699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 18799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const Library& egl = m_eglTestCtx.getLibrary(); 18899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 18999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_display = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 19099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 19199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 19299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi eglu::FilterList filters; 19399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi filters << isES2Renderable << isPBuffer; 19499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_config = eglu::chooseSingleConfig(egl, m_display, filters); 19599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 19699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 19799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_contextType == CONTEXTTYPE_SINGLE) 19899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 199653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos const EGLint attribList[] = 20099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 20199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_CONTEXT_CLIENT_VERSION, 2, 20299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_NONE 20399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi }; 20499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 20599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi egl.bindAPI(EGL_OPENGL_ES_API); 20699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 20799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_context = egl.createContext(m_display, m_config, EGL_NO_CONTEXT, attribList); 20899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLU_CHECK_MSG(egl, "Failed to create context"); 20999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 21099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 21199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_surfaceType == SURFACETYPE_SINGLE) 21299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 21399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const EGLint attribs[] = 21499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 21599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_WIDTH, 32, 21699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_HEIGHT, 32, 21799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGL_NONE 21899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi }; 21999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 22099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_surface = egl.createPbufferSurface(m_display, m_config, attribs); 22199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLU_CHECK_MSG(egl, "Failed to create surface"); 22299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 22399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 22499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 22599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi void deinit (void) 22699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 22799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const Library& egl = m_eglTestCtx.getLibrary(); 22899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 22999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_surface != EGL_NO_SURFACE) 23099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 23199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi egl.destroySurface(m_display, m_surface); 23299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_surface = EGL_NO_SURFACE; 23399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 23499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 23599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_context != EGL_NO_CONTEXT) 23699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 23799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi egl.destroyContext(m_display, m_context); 23899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_context = EGL_NO_CONTEXT; 23999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 24099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 24199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_display != EGL_NO_DISPLAY) 24299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 24399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi egl.terminate(m_display); 24499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_display = EGL_NO_DISPLAY; 24599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 24699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 24799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 24899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi IterateResult iterate (void) 24999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 25099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (m_iterNdx < m_iterCount) 25199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 25299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi tcu::Maybe<eglu::Error> error; 25399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 25499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi Thread thread (m_eglTestCtx.getLibrary(), m_display, m_surface, m_context, m_config, error); 25599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 25699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi thread.start(); 25799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi thread.join(); 25899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 25999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi if (error) 26099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 26199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_testCtx.getLog() << TestLog::Message << "Failed. Got error: " << error->getMessage() << TestLog::EndMessage; 26299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, error->getMessage()); 26399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return STOP; 26499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 26599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 26699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_iterNdx++; 26799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return CONTINUE; 26899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 26999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi else 27099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi { 27199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 27299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return STOP; 27399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 27499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi } 27599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 27699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärviprivate: 27799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const ContextType m_contextType; 27899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const SurfaceType m_surfaceType; 27999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi const size_t m_iterCount; 28099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi size_t m_iterNdx; 28199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLDisplay m_display; 28299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLConfig m_config; 28399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLSurface m_surface; 28499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi EGLContext m_context; 28599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi}; 28699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 28799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi} // anonymous 28899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 28999660c6a490c93776b69f23a05a1cd40a5d97d73Mika IsojärviTestCaseGroup* createThreadCleanUpTest (EglTestContext& eglTestCtx) 29099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi{ 29199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi de::MovePtr<TestCaseGroup> group (new TestCaseGroup(eglTestCtx, "thread_cleanup", "Thread cleanup tests")); 29299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 29399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi group->addChild(new ThreadCleanUpTest(eglTestCtx, ThreadCleanUpTest::CONTEXTTYPE_SINGLE, ThreadCleanUpTest::SURFACETYPE_SINGLE)); 29499660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi group->addChild(new ThreadCleanUpTest(eglTestCtx, ThreadCleanUpTest::CONTEXTTYPE_MULTI, ThreadCleanUpTest::SURFACETYPE_SINGLE)); 29599660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 29699660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi group->addChild(new ThreadCleanUpTest(eglTestCtx, ThreadCleanUpTest::CONTEXTTYPE_SINGLE, ThreadCleanUpTest::SURFACETYPE_MULTI)); 29799660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi group->addChild(new ThreadCleanUpTest(eglTestCtx, ThreadCleanUpTest::CONTEXTTYPE_MULTI, ThreadCleanUpTest::SURFACETYPE_MULTI)); 29899660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 29999660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi return group.release(); 30099660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi} 30199660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi 30299660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi} // egl 30399660c6a490c93776b69f23a05a1cd40a5d97d73Mika Isojärvi} // deqp 304