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 gles2 sharing threaded tests 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "teglGLES2SharingThreadedTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "tcuThreadUtil.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deRandom.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deThread.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deSharedPtr.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deMutex.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deSemaphore.hpp" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deStringUtil.hpp" 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deClock.h" 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deString.h" 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deMemory.h" 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deMath.h" 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluDefs.hpp" 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 433c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "glwEnums.hpp" 443c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "glwFunctions.hpp" 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "egluUtil.hpp" 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 483c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwLibrary.hpp" 493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos#include "eglwEnums.hpp" 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector> 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string> 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <memory> 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <sstream> 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector; 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string; 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing de::SharedPtr; 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 603c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace glw; 613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosusing namespace eglw; 623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace egl 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace GLES2ThreadTest 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture; 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Buffer; 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Shader; 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Program; 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GLES2ResourceManager 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> popTexture (int index); 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const SharedPtr<Texture> getTexture (int index) const { return m_textures[index]; } 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addTexture (SharedPtr<Texture> texture) { m_textures.push_back(texture); } 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getTextureCount (void) const { return (int)m_textures.size(); } 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> popBuffer (int index); 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const SharedPtr<Buffer> getBuffer (int index) const { return m_buffers[index]; } 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addBuffer (SharedPtr<Buffer> buffer) { m_buffers.push_back(buffer); } 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getBufferCount (void) const { return (int)m_buffers.size(); } 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> popShader (int index); 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const SharedPtr<Shader> getShader (int index) const { return m_shaders[index]; } 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addShader (SharedPtr<Shader> shader) { m_shaders.push_back(shader); } 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getShaderCount (void) const { return (int)m_shaders.size(); } 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> popProgram (int index); 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const SharedPtr<Program> getProgram (int index) const { return m_programs[index]; } 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addProgram (SharedPtr<Program> program) { m_programs.push_back(program); } 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getProgramCount (void) const { return (int)m_programs.size(); } 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<Texture> > m_textures; 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<Buffer> > m_buffers; 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<Shader> > m_shaders; 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<Program> > m_programs; 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1063c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<Texture> GLES2ResourceManager::popTexture (int index) 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> texture = m_textures[index]; 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_textures.erase(m_textures.begin() + index); 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return texture; 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1153c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<Buffer> GLES2ResourceManager::popBuffer (int index) 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> buffer = m_buffers[index]; 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_buffers.erase(m_buffers.begin() + index); 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return buffer; 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1243c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<Shader> GLES2ResourceManager::popShader (int index) 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> shader = m_shaders[index]; 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_shaders.erase(m_shaders.begin() + index); 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return shader; 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1333c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<Program> GLES2ResourceManager::popProgram (int index) 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> program = m_programs[index]; 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_programs.erase(m_programs.begin() + index); 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return program; 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GLES2Context : public tcu::ThreadUtil::Object 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2Context (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<GLES2ResourceManager> resourceManager); 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~GLES2Context (void); 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Call generation time attributes 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ResourceManager> resourceManager; 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Run time attributes 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay display; 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLContext context; 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos glEGLImageTargetTexture2DOESFunc imageTargetTexture2D; 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } glExtensions; 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2Context (const GLES2Context&); 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2Context& operator= (const GLES2Context&); 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2Context::GLES2Context (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<GLES2ResourceManager> resourceManager_) 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Object ("Context", event) 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , resourceManager (resourceManager_) 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , display (EGL_NO_DISPLAY) 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , context (EGL_NO_CONTEXT) 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos glExtensions.imageTargetTexture2D = DE_NULL; 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1733c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2Context::~GLES2Context (void) 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Surface : public tcu::ThreadUtil::Object 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Surface (SharedPtr<tcu::ThreadUtil::Event> event); 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Surface (void); 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Run time attributes 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLSurface surface; 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Surface (const Surface&); 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Surface& operator= (const Surface&); 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1913c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySurface::Surface (SharedPtr<tcu::ThreadUtil::Event> event) 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Object ("Surface", event) 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , surface (EGL_NO_SURFACE) 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1973c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySurface::~Surface (void) 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGL thread with thread specifig state 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EGLThread : public tcu::ThreadUtil::Thread 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 2053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread (const Library& egl_, const glw::Functions& gl_, int seed); 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~EGLThread (void); 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void deinit (void); 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl; 2103c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const glw::Functions& gl; 2113c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Generation time attributes 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> context; 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Surface> surface; 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Runtime attributes 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> runtimeContext; 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLSurface eglSurface; 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry HaulosEGLThread::EGLThread (const Library& egl_, const glw::Functions& gl_, int seed) 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Thread (seed) 2253c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , egl (egl_) 2263c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos , gl (gl_) 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , eglSurface (EGL_NO_SURFACE) 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid EGLThread::deinit (void) 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (runtimeContext) 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (runtimeContext->context != EGL_NO_CONTEXT) 2363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos egl.makeCurrent(runtimeContext->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2383c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos egl.destroyContext(runtimeContext->display, runtimeContext->context); 239fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi runtimeContext->context = EGL_NO_CONTEXT; 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 241fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi egl.destroySurface(runtimeContext->display, eglSurface); 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry eglSurface = EGL_NO_SURFACE; 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos egl.releaseThread(); 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2483c827367444ee418f129b2c238299f49d3264554Jarkko PoyryEGLThread::~EGLThread (void) 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 250fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi EGLThread::deinit(); 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass FenceSync 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry FenceSync (void); 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~FenceSync (void); 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (EGLThread& thread, bool serverSync); 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool waitReady (EGLThread& thread); 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addWaiter (void); 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_display; 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLSyncKHR m_sync; 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Mutex m_lock; 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_waiterCount; 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_serverSync; 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2723c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFenceSync::FenceSync (void) 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : m_display (EGL_NO_DISPLAY) 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_sync (NULL) 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_waiterCount (0) 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_serverSync (false) 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2803c827367444ee418f129b2c238299f49d3264554Jarkko PoyryFenceSync::~FenceSync (void) 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FenceSync::addWaiter (void) 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lock.lock(); 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_waiterCount++; 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lock.unlock(); 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid FenceSync::init (EGLThread& thread, bool serverSync) 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_display = thread.runtimeContext->display; 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_serverSync = serverSync; 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Use sync only if somebody will actualy depend on it 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lock.lock(); 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_waiterCount > 0) 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos thread.newMessage() << "Begin -- eglCreateSyncKHR(" << ((size_t)m_display) << ", EGL_SYNC_FENCE_KHR, DE_NULL)" << tcu::ThreadUtil::Message::End; 3013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_sync = thread.egl.createSyncKHR(m_display, EGL_SYNC_FENCE_KHR, DE_NULL); 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << ((size_t)m_sync) << " = eglCreateSyncKHR()" << tcu::ThreadUtil::Message::End; 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK(m_sync); 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lock.unlock(); 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyrybool FenceSync::waitReady (EGLThread& thread) 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool ok = true; 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_serverSync) 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglWaitSyncKHR(" << ((size_t)m_display) << ", " << ((size_t)m_sync) << ", 0)" << tcu::ThreadUtil::Message::End; 3143c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLint result = thread.egl.waitSyncKHR(m_display, m_sync, 0); 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << result << " = eglWaitSyncKHR()" << tcu::ThreadUtil::Message::End; 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ok = result == EGL_TRUE; 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglClientWaitSyncKHR(" << ((size_t)m_display) << ", " << ((size_t)m_sync) << ", EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, 1000 000 000)" << tcu::ThreadUtil::Message::End; 3213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLint result = thread.egl.clientWaitSyncKHR(m_display, m_sync, EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, 1000000000); 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << result << " = eglClientWaitSyncKHR()" << tcu::ThreadUtil::Message::End; 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ok = result == EGL_CONDITION_SATISFIED_KHR; 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lock.lock(); 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_waiterCount--; 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_waiterCount >= 0); 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_waiterCount == 0) 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note [mika] This is no longer deterministic and eglDestroySyncKHR might happen in different places and in different threads 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglDestroySyncKHR(" << ((size_t)m_display) << ", " << ((size_t)m_sync) << ")" << tcu::ThreadUtil::Message::End; 3343c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLint destroyResult = thread.egl.destroySyncKHR(m_display, m_sync); 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << destroyResult << " = eglDestroySyncKHR()" << tcu::ThreadUtil::Message::End; 3363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_sync = DE_NULL; 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lock.unlock(); 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return ok; 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Object : public tcu::ThreadUtil::Object 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Object (const char* type, SharedPtr<tcu::ThreadUtil::Event> e, SharedPtr<FenceSync> sync); 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~Object (void); 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void readGL (SharedPtr<FenceSync> sync, std::vector<SharedPtr<FenceSync> >& deps); 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void modifyGL (SharedPtr<FenceSync> sync, std::vector<SharedPtr<FenceSync> >& deps); 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<FenceSync> m_modifySync; 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<SharedPtr<FenceSync> > m_readSyncs; 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3583c827367444ee418f129b2c238299f49d3264554Jarkko PoyryObject::Object (const char* type, SharedPtr<tcu::ThreadUtil::Event> e, SharedPtr<FenceSync> sync) 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Object (type, e) 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_modifySync (sync) 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3643c827367444ee418f129b2c238299f49d3264554Jarkko PoyryObject::~Object (void) 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid Object::readGL (SharedPtr<FenceSync> sync, std::vector<SharedPtr<FenceSync> >& deps) 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_modifySync) 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_modifySync->addWaiter(); 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Make call depend on last modifying call 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deps.push_back(m_modifySync); 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Add read dependency 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_readSyncs.push_back(sync); 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid Object::modifyGL (SharedPtr<FenceSync> sync, std::vector<SharedPtr<FenceSync> >& deps) 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Make call depend on all reads 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int readNdx = 0; readNdx < (int)m_readSyncs.size(); readNdx++) 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_readSyncs[readNdx]) 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_readSyncs[readNdx]->addWaiter(); 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deps.push_back(m_readSyncs[readNdx]); 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_modifySync) 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_modifySync->addWaiter(); 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deps.push_back(m_modifySync); 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Update last modifying call 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_modifySync = sync; 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Clear read dependencies of last "version" of this object 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_readSyncs.clear(); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Operation : public tcu::ThreadUtil::Operation 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Operation (const char* name, bool useSync, bool serverSync); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~Operation (void); 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<FenceSync> getSync (void) { return m_sync; } 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void readGLObject (SharedPtr<Object> object); 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void modifyGLObject (SharedPtr<Object> object); 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void execute (tcu::ThreadUtil::Thread& thread); 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_useSync; 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_serverSync; 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<FenceSync> > m_syncDeps; 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<FenceSync> m_sync; 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4223c827367444ee418f129b2c238299f49d3264554Jarkko PoyryOperation::Operation (const char* name, bool useSync, bool serverSync) 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation (name) 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_useSync (useSync) 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_serverSync (serverSync) 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_sync (useSync ? SharedPtr<FenceSync>(new FenceSync()) : SharedPtr<FenceSync>()) 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4303c827367444ee418f129b2c238299f49d3264554Jarkko PoyryOperation::~Operation (void) 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid Operation::readGLObject (SharedPtr<Object> object) 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry object->read(m_event, m_deps); 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry object->readGL(m_sync, m_syncDeps); 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid Operation::modifyGLObject (SharedPtr<Object> object) 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry object->modify(m_event, m_deps); 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry object->modifyGL(m_sync, m_syncDeps); 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4463c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid Operation::execute (tcu::ThreadUtil::Thread& t) 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4483c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 4493c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool success = true; 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Wait for dependencies and check that they succeeded 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int depNdx = 0; depNdx < (int)m_deps.size(); depNdx++) 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!m_deps[depNdx]->waitReady()) 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry success = false; 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Try execute operation 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (success) 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry try 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_useSync) 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int depNdx = 0; depNdx < (int)m_syncDeps.size(); depNdx++) 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLThread* eglThread = dynamic_cast<EGLThread*>(&thread); 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(eglThread); 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_syncDeps[depNdx]->waitReady(*eglThread) != tcu::ThreadUtil::Event::RESULT_OK) 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry success = false; 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4773fdee359c9eee4d6c1d823b23f7f64631b5945f8Jarkko Pöyry 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (success) 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry exec(thread); 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_useSync) 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLThread* eglThread = dynamic_cast<EGLThread*>(&thread); 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(eglThread); 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_sync->init(*eglThread, m_serverSync); 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glFlush()" << tcu::ThreadUtil::Message::End; 4873c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, flush()); 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glFlush()" << tcu::ThreadUtil::Message::End; 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glFinish()" << tcu::ThreadUtil::Message::End; 4933c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, finish()); 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glFinish()" << tcu::ThreadUtil::Message::End; 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry catch (...) 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Got exception event failed 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_event->setResult(tcu::ThreadUtil::Event::RESULT_FAILED); 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw; 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 506fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi if (success) 507fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_event->setResult(tcu::ThreadUtil::Event::RESULT_OK); 508fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi else 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_event->setResult(tcu::ThreadUtil::Event::RESULT_FAILED); 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_deps.clear(); 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_event = SharedPtr<tcu::ThreadUtil::Event>(); 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_syncDeps.clear(); 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_sync = SharedPtr<FenceSync>(); 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EGLImage : public Object 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLImage (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync); 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~EGLImage (void) {} 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLImageKHR image; 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// EGLResource manager 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass EGLResourceManager 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addContext (SharedPtr<GLES2Context> context) { m_contexts.push_back(context); } 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addSurface (SharedPtr<Surface> surface) { m_surfaces.push_back(surface); } 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addImage (SharedPtr<EGLImage> image) { m_images.push_back(image); } 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Surface> popSurface (int index); 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> popContext (int index); 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<EGLImage> popImage (int index); 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getContextCount (void) const { return (int)m_contexts.size(); } 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getSurfaceCount (void) const { return (int)m_surfaces.size(); } 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int getImageCount (void) const { return (int)m_images.size(); } 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<GLES2Context> > m_contexts; 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<Surface> > m_surfaces; 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<SharedPtr<EGLImage> > m_images; 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5493c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<Surface> EGLResourceManager::popSurface (int index) 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Surface> surface = m_surfaces[index]; 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_surfaces.erase(m_surfaces.begin() + index); 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return surface; 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5563c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<GLES2Context> EGLResourceManager::popContext (int index) 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> context = m_contexts[index]; 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_contexts.erase(m_contexts.begin() + index); 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return context; 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5633c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedPtr<EGLImage> EGLResourceManager::popImage (int index) 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<EGLImage> image = m_images[index]; 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_images.erase(m_images.begin() + index); 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return image; 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateContext : public tcu::ThreadUtil::Operation 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateContext (EGLDisplay display, EGLConfig config, SharedPtr<GLES2Context> shared, SharedPtr<GLES2Context>& context); 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_display; 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLConfig m_config; 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> m_shared; 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> m_context; 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5843c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateContext::CreateContext (EGLDisplay display, EGLConfig config, SharedPtr<GLES2Context> shared, SharedPtr<GLES2Context>& context) 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation ("CreateContext") 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_display (display) 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_config (config) 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_shared (shared) 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (shared) 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(shared)); 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry context = SharedPtr<GLES2Context>(new GLES2Context(getEvent(), (shared ? shared->resourceManager : SharedPtr<GLES2ResourceManager>(new GLES2ResourceManager)))); 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_context = context; 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5973c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreateContext::exec (tcu::ThreadUtil::Thread& t) 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 5993c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_context->display = m_display; 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint attriblist[] = 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_CONTEXT_CLIENT_VERSION, 2, 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglBindAPI(EGL_OPENGL_ES_API)" << tcu::ThreadUtil::Message::End; 6093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(thread.egl, bindAPI(EGL_OPENGL_ES_API)); 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- eglBindAPI()" << tcu::ThreadUtil::Message::End; 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_shared) 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_shared->context != EGL_NO_CONTEXT); 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_shared->display != EGL_NO_DISPLAY); 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_shared->display == m_display); 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglCreateContext(" << m_display << ", " << m_config << ", " << m_shared->context << ", { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE })" << tcu::ThreadUtil::Message::End; 6193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_context->context = thread.egl.createContext(m_display, m_config, m_shared->context, attriblist); 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << m_context->context << " = eglCreateContext()" << tcu::ThreadUtil::Message::End; 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglCreateContext(" << m_display << ", " << m_config << ", EGL_NO_CONTEXT, { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE })" << tcu::ThreadUtil::Message::End; 6253c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_context->context = thread.egl.createContext(m_display, m_config, EGL_NO_CONTEXT, attriblist); 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << m_context->context << " = eglCreateContext()" << tcu::ThreadUtil::Message::End; 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_MSG(thread.egl, "Failed to create GLES2 context"); 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK(m_context->context != EGL_NO_CONTEXT); 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DestroyContext : public tcu::ThreadUtil::Operation 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DestroyContext (SharedPtr<GLES2Context> contex); 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> m_context; 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6433c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDestroyContext::DestroyContext (SharedPtr<GLES2Context> contex) 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation ("DestroyContext") 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_context (contex) 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(m_context)); 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DestroyContext::exec (tcu::ThreadUtil::Thread& t) 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6523c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 6533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglDestroyContext(" << m_context->display << ", " << m_context->context << ")" << tcu::ThreadUtil::Message::End; 6553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(thread.egl, destroyContext(m_context->display, m_context->context)); 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- eglDestroyContext()" << tcu::ThreadUtil::Message::End; 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_context->display = EGL_NO_DISPLAY; 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_context->context = EGL_NO_CONTEXT; 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass MakeCurrent : public tcu::ThreadUtil::Operation 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MakeCurrent (EGLThread& thread, EGLDisplay display, SharedPtr<Surface> surface, SharedPtr<GLES2Context> context); 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_display; 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Surface> m_surface; 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2Context> m_context; 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6743c827367444ee418f129b2c238299f49d3264554Jarkko PoyryMakeCurrent::MakeCurrent (EGLThread& thread, EGLDisplay display, SharedPtr<Surface> surface, SharedPtr<GLES2Context> context) 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation ("MakeCurrent") 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_display (display) 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_surface (surface) 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_context (context) 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context) 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(m_context)); 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_surface) 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(m_surface)); 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Release old contexts 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (thread.context) 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(thread.context)); 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Release old surface 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (thread.surface) 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(thread.surface)); 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.context = m_context; 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.surface = m_surface; 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid MakeCurrent::exec (tcu::ThreadUtil::Thread& t) 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7043c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_context) 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.eglSurface = m_surface->surface; 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.runtimeContext = m_context; 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_surface); 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglMakeCurrent(" << m_display << ", " << m_surface->surface << ", " << m_surface->surface << ", " << m_context->context << ")" << tcu::ThreadUtil::Message::End; 7133c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(thread.egl, makeCurrent(m_display, m_surface->surface, m_surface->surface, m_context->context)); 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- eglMakeCurrent()" << tcu::ThreadUtil::Message::End; 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.runtimeContext = m_context; 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglMakeCurrent(" << m_display << ", EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)" << tcu::ThreadUtil::Message::End; 7213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(thread.egl, makeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)); 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- eglMakeCurrent()" << tcu::ThreadUtil::Message::End; 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass InitGLExtension : public tcu::ThreadUtil::Operation 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry InitGLExtension (const char* extension); 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string m_extension; 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7373c827367444ee418f129b2c238299f49d3264554Jarkko PoyryInitGLExtension::InitGLExtension (const char* extension) 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation ("InitGLExtension") 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_extension (extension) 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid InitGLExtension::exec (tcu::ThreadUtil::Thread& t) 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check extensions 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool found = false; 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glGetString(GL_EXTENSIONS)" << tcu::ThreadUtil::Message::End; 7513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos std::string extensions = (const char*)thread.gl.getString(GL_EXTENSIONS); 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glGetString()" << tcu::ThreadUtil::Message::End; 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string::size_type pos = extensions.find(" "); 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry do 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string extension; 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (pos != std::string::npos) 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry extension = extensions.substr(0, pos); 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry extensions = extensions.substr(pos+1); 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry extension = extensions; 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry extensions = ""; 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (extension == m_extension) 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry found = true; 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry pos = extensions.find(" "); 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } while (pos != std::string::npos); 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!found) 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::NotSupportedError((m_extension + " not supported").c_str(), "", __FILE__, __LINE__); 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Query function pointers 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_extension == "GL_OES_EGL_image") 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglGetProcAddress(\"glEGLImageTargetTexture2DOES\")" << tcu::ThreadUtil::Message::End; 7863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos thread.runtimeContext->glExtensions.imageTargetTexture2D = (glEGLImageTargetTexture2DOESFunc)thread.egl.getProcAddress("glEGLImageTargetTexture2DOES"); 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << ((void*)thread.runtimeContext->glExtensions.imageTargetTexture2D) << " = eglGetProcAddress()"<< tcu::ThreadUtil::Message::End; 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreatePBufferSurface : public tcu::ThreadUtil::Operation 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreatePBufferSurface (EGLDisplay display, EGLConfig config, EGLint width, EGLint height, SharedPtr<Surface>& surface); 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_display; 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLConfig m_config; 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint m_width; 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint m_height; 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Surface> m_surface; 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8053c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreatePBufferSurface::CreatePBufferSurface (EGLDisplay display, EGLConfig config, EGLint width, EGLint height, SharedPtr<Surface>& surface) 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation ("CreatePBufferSurface") 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_display (display) 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_config (config) 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_width (width) 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_height (height) 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry surface = SharedPtr<Surface>(new Surface(getEvent())); 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_surface = surface; 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreatePBufferSurface::exec (tcu::ThreadUtil::Thread& t) 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8183c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 8193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 8203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint attriblist[] = { 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_WIDTH, m_width, 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_HEIGHT, m_height, 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglCreatePbufferSurface(" << m_display << ", " << m_config << ", { EGL_WIDTH, " << m_width << ", EGL_HEIGHT, " << m_height << ", EGL_NONE })" << tcu::ThreadUtil::Message::End; 8273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_surface->surface = thread.egl.createPbufferSurface(m_display, m_config, attriblist); 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << m_surface->surface << "= eglCreatePbufferSurface()" << tcu::ThreadUtil::Message::End; 8293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_MSG(thread.egl, "eglCreatePbufferSurface()"); 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DestroySurface : public tcu::ThreadUtil::Operation 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DestroySurface (EGLDisplay display, SharedPtr<Surface> surface); 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_display; 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Surface> m_surface; 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8433c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDestroySurface::DestroySurface (EGLDisplay display, SharedPtr<Surface> surface) 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : tcu::ThreadUtil::Operation ("DestroySurface") 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_display (display) 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_surface (surface) 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyObject(SharedPtr<tcu::ThreadUtil::Object>(m_surface)); 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8513c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DestroySurface::exec (tcu::ThreadUtil::Thread& t) 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 8543c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglDestroySurface(" << m_display << ", " << m_surface->surface << ")" << tcu::ThreadUtil::Message::End; 8563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_CALL(thread.egl, destroySurface(m_display, m_surface->surface)); 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- eglDestroySurface()" << tcu::ThreadUtil::Message::End; 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8603c827367444ee418f129b2c238299f49d3264554Jarkko PoyryEGLImage::EGLImage (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync) 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Object ("EGLImage", event, sync) 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , image (EGL_NO_IMAGE_KHR) 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Texture : public Object 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Texture (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync); 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Runtime parameters 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint texture; 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Call generation time parameters 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isDefined; 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<EGLImage> sourceImage; 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8803c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTexture::Texture (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync) 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Object ("Texture", event, sync) 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , texture (0) 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , isDefined (false) 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateTexture : public Operation 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateTexture (SharedPtr<Texture>& texture, bool useSync, bool serverSync); 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8973c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateTexture::CreateTexture (SharedPtr<Texture>& texture, bool useSync, bool serverSync) 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CreateTexture", useSync, serverSync) 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texture = SharedPtr<Texture>(new Texture(getEvent(), getSync())); 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture = texture; 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9043c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreateTexture::exec (tcu::ThreadUtil::Thread& t) 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint tex = 0; 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glGenTextures(1, { 0 })" << tcu::ThreadUtil::Message::End; 9103c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, genTextures(1, &tex)); 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glGenTextures(1, { " << tex << " })" << tcu::ThreadUtil::Message::End; 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture->texture = tex; 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DeleteTexture : public Operation 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DeleteTexture (SharedPtr<Texture> texture, bool useSync, bool serverSync); 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9263c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDeleteTexture::DeleteTexture (SharedPtr<Texture> texture, bool useSync, bool serverSync) 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("DeleteTexture", useSync, serverSync) 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (texture) 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture)); 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9333c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DeleteTexture::exec (tcu::ThreadUtil::Thread& t) 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9353c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint tex = m_texture->texture; 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDeleteTextures(1, { " << tex << " })" << tcu::ThreadUtil::Message::End; 9393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, deleteTextures(1, &tex)); 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDeleteTextures()" << tcu::ThreadUtil::Message::End; 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture->texture = 0; 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TexImage2D : public Operation 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TexImage2D (SharedPtr<Texture> texture, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, bool useSync, bool serverSync); 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_level; 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_internalFormat; 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_width; 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_height; 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_format; 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_type; 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9613c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTexImage2D::TexImage2D (SharedPtr<Texture> texture, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, bool useSync, bool serverSync) 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("TexImage2D", useSync, serverSync) 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (texture) 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_level (level) 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_internalFormat (internalFormat) 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_width (width) 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_height (height) 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_format (format) 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_type (type) 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture)); 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture->isDefined = true; 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Orphang texture 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texture->sourceImage = SharedPtr<EGLImage>(); 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9783c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid TexImage2D::exec (tcu::ThreadUtil::Thread& t) 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9803c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void* dummyData = thread.getDummyData(m_width*m_height*4); 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 9843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glTexImage2D(GL_TEXTURE_2D, " << m_level << ", " << m_internalFormat << ", " << m_width << ", " << m_height << ", 0, " << m_format << ", " << m_type << ", data)" << tcu::ThreadUtil::Message::End; 9883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, texImage2D(GL_TEXTURE_2D, m_level, m_internalFormat, m_width, m_height, 0, m_format, m_type, dummyData)); 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glTexImage2D()" << tcu::ThreadUtil::Message::End; 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 9923c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass TexSubImage2D : public Operation 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TexSubImage2D (SharedPtr<Texture> texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, bool useSync, bool serverSync); 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_level; 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_xoffset; 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_yoffset; 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_width; 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_height; 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_format; 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_type; 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10133c827367444ee418f129b2c238299f49d3264554Jarkko PoyryTexSubImage2D::TexSubImage2D (SharedPtr<Texture> texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, bool useSync, bool serverSync) 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("TexSubImage2D", useSync, serverSync) 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (texture) 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_level (level) 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_xoffset (xoffset) 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_yoffset (yoffset) 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_width (width) 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_height (height) 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_format (format) 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_type (type) 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture)); 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_texture->sourceImage) 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture->sourceImage)); 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid TexSubImage2D::exec (tcu::ThreadUtil::Thread& t) 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void* dummyData = thread.getDummyData(m_width*m_height*4); 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 10363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glTexSubImage2D(GL_TEXTURE_2D, " << m_level << ", " << m_xoffset << ", " << m_yoffset << ", " << m_width << ", " << m_height << ", 0, " << m_format << ", " << m_type << ", <data>)" << tcu::ThreadUtil::Message::End; 10403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, texSubImage2D(GL_TEXTURE_2D, m_level, m_xoffset, m_yoffset, m_width, m_height, m_format, m_type, dummyData)); 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glSubTexImage2D()" << tcu::ThreadUtil::Message::End; 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 10443c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CopyTexImage2D : public Operation 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CopyTexImage2D (SharedPtr<Texture> texture, GLint level, GLint internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border, bool useSync, bool serverSync); 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_level; 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_internalFormat; 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_x; 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_y; 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_width; 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_height; 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_border; 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10653c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCopyTexImage2D::CopyTexImage2D (SharedPtr<Texture> texture, GLint level, GLint internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border, bool useSync, bool serverSync) 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CopyTexImage2D", useSync, serverSync) 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (texture) 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_level (level) 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_internalFormat (internalFormat) 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_x (x) 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_y (y) 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_width (width) 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_height (height) 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_border (border) 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture)); 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texture->isDefined = true; 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Orphang texture 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texture->sourceImage = SharedPtr<EGLImage>(); 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10833c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CopyTexImage2D::exec (tcu::ThreadUtil::Thread& t) 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 10853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 10863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 10883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glCopyTexImage2D(GL_TEXTURE_2D, " << m_level << ", " << m_internalFormat << ", " << m_x << ", " << m_y << ", " << m_width << ", " << m_height << ", " << m_border << ")" << tcu::ThreadUtil::Message::End; 10923c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, copyTexImage2D(GL_TEXTURE_2D, m_level, m_internalFormat, m_x, m_y, m_width, m_height, m_border)); 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glCopyTexImage2D()" << tcu::ThreadUtil::Message::End; 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 10963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CopyTexSubImage2D : public Operation 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CopyTexSubImage2D (SharedPtr<Texture> texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, bool useSync, bool serverSync); 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_level; 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_xoffset; 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_yoffset; 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_x; 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint m_y; 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_width; 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizei m_height; 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11173c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCopyTexSubImage2D::CopyTexSubImage2D (SharedPtr<Texture> texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height, bool useSync, bool serverSync) 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CopyTexSubImage2D", useSync, serverSync) 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (texture) 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_level (level) 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_xoffset (xoffset) 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_yoffset (yoffset) 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_x (x) 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_y (y) 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_width (width) 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_height (height) 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture)); 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_texture->sourceImage) 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_texture->sourceImage)); 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11343c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CopyTexSubImage2D::exec (tcu::ThreadUtil::Thread& t) 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11363c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 11373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 11393c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glCopyTexSubImage2D(GL_TEXTURE_2D, " << m_level << ", " << m_xoffset << ", " << m_yoffset << ", " << m_x << ", " << m_y << ", " << m_width << ", " << m_height << ")" << tcu::ThreadUtil::Message::End; 11433c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, copyTexSubImage2D(GL_TEXTURE_2D, m_level, m_xoffset, m_yoffset, m_x, m_y, m_width, m_height)); 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glCopyTexSubImage2D()" << tcu::ThreadUtil::Message::End; 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 11473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Buffer : public Object 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Buffer (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync); 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Runtime attributes 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffer; 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizeiptr size; 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Call generation time parameters 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isDefined; 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11643c827367444ee418f129b2c238299f49d3264554Jarkko PoyryBuffer::Buffer (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync) 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Object ("Buffer", event, sync) 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , buffer (0) 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , size (0) 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , isDefined (false) 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateBuffer : public Operation 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateBuffer (SharedPtr<Buffer>& buffer, bool useSync, bool serverSync); 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> m_buffer; 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11823c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateBuffer::CreateBuffer (SharedPtr<Buffer>& buffer, bool useSync, bool serverSync) 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CreateBuffer", useSync, serverSync) 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry buffer = SharedPtr<Buffer>(new Buffer(getEvent(), getSync())); 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_buffer = buffer; 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreateBuffer::exec (tcu::ThreadUtil::Thread& t) 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 11913c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffer = 0; 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glGenBuffers(1, { 0 })" << tcu::ThreadUtil::Message::End; 11953c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, genBuffers(1, &buffer)); 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glGenBuffers(1, { " << buffer << " })" << tcu::ThreadUtil::Message::End; 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_buffer->buffer = buffer; 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DeleteBuffer : public Operation 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DeleteBuffer (SharedPtr<Buffer> buffer, bool useSync, bool serverSync); 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> m_buffer; 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12113c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDeleteBuffer::DeleteBuffer (SharedPtr<Buffer> buffer, bool useSync, bool serverSync) 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("DeleteBuffer", useSync, serverSync) 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_buffer (buffer) 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_buffer)); 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12183c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DeleteBuffer::exec (tcu::ThreadUtil::Thread& t) 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint buffer = m_buffer->buffer; 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDeleteBuffers(1, { " << buffer << " })" << tcu::ThreadUtil::Message::End; 12243c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, deleteBuffers(1, &buffer)); 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDeleteBuffers()" << tcu::ThreadUtil::Message::End; 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_buffer->buffer = 0; 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BufferData : public Operation 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BufferData (SharedPtr<Buffer> buffer, GLenum target, GLsizeiptr size, GLenum usage, bool useSync, bool serverSync); 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> m_buffer; 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_target; 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizeiptr m_size; 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_usage; 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12433c827367444ee418f129b2c238299f49d3264554Jarkko PoyryBufferData::BufferData (SharedPtr<Buffer> buffer, GLenum target, GLsizeiptr size, GLenum usage, bool useSync, bool serverSync) 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("BufferData", useSync, serverSync) 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_buffer (buffer) 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_target (target) 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_size (size) 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_usage (usage) 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_buffer)); 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry buffer->isDefined = true; 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry buffer->size = size; 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid BufferData::exec (tcu::ThreadUtil::Thread& t) 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void* dummyData = thread.getDummyData(m_size); 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(" << m_target << ", " << m_buffer->buffer << ")" << tcu::ThreadUtil::Message::End; 12613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(m_target, m_buffer->buffer)); 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBufferData(" << m_target << ", " << m_size << ", <DATA>, " << m_usage << ")" << tcu::ThreadUtil::Message::End; 12653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bufferData(m_target, m_size, dummyData, m_usage)); 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBufferData()" << tcu::ThreadUtil::Message::End; 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(" << m_target << ", 0)" << tcu::ThreadUtil::Message::End; 12693c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(m_target, 0)); 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass BufferSubData : public Operation 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry BufferSubData (SharedPtr<Buffer> buffer, GLenum target, GLintptr offset, GLsizeiptr size, bool useSync, bool serverSync); 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> m_buffer; 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_target; 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLintptr m_offset; 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLsizeiptr m_size; 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12863c827367444ee418f129b2c238299f49d3264554Jarkko PoyryBufferSubData::BufferSubData (SharedPtr<Buffer> buffer, GLenum target, GLintptr offset, GLsizeiptr size, bool useSync, bool serverSync) 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("BufferSubData", useSync, serverSync) 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_buffer (buffer) 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_target (target) 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_offset (offset) 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_size (size) 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_buffer)); 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid BufferSubData::exec (tcu::ThreadUtil::Thread& t) 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 12983c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void* dummyData = thread.getDummyData(m_size); 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(" << m_target << ", " << m_buffer->buffer << ")" << tcu::ThreadUtil::Message::End; 13023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(m_target, m_buffer->buffer)); 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBufferSubData(" << m_target << ", " << m_offset << ", " << m_size << ", <DATA>)" << tcu::ThreadUtil::Message::End; 13063c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bufferSubData(m_target, m_offset, m_size, dummyData)); 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBufferSubData()" << tcu::ThreadUtil::Message::End; 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(" << m_target << ", 0)" << tcu::ThreadUtil::Message::End; 13103c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(m_target, 0)); 13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Shader : public Object 13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Shader (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync); 13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shader; 13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum type; 13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isDefined; 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool compiled; 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13253c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShader::Shader (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync) 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Object ("Shader", event, sync) 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , shader (0) 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , type (GL_NONE) 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , isDefined (false) 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , compiled (false) 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateShader : public Operation 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateShader (GLenum type, SharedPtr<Shader>& shader, bool useSync, bool serverSync); 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> m_shader; 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_type; 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13453c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateShader::CreateShader (GLenum type, SharedPtr<Shader>& shader, bool useSync, bool serverSync) 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CreateShader", useSync, serverSync) 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_type (type) 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shader = SharedPtr<Shader>(new Shader(getEvent(), getSync())); 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shader->type = type; 13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_shader = shader; 13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreateShader::exec (tcu::ThreadUtil::Thread& t) 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shader = 0; 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glCreateShader(" << m_type << ")" << tcu::ThreadUtil::Message::End; 13613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos shader = thread.gl.createShader(m_type); 13623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_MSG(thread.gl, "glCreateShader()"); 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << shader << " = glCreateShader(" << m_type << ")" << tcu::ThreadUtil::Message::End; 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_shader->shader = shader; 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DeleteShader : public Operation 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DeleteShader (SharedPtr<Shader> shader, bool useSync, bool serverSync); 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> m_shader; 13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13783c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDeleteShader::DeleteShader (SharedPtr<Shader> shader, bool useSync, bool serverSync) 13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("DeleteShader", useSync, serverSync) 13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_shader (shader) 13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_shader)); 13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DeleteShader::exec (tcu::ThreadUtil::Thread& t) 13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13873c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint shader = m_shader->shader; 13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDeleteShader(" << shader << ")" << tcu::ThreadUtil::Message::End; 13913c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, deleteShader(shader)); 13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDeleteShader()" << tcu::ThreadUtil::Message::End; 13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_shader->shader = 0; 13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ShaderSource : public Operation 13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ShaderSource (SharedPtr<Shader> sharder, const char* source, bool useSync, bool serverSync); 14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> m_shader; 14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry string m_source; 14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14083c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderSource::ShaderSource (SharedPtr<Shader> shader, const char* source, bool useSync, bool serverSync) 14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("ShaderSource", useSync, serverSync) 14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_shader (shader) 14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_source (source) 14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_shader)); 14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_shader->isDefined = true; 14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14173c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid ShaderSource::exec (tcu::ThreadUtil::Thread& t) 14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14193c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* shaderSource = m_source.c_str(); 14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14223c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos thread.newMessage() << "Begin -- glShaderSource(" << m_shader->shader << ", 1, \"" << shaderSource << "\", DE_NULL)" << tcu::ThreadUtil::Message::End; 14233c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, shaderSource(m_shader->shader, 1, &shaderSource, DE_NULL)); 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glShaderSource()" << tcu::ThreadUtil::Message::End; 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ShaderCompile : public Operation 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ShaderCompile (SharedPtr<Shader> sharder, bool useSync, bool serverSync); 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> m_shader; 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14373c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderCompile::ShaderCompile (SharedPtr<Shader> shader, bool useSync, bool serverSync) 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("ShaderCompile", useSync, serverSync) 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_shader (shader) 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_shader->compiled = true; 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_shader)); 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14453c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid ShaderCompile::exec (tcu::ThreadUtil::Thread& t) 14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 14483c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glCompileShader(" << m_shader->shader << ")" << tcu::ThreadUtil::Message::End; 14503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, compileShader(m_shader->shader)); 14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glCompileShader()" << tcu::ThreadUtil::Message::End; 14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Program : public Object 14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Program (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync); 14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Generation time attributes 14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> vertexShader; 14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> fragmentShader; 14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool linked; 14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Runtime attributes 14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint program; 14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint runtimeVertexShader; 14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint runtimeFragmentShader; 14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14703c827367444ee418f129b2c238299f49d3264554Jarkko PoyryProgram::Program (SharedPtr<tcu::ThreadUtil::Event> event, SharedPtr<FenceSync> sync) 14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Object ("Program", event, sync) 14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , linked (false) 14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , program (0) 14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , runtimeVertexShader (0) 14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , runtimeFragmentShader (0) 14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateProgram : public Operation 14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateProgram (SharedPtr<Program>& program, bool useSync, bool serverSync); 14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14893c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateProgram::CreateProgram (SharedPtr<Program>& program, bool useSync, bool serverSync) 14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CreateProgram", useSync, serverSync) 14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry program = SharedPtr<Program>(new Program(getEvent(), getSync())); 14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program = program; 14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid CreateProgram::exec (tcu::ThreadUtil::Thread& t) 14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 14983c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint program = 0; 15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glCreateProgram()" << tcu::ThreadUtil::Message::End; 15023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos program = thread.gl.createProgram(); 15033c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_MSG(thread.gl, "glCreateProgram()"); 15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << program << " = glCreateProgram()" << tcu::ThreadUtil::Message::End; 15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->program = program; 15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DeleteProgram : public Operation 15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DeleteProgram (SharedPtr<Program> program, bool useSync, bool serverSync); 15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15193c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDeleteProgram::DeleteProgram (SharedPtr<Program> program, bool useSync, bool serverSync) 15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("DeleteProgram", useSync, serverSync) 15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (program) 15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_program)); 15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15263c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DeleteProgram::exec (tcu::ThreadUtil::Thread& t) 15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 15293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint program = m_program->program; 15303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDeleteProgram(" << program << ")" << tcu::ThreadUtil::Message::End; 15323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, deleteProgram(program)); 15333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDeleteProgram()" << tcu::ThreadUtil::Message::End; 15343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->program = 0; 15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass AttachShader : public Operation 15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry AttachShader (SharedPtr<Program> sharder, SharedPtr<Shader> shader, bool useSync, bool serverSync); 15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15443c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 15453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 15463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Shader> m_shader; 15473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 15483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15493c827367444ee418f129b2c238299f49d3264554Jarkko PoyryAttachShader::AttachShader (SharedPtr<Program> program, SharedPtr<Shader> shader, bool useSync, bool serverSync) 15503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("AttachShader", useSync, serverSync) 15513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (program) 15523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_shader (shader) 15533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_program)); 15553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readGLObject(SharedPtr<Object>(m_shader)); 15563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_shader->type == GL_VERTEX_SHADER) 15583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->vertexShader = shader; 15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_shader->type == GL_FRAGMENT_SHADER) 15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->fragmentShader = shader; 15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid AttachShader::exec (tcu::ThreadUtil::Thread& t) 15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 15683c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glAttachShader(" << m_program->program << ", " << m_shader->shader << ")" << tcu::ThreadUtil::Message::End; 15703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, attachShader(m_program->program, m_shader->shader)); 15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glAttachShader()" << tcu::ThreadUtil::Message::End; 15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_shader->type == GL_VERTEX_SHADER) 15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->runtimeVertexShader = m_shader->shader; 15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_shader->type == GL_FRAGMENT_SHADER) 15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->runtimeFragmentShader = m_shader->shader; 15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DetachShader : public Operation 15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DetachShader (SharedPtr<Program> sharder, GLenum type, bool useSync, bool serverSync); 15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 15893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_type; 15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15923c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDetachShader::DetachShader (SharedPtr<Program> program, GLenum type, bool useSync, bool serverSync) 15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("DetachShader", useSync, serverSync) 15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (program) 15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_type (type) 15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_program)); 15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_type == GL_VERTEX_SHADER) 16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_program->vertexShader); 16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->vertexShader = SharedPtr<Shader>(); 16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_type == GL_FRAGMENT_SHADER) 16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_program->fragmentShader); 16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->fragmentShader = SharedPtr<Shader>(); 16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16133c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid DetachShader::exec (tcu::ThreadUtil::Thread& t) 16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16153c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 16163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 16173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_type == GL_VERTEX_SHADER) 16183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDetachShader(" << m_program->program << ", " << m_program->runtimeVertexShader << ")" << tcu::ThreadUtil::Message::End; 16203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, detachShader(m_program->program, m_program->runtimeVertexShader)); 16213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDetachShader()" << tcu::ThreadUtil::Message::End; 16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->runtimeVertexShader = 0; 16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_type == GL_FRAGMENT_SHADER) 16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDetachShader(" << m_program->program << ", " << m_program->runtimeFragmentShader << ")" << tcu::ThreadUtil::Message::End; 16273c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, detachShader(m_program->program, m_program->runtimeFragmentShader)); 16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDetachShader()" << tcu::ThreadUtil::Message::End; 16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program->runtimeFragmentShader = 0; 16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 16323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 16333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16353c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass LinkProgram : public Operation 16363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 16383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry LinkProgram (SharedPtr<Program> program, bool useSync, bool serverSync); 16393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 16403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 16423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 16433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 16443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16453c827367444ee418f129b2c238299f49d3264554Jarkko PoyryLinkProgram::LinkProgram (SharedPtr<Program> program, bool useSync, bool serverSync) 16463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("LinkProgram", useSync, serverSync) 16473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (program) 16483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(m_program)); 16503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry program->linked = true; 16513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid LinkProgram::exec (tcu::ThreadUtil::Thread& t) 16543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 16563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLuint program = m_program->program; 16573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glLinkProgram(" << program << ")" << tcu::ThreadUtil::Message::End; 16593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, linkProgram(program)); 16603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glLinkProgram()" << tcu::ThreadUtil::Message::End; 16613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16633c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass RenderBuffer : public Operation 16643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16653c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 16663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RenderBuffer (SharedPtr<Program> program, SharedPtr<Buffer> buffer, bool useSync, bool serverSync); 16673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 16683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Buffer> m_buffer; 16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16743c827367444ee418f129b2c238299f49d3264554Jarkko PoyryRenderBuffer::RenderBuffer (SharedPtr<Program> program, SharedPtr<Buffer> buffer, bool useSync, bool serverSync) 16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("RenderBuffer", useSync, serverSync) 16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (program) 16773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_buffer (buffer) 16783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readGLObject(SharedPtr<Object>(program)); 16803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readGLObject(SharedPtr<Object>(buffer)); 16813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16833c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid RenderBuffer::exec (tcu::ThreadUtil::Thread& t) 16843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 16853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 16863c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glClearColor(0.5f, 0.5f, 0.5f, 1.0f)" << tcu::ThreadUtil::Message::End; 16883c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, clearColor(0.5f, 0.5f, 0.5f, 1.0f)); 16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glClearColor()" << tcu::ThreadUtil::Message::End; 16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glClear(GL_COLOR_BUFFER_BIT)" << tcu::ThreadUtil::Message::End; 16923c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, clear(GL_COLOR_BUFFER_BIT)); 16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glClear()" << tcu::ThreadUtil::Message::End; 16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glUseProgram(" << m_program->program << ")" << tcu::ThreadUtil::Message::End; 16963c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, useProgram(m_program->program)); 16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glUseProgram()" << tcu::ThreadUtil::Message::End; 16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glGetAttribLocation(" << m_program->program << ", \"a_pos\")" << tcu::ThreadUtil::Message::End; 17003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLint posLoc = thread.gl.getAttribLocation(m_program->program, "a_pos"); 17013c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_MSG(thread.gl, "glGetAttribLocation()"); 17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << posLoc << " = glGetAttribLocation()" << tcu::ThreadUtil::Message::End; 17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glEnableVertexAttribArray(" << posLoc << ")" << tcu::ThreadUtil::Message::End; 17053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, enableVertexAttribArray(posLoc)); 17063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glEnableVertexAttribArray()" << tcu::ThreadUtil::Message::End; 17073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(GL_ARRAY_BUFFER, " << m_buffer->buffer << ")" << tcu::ThreadUtil::Message::End; 17093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(GL_ARRAY_BUFFER, m_buffer->buffer)); 17103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 17113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glVertexAttribPointer(" << posLoc << ", GL_BYTE, GL_TRUE, 0, 0)" << tcu::ThreadUtil::Message::End; 17133c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, vertexAttribPointer(posLoc, 2, GL_BYTE, GL_TRUE, 0, 0)); 17143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glVertexAttribPointer()" << tcu::ThreadUtil::Message::End; 17153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDrawArrays(GL_TRIANGLES, 0, " << (m_buffer->size / 2) << ")" << tcu::ThreadUtil::Message::End; 17173c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, drawArrays(GL_TRIANGLES, 0, (GLsizei)m_buffer->size / 2)); 17183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDrawArrays()" << tcu::ThreadUtil::Message::End; 17193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(GL_ARRAY_BUFFER, 0)" << tcu::ThreadUtil::Message::End; 17213c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(GL_ARRAY_BUFFER, 0)); 17223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 17233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDisableVertexAttribArray(" << posLoc << ")" << tcu::ThreadUtil::Message::End; 17253c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, disableVertexAttribArray(posLoc)); 17263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDisableVertexAttribArray()" << tcu::ThreadUtil::Message::End; 17273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glUseProgram(0)" << tcu::ThreadUtil::Message::End; 17293c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, useProgram(0)); 17303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glUseProgram()" << tcu::ThreadUtil::Message::End; 17313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 17323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass RenderTexture : public Operation 17343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 17353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 17363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RenderTexture (SharedPtr<Program> program, SharedPtr<Texture> texture, bool useSync, bool serverSync); 17373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 17383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 17403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Program> m_program; 17413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 17423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 17433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17443c827367444ee418f129b2c238299f49d3264554Jarkko PoyryRenderTexture::RenderTexture (SharedPtr<Program> program, SharedPtr<Texture> texture, bool useSync, bool serverSync) 17453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("RenderTexture", useSync, serverSync) 17463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (program) 17473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_texture (texture) 17483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 17493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readGLObject(SharedPtr<Object>(program)); 17503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readGLObject(SharedPtr<Object>(texture)); 17513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 17523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17533c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid RenderTexture::exec (tcu::ThreadUtil::Thread& t) 17543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 17553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 17563c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 17573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glClearColor(0.5f, 0.5f, 0.5f, 1.0f)" << tcu::ThreadUtil::Message::End; 17583c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, clearColor(0.5f, 0.5f, 0.5f, 1.0f)); 17593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glClearColor()" << tcu::ThreadUtil::Message::End; 17603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glClear(GL_COLOR_BUFFER_BIT)" << tcu::ThreadUtil::Message::End; 17623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, clear(GL_COLOR_BUFFER_BIT)); 17633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glClear()" << tcu::ThreadUtil::Message::End; 17643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glUseProgram(" << m_program->program << ")" << tcu::ThreadUtil::Message::End; 17663c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, useProgram(m_program->program)); 17673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glUseProgram()" << tcu::ThreadUtil::Message::End; 17683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 17703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 17713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 17723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glGetUniformLocation(" << m_program->program << ", \"u_sampler\")" << tcu::ThreadUtil::Message::End; 17743c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLint samplerPos = thread.gl.getUniformLocation(m_program->program, "u_sampler"); 17753c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_MSG(thread.gl, "glGetUniformLocation()"); 17763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glGetUniformLocation()" << tcu::ThreadUtil::Message::End; 17773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glUniform1i(" << samplerPos << ", 0)" << tcu::ThreadUtil::Message::End; 17793c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, uniform1i(samplerPos, 0)); 17803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glUniform1i()" << tcu::ThreadUtil::Message::End; 17813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glGetAttribLocation(" << m_program->program << ", \"a_pos\")" << tcu::ThreadUtil::Message::End; 17843c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLint posLoc = thread.gl.getAttribLocation(m_program->program, "a_pos"); 17853c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_MSG(thread.gl, "glGetAttribLocation()"); 17863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << posLoc << " = glGetAttribLocation()" << tcu::ThreadUtil::Message::End; 17873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glEnableVertexAttribArray(" << posLoc << ")" << tcu::ThreadUtil::Message::End; 17893c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, enableVertexAttribArray(posLoc)); 17903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glEnableVertexAttribArray()" << tcu::ThreadUtil::Message::End; 17913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(GL_ARRAY_BUFFER, 0)" << tcu::ThreadUtil::Message::End; 17933c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(GL_ARRAY_BUFFER, 0)); 17943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 17953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float coords[] = { 17983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry -1.0, -1.0, 17993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1.0, -1.0, 18003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1.0, 1.0, 18013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1.0, 1.0, 18033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry -1.0, 1.0, 18043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry -1.0, -1.0 18053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 18063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glVertexAttribPointer(" << posLoc << ", GL_FLOAT, GL_FALSE, 0, <data>)" << tcu::ThreadUtil::Message::End; 18083c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, vertexAttribPointer(posLoc, 2, GL_FLOAT, GL_FALSE, 0, coords)); 18093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glVertexAttribPointer()" << tcu::ThreadUtil::Message::End; 18103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDrawArrays(GL_TRIANGLES, 0, 6)" << tcu::ThreadUtil::Message::End; 18123c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, drawArrays(GL_TRIANGLES, 0, 6)); 18133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDrawArrays()" << tcu::ThreadUtil::Message::End; 18143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindBuffer(GL_ARRAY_BUFFER, 0)" << tcu::ThreadUtil::Message::End; 18163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindBuffer(GL_ARRAY_BUFFER, 0)); 18173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindBuffer()" << tcu::ThreadUtil::Message::End; 18183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 18203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 18213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 18223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glDisableVertexAttribArray(" << posLoc << ")" << tcu::ThreadUtil::Message::End; 18243c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, disableVertexAttribArray(posLoc)); 18253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glDisableVertexAttribArray()" << tcu::ThreadUtil::Message::End; 18263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glUseProgram(0)" << tcu::ThreadUtil::Message::End; 18283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, useProgram(0)); 18293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glUseProgram()" << tcu::ThreadUtil::Message::End; 18303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 18313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass ReadPixels : public Operation 18333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 18353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ReadPixels (int x, int y, int width, int height, GLenum format, GLenum type, SharedPtr<tcu::ThreadUtil::DataBlock>& data, bool useSync, bool serverSync); 18363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 18373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 18393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_x; 18403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_y; 18413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_width; 18423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_height; 18433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_format; 18443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum m_type; 18453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> m_data; 18463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 18473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18483c827367444ee418f129b2c238299f49d3264554Jarkko PoyryReadPixels::ReadPixels (int x, int y, int width, int height, GLenum format, GLenum type, SharedPtr<tcu::ThreadUtil::DataBlock>& data, bool useSync, bool serverSync) 18493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("ReadPixels", useSync, serverSync) 18503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_x (x) 18513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_y (y) 18523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_width (width) 18533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_height (height) 18543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_format (format) 18553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_type (type) 18563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry data = SharedPtr<tcu::ThreadUtil::DataBlock>(new tcu::ThreadUtil::DataBlock(getEvent())); 18583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_data = data; 18593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 18603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18613c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosvoid ReadPixels::exec (tcu::ThreadUtil::Thread& t) 18623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18633c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 18643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 18653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_type == GL_UNSIGNED_BYTE); 18663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_format == GL_RGBA); 18673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<deUint8> data((m_width-m_x)*(m_height-m_y)*4); 18693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glReadPixels(" << m_x << ", " << m_y << ", " << m_width << ", " << m_height << ", " << m_format << ", " << m_type << ", <data>)" << tcu::ThreadUtil::Message::End; 18713c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, readPixels(m_x, m_y, m_width, m_height, m_format, m_type, &(data[0]))); 18723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glReadPixels()" << tcu::ThreadUtil::Message::End; 18733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_data->setData(data.size(), &(data[0])); 18753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 18763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CreateImageFromTexture : public Operation 18783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18793c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 18803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note [mika] Unlike eglCreateImageKHR this operation requires current context and uses it for creating EGLImage 18813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Current context is required to support EGL sync objects in current tests system 18823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CreateImageFromTexture (SharedPtr<EGLImage>& image, SharedPtr<Texture> texture, bool useSync, bool serverSync); 18833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 18843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 18863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 18873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<EGLImage> m_image; 18883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 18893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18903c827367444ee418f129b2c238299f49d3264554Jarkko PoyryCreateImageFromTexture::CreateImageFromTexture (SharedPtr<EGLImage>& image, SharedPtr<Texture> texture, bool useSync, bool serverSync) 18913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CreateImageFromTexture", useSync, serverSync) 18923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 18933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(texture)); 18943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry image = SharedPtr<EGLImage>(new EGLImage(getEvent(), getSync())); 18953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 18963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_image = image; 18973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture = texture; 18983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture->sourceImage = m_image; 18993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 19003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid CreateImageFromTexture::exec (tcu::ThreadUtil::Thread& t) 19023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19033c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 19043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLint attribList[] = { 19063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_GL_TEXTURE_LEVEL_KHR, 0, 19073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 19083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 19093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 19113c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 19123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 19133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Make texture image complete... 19153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)" << tcu::ThreadUtil::Message::End; 19163c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); 19173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glTexParameteri()" << tcu::ThreadUtil::Message::End; 19183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)" << tcu::ThreadUtil::Message::End; 19203c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); 19213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glTexParameteri()" << tcu::ThreadUtil::Message::End; 19223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)" << tcu::ThreadUtil::Message::End; 19243c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); 19253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glTexParameteri()" << tcu::ThreadUtil::Message::End; 19263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)" << tcu::ThreadUtil::Message::End; 19283c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); 19293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glTexParameteri()" << tcu::ThreadUtil::Message::End; 19303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglCreateImageKHR(" << thread.runtimeContext->display << ", " << thread.runtimeContext->context << ", EGL_GL_TEXTURE_2D_KHR, " << m_texture->texture << ", { EGL_GL_TEXTURE_LEVEL_KHR, 0, EGL_NONE })" << tcu::ThreadUtil::Message::End; 19323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_image->image = thread.egl.createImageKHR(thread.runtimeContext->display, thread.runtimeContext->context, EGL_GL_TEXTURE_2D_KHR, (EGLClientBuffer)(deUintptr)m_texture->texture, attribList); 19333c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_MSG(thread.egl, "eglCreateImageKHR()"); 19343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- " << m_image->image << " = eglCreateImageKHR()" << tcu::ThreadUtil::Message::End; 19353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 19373c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 19383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 19393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 19403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DestroyImage : public Operation 19423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19433c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 19443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note [mika] Unlike eglDestroyImageKHR this operation requires current context and uses it for creating EGLImage 19453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Current context is required to support EGL sync objects in current tests system 19463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DestroyImage (SharedPtr<EGLImage> image, bool useSync, bool serverSync); 19473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 19483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 19503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<EGLImage> m_image; 19513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 19523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19533c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDestroyImage::DestroyImage (SharedPtr<EGLImage> image, bool useSync, bool serverSync) 19543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("CreateImageFromTexture", useSync, serverSync) 19553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_image (image) 19563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(image)); 19583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 19593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid DestroyImage::exec (tcu::ThreadUtil::Thread& t) 19613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19623c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 19633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- eglDestroyImageKHR(" << thread.runtimeContext->display << ", " << m_image->image << ")" << tcu::ThreadUtil::Message::End; 19653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos thread.egl.destroyImageKHR(thread.runtimeContext->display, m_image->image); 19663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_image->image = EGL_NO_IMAGE_KHR; 19673c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLU_CHECK_MSG(thread.egl, "eglDestroyImageKHR()"); 19683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- eglDestroyImageKHR()" << tcu::ThreadUtil::Message::End; 19693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 19703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass DefineTextureFromImage : public Operation 19723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19733c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 19743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DefineTextureFromImage (SharedPtr<Texture> texture, SharedPtr<EGLImage> image, bool useSync, bool serverSync); 19753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void exec (tcu::ThreadUtil::Thread& thread); 19763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19773c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 19783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<Texture> m_texture; 19793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<EGLImage> m_image; 19803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 19813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19823c827367444ee418f129b2c238299f49d3264554Jarkko PoyryDefineTextureFromImage::DefineTextureFromImage (SharedPtr<Texture> texture, SharedPtr<EGLImage> image, bool useSync, bool serverSync) 19833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : Operation ("DefineTextureFromImage", useSync, serverSync) 19843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readGLObject(SharedPtr<Object>(image)); 19863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry modifyGLObject(SharedPtr<Object>(texture)); 19873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texture->isDefined = true; 19893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texture->sourceImage = image; 19903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_image = image; 19923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_texture = texture; 19933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 19943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid DefineTextureFromImage::exec (tcu::ThreadUtil::Thread& t) 19963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 19973c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos EGLThread& thread = dynamic_cast<EGLThread&>(t); 19983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 19993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, " << m_texture->texture << ")" << tcu::ThreadUtil::Message::End; 20003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, m_texture->texture)); 20013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 20023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, " << m_image->image << ")" << tcu::ThreadUtil::Message::End; 20043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.runtimeContext->glExtensions.imageTargetTexture2D(GL_TEXTURE_2D, m_image->image); 20053c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_MSG(thread.gl, "glEGLImageTargetTexture2DOES()"); 20063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glEGLImageTargetTexture2DOES()" << tcu::ThreadUtil::Message::End; 20073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "Begin -- glBindTexture(GL_TEXTURE_2D, 0)" << tcu::ThreadUtil::Message::End; 20093c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos GLU_CHECK_GLW_CALL(thread.gl, bindTexture(GL_TEXTURE_2D, 0)); 20103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry thread.newMessage() << "End -- glBindTexture()" << tcu::ThreadUtil::Message::End; 20113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 20123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // GLES2ThreadTest 20143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20153c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulosstatic void requireEGLExtension (const Library& egl, EGLDisplay eglDisplay, const char* requiredExtension) 20163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 20173c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos if (!eglu::hasExtension(egl, eglDisplay, requiredExtension)) 20183c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos TCU_THROW(NotSupportedError, (string(requiredExtension) + " not supported").c_str()); 20193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 20203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum OperationId 20223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 20233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_NONE = 0, 20243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_CREATE_BUFFER, 20263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_DESTROY_BUFFER, 20273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_BUFFER_DATA, 20283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_BUFFER_SUBDATA, 20293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_CREATE_TEXTURE, 20313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_DESTROY_TEXTURE, 20323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_TEXIMAGE2D, 20333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_TEXSUBIMAGE2D, 20343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_COPYTEXIMAGE2D, 20353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_COPYTEXSUBIMAGE2D, 20363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_CREATE_VERTEX_SHADER, 20383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_CREATE_FRAGMENT_SHADER, 20393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_DESTROY_SHADER, 20403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_SHADER_SOURCE, 20413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_SHADER_COMPILE, 20423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_ATTACH_SHADER, 20443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_DETACH_SHADER, 20453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_CREATE_PROGRAM, 20473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_DESTROY_PROGRAM, 20483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_LINK_PROGRAM, 20493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE, 20513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_DESTROY_IMAGE, 20523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_TEXTURE_FROM_IMAGE, 20533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry THREADOPERATIONID_LAST 20553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 20563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GLES2SharingRandomTest : public TestCase 20583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 20593c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 20603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct TestConfig 20613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 20623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestConfig (void); 20633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int threadCount; 20643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int operationCount; 20653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool serverSync; 20663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool useFenceSync; 20673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool useImages; 20683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry float probabilities[THREADOPERATIONID_LAST][THREADOPERATIONID_LAST]; 20703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 20713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest (EglTestContext& context, const TestConfig& config, const char* name, const char* description); 20723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~GLES2SharingRandomTest (void); 20733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 20753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void deinit (void); 20763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void); 20773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addRandomOperation (GLES2ThreadTest::EGLResourceManager& resourceManager); 20793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 20813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestConfig m_config; 20823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_seed; 20833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random m_random; 20843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestLog& m_log; 20853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_threadsStarted; 20863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_threadsRunning; 20873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_executionReady; 20883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_requiresRestart; 20893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_beginTimeUs; 20903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_timeOutUs; 20913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 m_sleepTimeMs; 20923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_timeOutTimeUs; 20933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<GLES2ThreadTest::EGLThread*> m_threads; 20953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 20963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_eglDisplay; 20973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLConfig m_eglConfig; 20983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry OperationId m_lastOperation; 20993c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 21003c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos glw::Functions m_gl; 21013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 21023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21033c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2SharingRandomTest::TestConfig::TestConfig (void) 21043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : threadCount (0) 21053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , operationCount (0) 21063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , serverSync (false) 21073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , useFenceSync (false) 21083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , useImages (false) 21093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 21103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deMemset(probabilities, 0, sizeof(probabilities)); 21113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 21123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21133c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2SharingRandomTest::GLES2SharingRandomTest (EglTestContext& context, const TestConfig& config, const char* name, const char* description) 21143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (context, name, description) 21153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_config (config) 21163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_seed (deStringHash(name)) 21173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_random (deStringHash(name)) 21183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_log (m_testCtx.getLog()) 21193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_threadsStarted (false) 21203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_threadsRunning (false) 21213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_executionReady (false) 21223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_requiresRestart (false) 21233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_beginTimeUs (0) 21243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_timeOutUs (10000000) // 10 seconds 21253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_sleepTimeMs (1) // 1 milliseconds 21263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_timeOutTimeUs (0) 21273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_eglDisplay (EGL_NO_DISPLAY) 21283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_eglConfig (0) 21293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_lastOperation (THREADOPERATIONID_NONE) 21303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 21313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 21323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21333c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2SharingRandomTest::~GLES2SharingRandomTest (void) 21343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 21353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::deinit(); 21363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 21373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21383c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2SharingRandomTest::init (void) 21393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 21403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl = m_eglTestCtx.getLibrary(); 21413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21423c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint attribList[] = 21433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 21453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 21463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_SIZE, 1, 21473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 21483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 21493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_eglDisplay = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 2151653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos m_eglConfig = eglu::chooseSingleConfig(egl, m_eglDisplay, attribList); 21523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21538e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglTestCtx.initGLFunctions(&m_gl, glu::ApiType::es(2,0)); 21548e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos 21553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check extensions 21563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.useFenceSync) 21573c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_fence_sync"); 21583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.serverSync) 21603c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_wait_sync"); 21613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.useImages) 21633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21643c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_image_base"); 21653c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_gl_texture_2D_image"); 21663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadTest::EGLResourceManager resourceManager; 21693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Create contexts 21703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 21713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21723c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_threads.push_back(new GLES2ThreadTest::EGLThread(egl, m_gl, deInt32Hash(m_seed+threadNdx))); 21733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::GLES2Context> context; 21743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::GLES2Context> shared = (threadNdx > 0 ? resourceManager.popContext(0) : SharedPtr<GLES2ThreadTest::GLES2Context>()); 21753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateContext(m_eglDisplay, m_eglConfig, shared, context)); 21763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addContext(context); 21783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (shared) 21803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addContext(shared); 21813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Create surfaces 21843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 21853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Surface> surface; 21873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreatePBufferSurface(m_eglDisplay, m_eglConfig, 400, 400, surface)); 21883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addSurface(surface); 21893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Make contexts current 21923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 21933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 21943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::MakeCurrent(*m_threads[threadNdx], m_eglDisplay, resourceManager.popSurface(0), resourceManager.popContext(0))); 21953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 21963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 21973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Operations to check fence sync support 21983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.useFenceSync) 21993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 22013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::InitGLExtension("GL_OES_EGL_sync")); 22033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Init EGLimage support 22073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.useImages) 22083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 22103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::InitGLExtension("GL_OES_EGL_image")); 22123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Add random operations 22163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int operationNdx = 0; operationNdx < m_config.operationCount; operationNdx++) 22173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addRandomOperation(resourceManager); 22183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 221975071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi { 222075071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi int threadNdx = 0; 222175071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi 222275071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi // Destroy images 222375071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi // \note Android reference counts EGLDisplays so we can't trust the eglTerminate() to clean up resources 222475071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi while (resourceManager.getImageCount() > 0) 222575071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi { 222675071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi const SharedPtr<GLES2ThreadTest::EGLImage> image = resourceManager.popImage(0); 222775071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi 222875071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DestroyImage(image, m_config.useFenceSync, m_config.serverSync)); 222975071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi 223075071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi threadNdx = (threadNdx + 1) % m_config.threadCount; 223175071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi } 223275071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi } 223375071e721851f8df8558b7ea80b9738e43a4354cMika Isojärvi 22343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Release contexts 22353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 22363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 22373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::GLES2Context> context = m_threads[threadNdx]->context; 22383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Surface> surface = m_threads[threadNdx]->surface; 22393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::MakeCurrent(*m_threads[threadNdx], m_eglDisplay, SharedPtr<GLES2ThreadTest::Surface>(), SharedPtr<GLES2ThreadTest::GLES2Context>())); 22413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addSurface(surface); 22433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addContext(context); 22443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 22453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Destroy contexts 22473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 22483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DestroyContext(resourceManager.popContext(0))); 22493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Destroy surfaces 22513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < m_config.threadCount; threadNdx++) 22523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DestroySurface(m_eglDisplay, resourceManager.popSurface(0))); 22533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 22543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22553c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2SharingRandomTest::deinit (void) 22563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 22573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 2258fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi { 22593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_threads[threadNdx]; 2260fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_threads[threadNdx] = DE_NULL; 2261fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi } 22623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads.clear(); 22643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22658e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos if (m_eglDisplay != EGL_NO_DISPLAY) 22668e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos { 22678e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglTestCtx.getLibrary().terminate(m_eglDisplay); 22688e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglDisplay = EGL_NO_DISPLAY; 22698e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos } 22703c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos 22713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK(!m_requiresRestart); 22723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 22733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2SharingRandomTest::addRandomOperation (GLES2ThreadTest::EGLResourceManager& resourceManager) 22753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 227635f4933c31a65a00084b6533e4a0deb098036d66Jarkko Pöyry int threadNdx = m_random.getUint32() % (deUint32)m_threads.size(); 22773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<OperationId> operations; 22793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<float> weights; 22803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_CREATE_BUFFER); 22823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_CREATE_BUFFER]); 22833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_CREATE_TEXTURE); 22853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_CREATE_TEXTURE]); 22863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_CREATE_VERTEX_SHADER); 22883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_CREATE_VERTEX_SHADER]); 22893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_CREATE_FRAGMENT_SHADER); 22913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_CREATE_FRAGMENT_SHADER]); 22923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_CREATE_PROGRAM); 22943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_CREATE_PROGRAM]); 22953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 22963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int destroyableBufferNdx = -1; 22973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int destroyableTextureNdx = -1; 22983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int destroyableShaderNdx = -1; 22993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int destroyableProgramNdx = -1; 23003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int vertexShaderNdx = -1; 23023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int fragmentShaderNdx = -1; 23033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int definedTextureNdx = -1; 23053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int definedBufferNdx = -1; 23073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int definedShaderNdx = -1; 23093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int detachableProgramNdx = -1; 23113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLenum detachShaderType = GL_VERTEX_SHADER; 23123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int unusedVertexAttachmentProgramNdx = -1; 23143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int unusedFragmentAttachmentProgramNdx = -1; 23153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int linkableProgramNdx = -1; 23173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int attachProgramNdx = -1; 23193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int attachShaderNdx = -1; 23203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int nonSiblingTextureNdx = -1; 23223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->context->resourceManager->getBufferCount() > 0) 23243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry destroyableBufferNdx = m_random.getUint32() % m_threads[threadNdx]->context->resourceManager->getBufferCount(); 23253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->context->resourceManager->getTextureCount() > 0) 23273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry destroyableTextureNdx = m_random.getUint32() % m_threads[threadNdx]->context->resourceManager->getTextureCount(); 23283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->context->resourceManager->getShaderCount() > 0) 23303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry destroyableShaderNdx = m_random.getUint32() % m_threads[threadNdx]->context->resourceManager->getShaderCount(); 23313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->context->resourceManager->getProgramCount() > 0) 23333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry destroyableProgramNdx = m_random.getUint32() % m_threads[threadNdx]->context->resourceManager->getProgramCount(); 23343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check what kind of buffers we have 23363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int bufferNdx = 0; bufferNdx < m_threads[threadNdx]->context->resourceManager->getBufferCount(); bufferNdx++) 23373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Buffer> buffer = m_threads[threadNdx]->context->resourceManager->getBuffer(bufferNdx); 23393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (buffer->isDefined) 23413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (definedBufferNdx == -1) 23433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry definedBufferNdx = bufferNdx; 23443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 23453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry definedBufferNdx = bufferNdx; 23463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check what kind of textures we have 23503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int textureNdx = 0; textureNdx < m_threads[threadNdx]->context->resourceManager->getTextureCount(); textureNdx++) 23513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->getTexture(textureNdx); 23533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (texture->isDefined) 23553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (definedTextureNdx == -1) 23573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry definedTextureNdx = textureNdx; 23583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 23593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry definedTextureNdx = textureNdx; 23603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!texture->sourceImage) 23623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (nonSiblingTextureNdx == -1) 23643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry nonSiblingTextureNdx = textureNdx; 23653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 23663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry nonSiblingTextureNdx = textureNdx; 23673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check what kind of shaders we have 23733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int shaderNdx = 0; shaderNdx < m_threads[threadNdx]->context->resourceManager->getShaderCount(); shaderNdx++) 23743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader = m_threads[threadNdx]->context->resourceManager->getShader(shaderNdx); 23763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Defined shader found 23783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (shader->isDefined) 23793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (definedShaderNdx == -1) 23813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry definedShaderNdx = shaderNdx; 23823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 23833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry definedShaderNdx = shaderNdx; 23843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Vertex shader found 23873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (shader->type == GL_VERTEX_SHADER) 23883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (vertexShaderNdx == -1) 23903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertexShaderNdx = shaderNdx; 23913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 23923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertexShaderNdx = shaderNdx; 23933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 23943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 23953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Fragmet shader found 23963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (shader->type == GL_FRAGMENT_SHADER) 23973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 23983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (fragmentShaderNdx == -1) 23993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragmentShaderNdx = shaderNdx; 24003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 24013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragmentShaderNdx = shaderNdx; 24023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check what kind of programs we have 24063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int programNdx = 0; programNdx < m_threads[threadNdx]->context->resourceManager->getProgramCount(); programNdx++) 24073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program = m_threads[threadNdx]->context->resourceManager->getProgram(programNdx); 24093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Program that can be detached 24113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (program->vertexShader || program->fragmentShader) 24123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (detachableProgramNdx == -1) 24143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry detachableProgramNdx = programNdx; 24163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (program->vertexShader) 24183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry detachShaderType = GL_VERTEX_SHADER; 24193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (program->fragmentShader) 24203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry detachShaderType = GL_FRAGMENT_SHADER; 24213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 24223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 24233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 24253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry detachableProgramNdx = programNdx; 24273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (program->vertexShader) 24293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry detachShaderType = GL_VERTEX_SHADER; 24303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (program->fragmentShader) 24313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry detachShaderType = GL_FRAGMENT_SHADER; 24323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 24333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 24343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Program that can be attached vertex shader 24383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!program->vertexShader) 24393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (unusedVertexAttachmentProgramNdx == -1) 24413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry unusedVertexAttachmentProgramNdx = programNdx; 24423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 24433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry unusedVertexAttachmentProgramNdx = programNdx; 24443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Program that can be attached fragment shader 24473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!program->fragmentShader) 24483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (unusedFragmentAttachmentProgramNdx == -1) 24503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry unusedFragmentAttachmentProgramNdx = programNdx; 24513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 24523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry unusedFragmentAttachmentProgramNdx = programNdx; 24533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Program that can be linked 24563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (program->vertexShader && program->fragmentShader) 24573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (linkableProgramNdx == -1) 24593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry linkableProgramNdx = programNdx; 24603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 24613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry linkableProgramNdx = programNdx; 24623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has images 24663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (resourceManager.getImageCount() > 0) 24673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_DESTROY_IMAGE]); 24693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_DESTROY_IMAGE); 24703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->context->resourceManager->getTextureCount() > 0) 24723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_TEXTURE_FROM_IMAGE]); 24743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_TEXTURE_FROM_IMAGE); 24753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has buffer 24793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (destroyableBufferNdx != -1) 24803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_DESTROY_BUFFER]); 24823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_DESTROY_BUFFER); 24833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_BUFFER_DATA]); 24853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_BUFFER_DATA); 24863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has buffer with defined data 24893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (definedBufferNdx != -1) 24903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_BUFFER_SUBDATA]); 24923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_BUFFER_SUBDATA); 24933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 24943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 24953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has texture 24963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (destroyableTextureNdx != -1) 24973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 24983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_DESTROY_TEXTURE]); 24993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_DESTROY_TEXTURE); 25003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_TEXIMAGE2D]); 25023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_TEXIMAGE2D); 25033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_COPYTEXIMAGE2D]); 25053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_COPYTEXIMAGE2D); 25063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has texture with data 25093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (definedTextureNdx != -1) 25103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_TEXSUBIMAGE2D]); 25123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_TEXSUBIMAGE2D); 25133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_COPYTEXSUBIMAGE2D]); 25153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_COPYTEXSUBIMAGE2D); 25163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has texture that can be used as EGLimage source 25193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (nonSiblingTextureNdx != -1) 25203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE]); 25223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE); 25233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has shader 25263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (destroyableShaderNdx != -1) 25273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_DESTROY_SHADER]); 25293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_DESTROY_SHADER); 25303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_SHADER_SOURCE]); 25323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_SHADER_SOURCE); 25333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has shader with defined source 25363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (definedShaderNdx != -1) 25373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_SHADER_COMPILE]); 25393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_SHADER_COMPILE); 25403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has program 25433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (destroyableProgramNdx != -1) 25443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_DESTROY_PROGRAM]); 25463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_DESTROY_PROGRAM); 25473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has program that can be linked 25503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (linkableProgramNdx != -1) 25513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_LINK_PROGRAM]); 25533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_LINK_PROGRAM); 25543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // has program with attachments 25573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (detachableProgramNdx != -1) 25583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_DETACH_SHADER]); 25603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_DETACH_SHADER); 25613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Has program and shader pair that can be attached 25643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (fragmentShaderNdx != -1 && unusedFragmentAttachmentProgramNdx != -1) 25653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (attachProgramNdx == -1) 25673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(attachShaderNdx == -1); 25693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachProgramNdx = unusedFragmentAttachmentProgramNdx; 25703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachShaderNdx = fragmentShaderNdx; 25713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_ATTACH_SHADER]); 25733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_ATTACH_SHADER); 25743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 25763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachProgramNdx = unusedFragmentAttachmentProgramNdx; 25783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachShaderNdx = fragmentShaderNdx; 25793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (vertexShaderNdx != -1 && unusedVertexAttachmentProgramNdx != -1) 25833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (attachProgramNdx == -1) 25853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(attachShaderNdx == -1); 25873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachProgramNdx = unusedVertexAttachmentProgramNdx; 25883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachShaderNdx = vertexShaderNdx; 25893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 25903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry weights.push_back(m_config.probabilities[m_lastOperation][THREADOPERATIONID_ATTACH_SHADER]); 25913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry operations.push_back(THREADOPERATIONID_ATTACH_SHADER); 25923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (m_random.getBool()) 25943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 25953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachProgramNdx = unusedVertexAttachmentProgramNdx; 25963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry attachShaderNdx = vertexShaderNdx; 25973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 25993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry OperationId op = m_random.chooseWeighted<OperationId, std::vector<OperationId> ::iterator>(operations.begin(), operations.end(), weights.begin()); 26013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (op) 26033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_CREATE_BUFFER: 26053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Buffer> buffer; 26073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateBuffer(buffer, m_config.useFenceSync, m_config.serverSync)); 26083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addBuffer(buffer); 26093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_DESTROY_BUFFER: 26133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Buffer> buffer = m_threads[threadNdx]->context->resourceManager->popBuffer(destroyableBufferNdx); 26153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DeleteBuffer(buffer, m_config.useFenceSync, m_config.serverSync)); 26163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_BUFFER_DATA: 26203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Buffer> buffer = m_threads[threadNdx]->context->resourceManager->popBuffer(destroyableBufferNdx); 26223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::BufferData(buffer, GL_ARRAY_BUFFER, 1024, GL_DYNAMIC_DRAW, m_config.useFenceSync, m_config.serverSync)); 26233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addBuffer(buffer); 26243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_BUFFER_SUBDATA: 26283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Buffer> buffer = m_threads[threadNdx]->context->resourceManager->popBuffer(definedBufferNdx); 26303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::BufferSubData(buffer, GL_ARRAY_BUFFER, 1, 20, m_config.useFenceSync, m_config.serverSync)); 26313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addBuffer(buffer); 26323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_CREATE_TEXTURE: 26363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture; 26383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateTexture(texture, m_config.useFenceSync, m_config.serverSync)); 26393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 26403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_DESTROY_TEXTURE: 26443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DeleteTexture(m_threads[threadNdx]->context->resourceManager->popTexture(destroyableTextureNdx), m_config.useFenceSync, m_config.serverSync)); 26453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_TEXIMAGE2D: 26483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->popTexture(destroyableTextureNdx); 26503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::TexImage2D(texture, 0, GL_RGBA, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 26513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 26523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_TEXSUBIMAGE2D: 26563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->popTexture(definedTextureNdx); 26583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::TexSubImage2D(texture, 0, 30, 30, 50, 50, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 26593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 26603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_COPYTEXIMAGE2D: 26643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->popTexture(destroyableTextureNdx); 26663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CopyTexImage2D(texture, 0, GL_RGBA, 20, 20, 300, 300, 0, m_config.useFenceSync, m_config.serverSync)); 26673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 26683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_COPYTEXSUBIMAGE2D: 26723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->popTexture(definedTextureNdx); 26743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CopyTexSubImage2D(texture, 0, 10, 10, 30, 30, 50, 50, m_config.useFenceSync, m_config.serverSync)); 26753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 26763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_CREATE_VERTEX_SHADER: 26803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader; 26823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateShader(GL_VERTEX_SHADER, shader, m_config.useFenceSync, m_config.serverSync)); 26833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addShader(shader); 26843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_CREATE_FRAGMENT_SHADER: 26883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 26893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader; 26903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateShader(GL_FRAGMENT_SHADER, shader, m_config.useFenceSync, m_config.serverSync)); 26913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addShader(shader); 26923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 26943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_DESTROY_SHADER: 26963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DeleteShader(m_threads[threadNdx]->context->resourceManager->popShader(destroyableShaderNdx), m_config.useFenceSync, m_config.serverSync)); 26973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 26983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 26993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_SHADER_SOURCE: 27003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* vertexShaderSource = 27023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "attribute mediump vec4 a_pos;\n" 27033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec4 v_pos;\n" 27043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main (void)\n" 27053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 27063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tv_pos = a_pos;\n" 27073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_Position = a_pos;\n" 27083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 27093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* fragmentShaderSource = 27113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec4 v_pos;\n" 27123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main (void)\n" 27133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 27143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_FragColor = v_pos;\n" 27153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 27163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader = m_threads[threadNdx]->context->resourceManager->popShader(destroyableShaderNdx); 27173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::ShaderSource(shader, (shader->type == GL_VERTEX_SHADER ? vertexShaderSource : fragmentShaderSource), m_config.useFenceSync, m_config.serverSync)); 27183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addShader(shader); 27193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_SHADER_COMPILE: 27233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader = m_threads[threadNdx]->context->resourceManager->popShader(definedShaderNdx); 27253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::ShaderCompile(shader, m_config.useFenceSync, m_config.serverSync)); 27263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addShader(shader); 27273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_CREATE_PROGRAM: 27313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program; 27333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateProgram(program, m_config.useFenceSync, m_config.serverSync)); 27343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addProgram(program); 27353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_DESTROY_PROGRAM: 27393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DeleteProgram(m_threads[threadNdx]->context->resourceManager->popProgram(destroyableProgramNdx), m_config.useFenceSync, m_config.serverSync)); 27403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_ATTACH_SHADER: 27433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program = m_threads[threadNdx]->context->resourceManager->popProgram(attachProgramNdx); 27453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader = m_threads[threadNdx]->context->resourceManager->popShader(attachShaderNdx); 27463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::AttachShader(program, shader, m_config.useFenceSync, m_config.serverSync)); 27483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addProgram(program); 27503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addShader(shader); 27513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_DETACH_SHADER: 27553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program = m_threads[threadNdx]->context->resourceManager->popProgram(detachableProgramNdx); 27573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DetachShader(program, detachShaderType, m_config.useFenceSync, m_config.serverSync)); 27583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addProgram(program); 27593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_LINK_PROGRAM: 27633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program = m_threads[threadNdx]->context->resourceManager->popProgram(linkableProgramNdx); 27653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::LinkProgram(program, m_config.useFenceSync, m_config.serverSync)); 27663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addProgram(program); 27673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE: 27713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::EGLImage> image; 27733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->popTexture(nonSiblingTextureNdx); 27743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::CreateImageFromTexture(image, texture, m_config.useFenceSync, m_config.serverSync)); 27753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // \note [mika] Can source be added back to resourceManager? 27763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 27773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addImage(image); 27783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_DESTROY_IMAGE: 27823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int imageNdx = m_random.getInt(0, resourceManager.getImageCount()-1); 27843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::EGLImage> image = resourceManager.popImage(imageNdx); 27853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DestroyImage(image, m_config.useFenceSync, m_config.serverSync)); 27863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 27893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case THREADOPERATIONID_TEXTURE_FROM_IMAGE: 27903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 27913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int imageNdx = m_random.getInt(0, resourceManager.getImageCount()-1); 27923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture = m_threads[threadNdx]->context->resourceManager->popTexture(destroyableTextureNdx); 27933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::EGLImage> image = resourceManager.popImage(imageNdx); 27943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->addOperation(new GLES2ThreadTest::DefineTextureFromImage(texture, image, m_config.useFenceSync, m_config.serverSync)); 27953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->context->resourceManager->addTexture(texture); 27963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry resourceManager.addImage(image); 27973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 27983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 27993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 28013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 28023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_lastOperation = op; 28053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 28063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28073c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::TestCase::IterateResult GLES2SharingRandomTest::iterate (void) 28083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 28093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!m_threadsStarted) 28103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_beginTimeUs = deGetMicroseconds(); 28123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Execute threads 28143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 28153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->exec(); 28163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threadsStarted = true; 28183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threadsRunning = true; 28193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threadsRunning) 28223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Wait threads to finish 28243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int readyThreads = 0; 28253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 28263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2827fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi const tcu::ThreadUtil::Thread::ThreadStatus status = m_threads[threadNdx]->getStatus(); 2828fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 2829fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi if (status != tcu::ThreadUtil::Thread::THREADSTATUS_RUNNING && status != tcu::ThreadUtil::Thread::THREADSTATUS_NOT_STARTED) 28303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readyThreads++; 28313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (readyThreads == (int)m_threads.size()) 28343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 28363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->join(); 28373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_executionReady = true; 28393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_requiresRestart = false; 28403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (deGetMicroseconds() - m_beginTimeUs > m_timeOutUs) 28433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 28453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getStatus() != tcu::ThreadUtil::Thread::THREADSTATUS_RUNNING) 28473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->isStarted()) 28493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->join(); 28503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_executionReady = true; 28533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_requiresRestart = true; 28543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_timeOutTimeUs = deGetMicroseconds(); 28553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 28573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deSleep(m_sleepTimeMs); 28593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_executionReady) 28633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<int> indices(m_threads.size(), 0); 2865fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 2866fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi if (m_timeOutTimeUs != 0) 2867fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_log << tcu::TestLog::Message << "Execution timeout limit reached. Trying to get per thread logs. This is potentially dangerous." << tcu::TestLog::EndMessage; 2868fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 28693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (true) 28703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2871653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos int firstThread = -1; 28723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Find first thread with messages 28743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 28753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getMessageCount() > indices[threadNdx]) 28773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry firstThread = threadNdx; 28793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 28803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // No more messages 28843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (firstThread == -1) 28853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 28863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 28883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 28893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // No more messages in this thread 28903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getMessageCount() <= indices[threadNdx]) 28913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry continue; 28923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 28933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((m_threads[threadNdx]->getMessage(indices[threadNdx]).getTime() - m_beginTimeUs) < (m_threads[firstThread]->getMessage(indices[firstThread]).getTime() - m_beginTimeUs)) 28943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry firstThread = threadNdx; 28953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 28963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2897fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi tcu::ThreadUtil::Message message = m_threads[firstThread]->getMessage(indices[firstThread]); 2898fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 2899fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_log << tcu::TestLog::Message << "[" << (message.getTime() - m_beginTimeUs) << "] (" << firstThread << ") " << message.getMessage() << tcu::TestLog::EndMessage; 29003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry indices[firstThread]++; 29013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2903fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi if (m_timeOutTimeUs != 0) 2904fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_log << tcu::TestLog::Message << "[" << (m_timeOutTimeUs - m_beginTimeUs) << "] Execution timeout limit reached" << tcu::TestLog::EndMessage; 2905fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 29063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isOk = true; 29073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool notSupported = false; 29083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 29103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2911fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi const tcu::ThreadUtil::Thread::ThreadStatus status = m_threads[threadNdx]->getStatus(); 2912fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 2913fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi switch (status) 29143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2915fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_FAILED: 2916fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_INIT_FAILED: 2917fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_RUNNING: 2918fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi isOk = false; 2919fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi break; 29203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2921fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_NOT_SUPPORTED: 2922fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi notSupported = true; 2923fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi break; 29243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2925fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_READY: 2926fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi // Nothing 2927fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi break; 2928fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 2929fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi default: 2930fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi DE_ASSERT(false); 2931fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi isOk = false; 2932fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi }; 29333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notSupported) 29363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::NotSupportedError("Thread threw tcu::NotSupportedError", "", __FILE__, __LINE__); 29373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (isOk) 29393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 29403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 29413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 29423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 29443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 29453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return CONTINUE; 29473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 29483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass GLES2ThreadedSharingTest : public TestCase 29503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 29513c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 29523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct TestConfig 29533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry enum ResourceType 29553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 29563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RESOURCETYPE_BUFFER = 0, 29573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RESOURCETYPE_TEXTURE, 29583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RESOURCETYPE_VERTEX_SHADER, 29593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RESOURCETYPE_FRAGMENT_SHADER, 29603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RESOURCETYPE_PROGRAM, 29613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry RESOURCETYPE_IMAGE 29623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 29633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ResourceType resourceType; 29653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool singleContext; 29663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int define; 29673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int modify; 29683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool useFenceSync; 29693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool serverSync; 29703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool render; 29713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 29723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest (EglTestContext& context, const TestConfig& config, const char* name, const char* description); 29733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~GLES2ThreadedSharingTest (void); 29743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 29763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void deinit (void); 29773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void); 29783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addBufferOperations (void); 29803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addTextureOperations (void); 29813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addImageOperations (void); 29823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addShaderOperations (GLenum type); 29833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void addProgramOperations (void); 29843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29853c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 29863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestConfig m_config; 29873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestLog& m_log; 29883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int m_seed; 29893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_threadsStarted; 29903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_threadsRunning; 29913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_executionReady; 29923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_requiresRestart; 29933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_beginTimeUs; 29943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_timeOutUs; 29953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint32 m_sleepTimeMs; 29963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_timeOutTimeUs; 29973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 29983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<GLES2ThreadTest::EGLThread*> m_threads; 29993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLDisplay m_eglDisplay; 30013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGLConfig m_eglConfig; 30023c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos glw::Functions m_gl; 30033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 30043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30053c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2ThreadedSharingTest::GLES2ThreadedSharingTest (EglTestContext& context, const TestConfig& config, const char* name, const char* description) 30063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (context, name, description) 30073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_config (config) 30083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_log (m_testCtx.getLog()) 30093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_seed (deStringHash(name)) 30103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_threadsStarted (false) 30113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_threadsRunning (false) 30123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_executionReady (false) 30133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_requiresRestart (false) 30143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_beginTimeUs (0) 30153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_timeOutUs (10000000) // 10 seconds 30163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_sleepTimeMs (1) // 1 milliseconds 30173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_timeOutTimeUs (0) 30183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_eglDisplay (EGL_NO_DISPLAY) 30193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_eglConfig (0) 30203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 30213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 30223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30233c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2ThreadedSharingTest::~GLES2ThreadedSharingTest (void) 30243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 30253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::deinit(); 30263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 30273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30283c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::init (void) 30293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 30303c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const Library& egl = m_eglTestCtx.getLibrary(); 30313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30323c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos const EGLint attribList[] = 30333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 30343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 30353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 30363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_ALPHA_SIZE, 1, 30373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry EGL_NONE 30383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 30393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30403c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_eglDisplay = eglu::getAndInitDisplay(m_eglTestCtx.getNativeDisplay()); 3041653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos m_eglConfig = eglu::chooseSingleConfig(egl, m_eglDisplay, attribList); 30423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30438e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglTestCtx.initGLFunctions(&m_gl, glu::ApiType::es(2,0)); 30448e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos 30453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Check extensions 30463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.useFenceSync) 30473c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_fence_sync"); 30483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.serverSync) 30503c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_wait_sync"); 30513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.resourceType == TestConfig::RESOURCETYPE_IMAGE) 30533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 30543c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_image_base"); 30553c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos requireEGLExtension(egl, m_eglDisplay, "EGL_KHR_gl_texture_2D_image"); 30563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 30573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Create threads 30593c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_threads.push_back(new GLES2ThreadTest::EGLThread(egl, m_gl, deInt32Hash(m_seed))); 30603c67e4f0ec73f9c30c6b2ed2adfbfe7faaf576a4Pyry Haulos m_threads.push_back(new GLES2ThreadTest::EGLThread(egl, m_gl, deInt32Hash(m_seed*200))); 30613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::GLES2Context> contex1; 30633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::GLES2Context> contex2; 30643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Surface> surface1; 30663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Surface> surface2; 30673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Create contexts 30693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateContext(m_eglDisplay, m_eglConfig, SharedPtr<GLES2ThreadTest::GLES2Context>(), contex1)); 30703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CreateContext(m_eglDisplay, m_eglConfig, contex1, contex2)); 30713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Create surfaces 30733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreatePBufferSurface(m_eglDisplay, m_eglConfig, 400, 400, surface1)); 30743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CreatePBufferSurface(m_eglDisplay, m_eglConfig, 400, 400, surface2)); 30753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Make current contexts 30773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::MakeCurrent(*m_threads[0], m_eglDisplay, surface1, contex1)); 30783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::MakeCurrent(*m_threads[1], m_eglDisplay, surface2, contex2)); 30793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Operations to check fence sync support 30803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.useFenceSync) 30813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 30823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::InitGLExtension("GL_OES_EGL_sync")); 30833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::InitGLExtension("GL_OES_EGL_sync")); 30843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 30853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_config.resourceType) 30883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 30893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TestConfig::RESOURCETYPE_BUFFER: 30903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addBufferOperations(); 30913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 30923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TestConfig::RESOURCETYPE_TEXTURE: 30943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addTextureOperations(); 30953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 30963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 30973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TestConfig::RESOURCETYPE_IMAGE: 30983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addImageOperations(); 30993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 31003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TestConfig::RESOURCETYPE_VERTEX_SHADER: 31023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addShaderOperations(GL_VERTEX_SHADER); 31033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 31043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TestConfig::RESOURCETYPE_FRAGMENT_SHADER: 31063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addShaderOperations(GL_FRAGMENT_SHADER); 31073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 31083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TestConfig::RESOURCETYPE_PROGRAM: 31103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addProgramOperations(); 31113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 31123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 31143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 31153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 31163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Relaese contexts 31183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::MakeCurrent(*m_threads[0], m_eglDisplay, SharedPtr<GLES2ThreadTest::Surface>(), SharedPtr<GLES2ThreadTest::GLES2Context>())); 31193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::MakeCurrent(*m_threads[0], m_eglDisplay, SharedPtr<GLES2ThreadTest::Surface>(), SharedPtr<GLES2ThreadTest::GLES2Context>())); 31203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Destory context 31223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DestroyContext(contex1)); 31233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DestroyContext(contex2)); 31243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Destroy surfaces 31263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DestroySurface(m_eglDisplay, surface1)); 31273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DestroySurface(m_eglDisplay, surface2)); 31283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 31293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::addBufferOperations (void) 31313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 31323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Add operations for verify 31333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> vertexShader; 31343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> fragmentShader; 31353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program; 31363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 31383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 31393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* vertexShaderSource = 31403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "attribute highp vec2 a_pos;\n" 31413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 31423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 31433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 31443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tv_pos = a_pos;\n" 31453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_Position = vec4(a_pos, 0.0, 1.0);\n" 31463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 31473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* fragmentShaderSource = 31493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 31503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 31513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 31523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_FragColor = vec4(v_pos, 0.5, 1.0);\n" 31533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 31543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_VERTEX_SHADER, vertexShader, m_config.useFenceSync, m_config.serverSync)); 31563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(vertexShader, vertexShaderSource, m_config.useFenceSync, m_config.serverSync)); 31573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(vertexShader, m_config.useFenceSync, m_config.serverSync)); 31583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_FRAGMENT_SHADER, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 31603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(fragmentShader, fragmentShaderSource, m_config.useFenceSync, m_config.serverSync)); 31613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 31623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateProgram(program, m_config.useFenceSync, m_config.serverSync)); 31643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 31653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, vertexShader, m_config.useFenceSync, m_config.serverSync)); 31663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::LinkProgram(program, m_config.useFenceSync, m_config.serverSync)); 31683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 31693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Buffer> buffer; 31713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateBuffer(buffer, m_config.useFenceSync, m_config.serverSync)); 31733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define) 31753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 31763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 31773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::BufferData(buffer, GL_ARRAY_BUFFER, 1024, GL_DYNAMIC_DRAW, m_config.useFenceSync, m_config.serverSync)); 31783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 31793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::BufferData(buffer, GL_ARRAY_BUFFER, 1024, GL_DYNAMIC_DRAW, m_config.useFenceSync, m_config.serverSync)); 31803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 31813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify) 31833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 31843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 31853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::BufferSubData(buffer, GL_ARRAY_BUFFER, 17, 17, m_config.useFenceSync, m_config.serverSync)); 31863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 31873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::BufferSubData(buffer, GL_ARRAY_BUFFER, 17, 17, m_config.useFenceSync, m_config.serverSync)); 31883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 31893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 31913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 31923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::RenderBuffer(program, buffer, m_config.useFenceSync, m_config.serverSync)); 31933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::RenderBuffer(program, buffer, m_config.useFenceSync, m_config.serverSync)); 31943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> pixels1; 31963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> pixels2; 31973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 31983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ReadPixels(0, 0, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, pixels1, m_config.useFenceSync, m_config.serverSync)); 31993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::ReadPixels(0, 0, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, pixels2, m_config.useFenceSync, m_config.serverSync)); 32003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new tcu::ThreadUtil::CompareData(pixels1, pixels2)); 32023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 32053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteBuffer(buffer, m_config.useFenceSync, m_config.serverSync)); 32063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 32073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DeleteBuffer(buffer, m_config.useFenceSync, m_config.serverSync)); 32083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 32103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(vertexShader, m_config.useFenceSync, m_config.serverSync)); 32123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 32133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteProgram(program, m_config.useFenceSync, m_config.serverSync)); 32143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 32163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::addTextureOperations (void) 32183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 32193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Add operations for verify 32203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> vertexShader; 32213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> fragmentShader; 32223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program; 32233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 32253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* vertexShaderSource = 32273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "attribute highp vec2 a_pos;\n" 32283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 32293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 32303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 32313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tv_pos = a_pos;\n" 32323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_Position = vec4(a_pos, 0.0, 1.0);\n" 32333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 32343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* fragmentShaderSource = 32363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 32373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "uniform sampler2D u_sampler;\n" 32383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 32393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 32403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_FragColor = texture2D(u_sampler, v_pos);\n" 32413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 32423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_VERTEX_SHADER, vertexShader, m_config.useFenceSync, m_config.serverSync)); 32443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(vertexShader, vertexShaderSource, m_config.useFenceSync, m_config.serverSync)); 32453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(vertexShader, m_config.useFenceSync, m_config.serverSync)); 32463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_FRAGMENT_SHADER, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 32483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(fragmentShader, fragmentShaderSource, m_config.useFenceSync, m_config.serverSync)); 32493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 32503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateProgram(program, m_config.useFenceSync, m_config.serverSync)); 32523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 32533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, vertexShader, m_config.useFenceSync, m_config.serverSync)); 32543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::LinkProgram(program, m_config.useFenceSync, m_config.serverSync)); 32563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture; 32593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateTexture(texture, m_config.useFenceSync, m_config.serverSync)); 32613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define == 1) 32633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 32653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::TexImage2D(texture, 0, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 32663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 32673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::TexImage2D(texture, 0, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 32683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define == 2) 32713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 32733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CopyTexImage2D(texture, 0, GL_RGBA, 17, 17, 256, 256, 0, m_config.useFenceSync, m_config.serverSync)); 32743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 32753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CopyTexImage2D(texture, 0, GL_RGBA, 17, 17, 256, 256, 0, m_config.useFenceSync, m_config.serverSync)); 32763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 1) 32793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 32813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::TexSubImage2D(texture, 0, 17, 17, 29, 29, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 32823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 32833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::TexSubImage2D(texture, 0, 17, 17, 29, 29, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 32843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 2) 32873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 32893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CopyTexSubImage2D(texture, 0, 7, 7, 17, 17, 29, 29, m_config.useFenceSync, m_config.serverSync)); 32903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 32913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CopyTexSubImage2D(texture, 0, 7, 7, 17, 17, 29, 29, m_config.useFenceSync, m_config.serverSync)); 32923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 32933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 32953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 32963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> pixels1; 32973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> pixels2; 32983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 32993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::RenderTexture(program, texture, m_config.useFenceSync, m_config.serverSync)); 33003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::RenderTexture(program, texture, m_config.useFenceSync, m_config.serverSync)); 33013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ReadPixels(0, 0, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, pixels1, m_config.useFenceSync, m_config.serverSync)); 33033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::ReadPixels(0, 0, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, pixels2, m_config.useFenceSync, m_config.serverSync)); 33043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new tcu::ThreadUtil::CompareData(pixels1, pixels2)); 33063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 33073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 33093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteTexture(texture, m_config.useFenceSync, m_config.serverSync)); 33103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 33113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DeleteTexture(texture, m_config.useFenceSync, m_config.serverSync)); 33123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 33143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 33153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(vertexShader, m_config.useFenceSync, m_config.serverSync)); 33163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 33173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteProgram(program, m_config.useFenceSync, m_config.serverSync)); 33183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 33193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 33203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33213c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::addImageOperations (void) 33223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 33233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Add operations for verify 33243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> vertexShader; 33253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> fragmentShader; 33263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program; 33273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::InitGLExtension("GL_OES_EGL_image")); 33293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::InitGLExtension("GL_OES_EGL_image")); 33303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 33323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 33333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* vertexShaderSource = 33343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "attribute highp vec2 a_pos;\n" 33353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 33363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 33373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 33383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tv_pos = a_pos;\n" 33393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_Position = vec4(a_pos, 0.0, 1.0);\n" 33403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 33413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* fragmentShaderSource = 33433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 33443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "uniform sampler2D u_sampler;\n" 33453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 33463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 33473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_FragColor = texture2D(u_sampler, v_pos);\n" 33483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 33493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_VERTEX_SHADER, vertexShader, m_config.useFenceSync, m_config.serverSync)); 33513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(vertexShader, vertexShaderSource, m_config.useFenceSync, m_config.serverSync)); 33523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(vertexShader, m_config.useFenceSync, m_config.serverSync)); 33533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_FRAGMENT_SHADER, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 33553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(fragmentShader, fragmentShaderSource, m_config.useFenceSync, m_config.serverSync)); 33563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 33573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateProgram(program, m_config.useFenceSync, m_config.serverSync)); 33593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 33603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, vertexShader, m_config.useFenceSync, m_config.serverSync)); 33613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::LinkProgram(program, m_config.useFenceSync, m_config.serverSync)); 33633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 33643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> sourceTexture; 33663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Texture> texture; 33673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::EGLImage> image; 33683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateTexture(sourceTexture, m_config.useFenceSync, m_config.serverSync)); 33703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::TexImage2D(sourceTexture, 0, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 33713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define == 1) 33733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 33743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 33753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateImageFromTexture(image, sourceTexture, m_config.useFenceSync, m_config.serverSync)); 33763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 33773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CreateImageFromTexture(image, sourceTexture, m_config.useFenceSync, m_config.serverSync)); 33783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 33793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define == 2) 33813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 33823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateImageFromTexture(image, sourceTexture, m_config.useFenceSync, m_config.serverSync)); 33833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateTexture(texture, m_config.useFenceSync, m_config.serverSync)); 33843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 33863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DefineTextureFromImage(texture, image, m_config.useFenceSync, m_config.serverSync)); 33873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 33883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DefineTextureFromImage(texture, image, m_config.useFenceSync, m_config.serverSync)); 33893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 33903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteTexture(sourceTexture, m_config.useFenceSync, m_config.serverSync)); 33923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 1) 33943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 33953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_config.define != 1); 33963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 33973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 33983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::TexSubImage2D(texture, 0, 17, 17, 29, 29, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 33993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::TexSubImage2D(texture, 0, 17, 17, 29, 29, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 34013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 2) 34043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_config.define != 1); 34063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 34083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CopyTexSubImage2D(texture, 0, 7, 7, 17, 17, 29, 29, m_config.useFenceSync, m_config.serverSync)); 34093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CopyTexSubImage2D(texture, 0, 7, 7, 17, 17, 29, 29, m_config.useFenceSync, m_config.serverSync)); 34113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 3) 34143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_config.define != 1); 34163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 34183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::TexImage2D(texture, 0, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 34193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::TexImage2D(texture, 0, GL_RGBA, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, m_config.useFenceSync, m_config.serverSync)); 34213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 4) 34243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_config.define != 1); 34263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 34283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CopyTexImage2D(texture, 0, GL_RGBA, 7, 7, 256, 256, 0, m_config.useFenceSync, m_config.serverSync)); 34293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::CopyTexImage2D(texture, 0, GL_RGBA, 7, 7, 256, 256, 0, m_config.useFenceSync, m_config.serverSync)); 34313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 34343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(m_config.define != 1); 34363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> pixels1; 34383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<tcu::ThreadUtil::DataBlock> pixels2; 34393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::RenderTexture(program, texture, m_config.useFenceSync, m_config.serverSync)); 34413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::RenderTexture(program, texture, m_config.useFenceSync, m_config.serverSync)); 34423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ReadPixels(0, 0, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, pixels1, m_config.useFenceSync, m_config.serverSync)); 34443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::ReadPixels(0, 0, 400, 400, GL_RGBA, GL_UNSIGNED_BYTE, pixels2, m_config.useFenceSync, m_config.serverSync)); 34453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new tcu::ThreadUtil::CompareData(pixels1, pixels2)); 34473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (texture) 34503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 34523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteTexture(texture, m_config.useFenceSync, m_config.serverSync)); 34533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DeleteTexture(texture, m_config.useFenceSync, m_config.serverSync)); 34553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 34583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DestroyImage(image, m_config.useFenceSync, m_config.serverSync)); 34593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DestroyImage(image, m_config.useFenceSync, m_config.serverSync)); 34613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 34633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(vertexShader, m_config.useFenceSync, m_config.serverSync)); 34653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 34663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteProgram(program, m_config.useFenceSync, m_config.serverSync)); 34673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 34693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::addShaderOperations (GLenum type) 34713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 34723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> shader; 34733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(type, shader, m_config.useFenceSync, m_config.serverSync)); 34753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define) 34773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* vertexShaderSource = 34793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "attribute mediump vec4 a_pos;\n" 34803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 34813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 34823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_Position = a_pos;\n" 34833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}"; 34843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* fragmentShaderSource = 34863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 34873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 34883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n" 34893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}"; 34903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 34923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(shader, (type == GL_VERTEX_SHADER ? vertexShaderSource : fragmentShaderSource), m_config.useFenceSync, m_config.serverSync)); 34933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 34943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::ShaderSource(shader, (type == GL_VERTEX_SHADER ? vertexShaderSource : fragmentShaderSource), m_config.useFenceSync, m_config.serverSync)); 34953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 34963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 34973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify) 34983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 34993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 35003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(shader, m_config.useFenceSync, m_config.serverSync)); 35013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 35023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::ShaderCompile(shader, m_config.useFenceSync, m_config.serverSync)); 35033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(!m_config.render); 35063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 35083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(shader, m_config.useFenceSync, m_config.serverSync)); 35093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 35103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DeleteShader(shader, m_config.useFenceSync, m_config.serverSync)); 35113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 35123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35133c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::addProgramOperations (void) 35143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 35153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Add operations for verify 35163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> vertexShader; 35173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Shader> fragmentShader; 35183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define) 35203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* vertexShaderSource = 35223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "attribute highp vec2 a_pos;\n" 35233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 35243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 35253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 35263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tv_pos = a_pos;\n" 35273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_Position = vec4(a_pos, 0.0, 1.0);\n" 35283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 35293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* fragmentShaderSource = 35313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "varying mediump vec2 v_pos;\n" 35323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "void main(void)\n" 35333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "{\n" 35343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "\tgl_FragColor = vec4(v_pos, 0.5, 1.0);\n" 35353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "}\n"; 35363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_VERTEX_SHADER, vertexShader, m_config.useFenceSync, m_config.serverSync)); 35383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(vertexShader, vertexShaderSource, m_config.useFenceSync, m_config.serverSync)); 35393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(vertexShader, m_config.useFenceSync, m_config.serverSync)); 35403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateShader(GL_FRAGMENT_SHADER, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 35423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderSource(fragmentShader, fragmentShaderSource, m_config.useFenceSync, m_config.serverSync)); 35433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::ShaderCompile(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 35443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedPtr<GLES2ThreadTest::Program> program; 35473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::CreateProgram(program, m_config.useFenceSync, m_config.serverSync)); 35493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.define) 35513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Attach shaders 35533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 35543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, vertexShader, m_config.useFenceSync, m_config.serverSync)); 35563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::AttachShader(program, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 35573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 35593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::AttachShader(program, vertexShader, m_config.useFenceSync, m_config.serverSync)); 35613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::AttachShader(program, fragmentShader, m_config.useFenceSync, m_config.serverSync)); 35623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 1) 35663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Link program 35683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 35693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::LinkProgram(program, m_config.useFenceSync, m_config.serverSync)); 35703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 35713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::LinkProgram(program, m_config.useFenceSync, m_config.serverSync)); 35723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify == 2) 35753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Link program 35773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 35783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DetachShader(program, GL_VERTEX_SHADER, m_config.useFenceSync, m_config.serverSync)); 35803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DetachShader(program, GL_FRAGMENT_SHADER, m_config.useFenceSync, m_config.serverSync)); 35813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 35833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DetachShader(program, GL_VERTEX_SHADER, m_config.useFenceSync, m_config.serverSync)); 35853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DetachShader(program, GL_FRAGMENT_SHADER, m_config.useFenceSync, m_config.serverSync)); 35863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 35903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 35913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 35923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 35933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.modify || m_config.render) 35953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteProgram(program, m_config.useFenceSync, m_config.serverSync)); 35963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 35973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[1]->addOperation(new GLES2ThreadTest::DeleteProgram(program, m_config.useFenceSync, m_config.serverSync)); 35983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 35993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_config.render) 36003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(vertexShader, m_config.useFenceSync, m_config.serverSync)); 36023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[0]->addOperation(new GLES2ThreadTest::DeleteShader(fragmentShader, m_config.useFenceSync, m_config.serverSync)); 36033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 36053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36063c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2ThreadedSharingTest::deinit (void) 36073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 36083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 3609fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi { 36103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_threads[threadNdx]; 3611fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_threads[threadNdx] = DE_NULL; 3612fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi } 36133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads.clear(); 36158e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos 36168e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos if (m_eglDisplay != EGL_NO_DISPLAY) 36178e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos { 36188e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglTestCtx.getLibrary().terminate(m_eglDisplay); 36198e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos m_eglDisplay = EGL_NO_DISPLAY; 36208e814ce14475b71be9d3e17db2f1d1c6a3fcc59fPyry Haulos } 36213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK(!m_requiresRestart); 36233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 36243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytcu::TestCase::IterateResult GLES2ThreadedSharingTest::iterate (void) 36263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 36273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!m_threadsStarted) 36283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_beginTimeUs = deGetMicroseconds(); 36303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Execute threads 36323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 36333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->exec(); 36343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threadsStarted = true; 36363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threadsRunning = true; 36373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threadsRunning) 36403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Wait threads to finish 36423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int readyThreads = 0; 36433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 36443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getStatus() != tcu::ThreadUtil::Thread::THREADSTATUS_RUNNING) 36463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry readyThreads++; 36473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (readyThreads == (int)m_threads.size()) 36503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 36523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->join(); 36533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_executionReady = true; 36553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_requiresRestart = false; 36563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (deGetMicroseconds() - m_beginTimeUs > m_timeOutUs) 36593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 36613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getStatus() != tcu::ThreadUtil::Thread::THREADSTATUS_RUNNING) 36633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_threads[threadNdx]->join(); 36643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_executionReady = true; 36663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_requiresRestart = true; 36673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_timeOutTimeUs = deGetMicroseconds(); 36683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 36703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deSleep(m_sleepTimeMs); 36723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_executionReady) 36763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<int> indices(m_threads.size(), 0); 3678fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 3679fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi if (m_timeOutTimeUs != 0) 3680fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_log << tcu::TestLog::Message << "Execution timeout limit reached. Trying to get per thread logs. This is potentially dangerous." << tcu::TestLog::EndMessage; 3681fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 36823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry while (true) 36833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3684653ad0e8a4209754304cbd5b5ceb4fdc7b29c01aPyry Haulos int firstThread = -1; 36853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Find first thread with messages 36873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 36883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getMessageCount() > indices[threadNdx]) 36903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 36913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry firstThread = threadNdx; 36923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 36933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 36953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 36963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // No more messages 36973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (firstThread == -1) 36983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry break; 36993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 37013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 37023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // No more messages in this thread 37033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (m_threads[threadNdx]->getMessageCount() <= indices[threadNdx]) 37043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry continue; 37053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if ((m_threads[threadNdx]->getMessage(indices[threadNdx]).getTime() - m_beginTimeUs) < (m_threads[firstThread]->getMessage(indices[firstThread]).getTime() - m_beginTimeUs)) 37073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry firstThread = threadNdx; 37083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 37093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3710fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi tcu::ThreadUtil::Message message = m_threads[firstThread]->getMessage(indices[firstThread]); 3711fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 3712fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_log << tcu::TestLog::Message << "[" << (message.getTime() - m_beginTimeUs) << "] (" << firstThread << ") " << message.getMessage() << tcu::TestLog::EndMessage; 37133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry indices[firstThread]++; 37143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 37153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3716fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi if (m_timeOutTimeUs != 0) 3717fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi m_log << tcu::TestLog::Message << "[" << (m_timeOutTimeUs - m_beginTimeUs) << "] Execution timeout limit reached" << tcu::TestLog::EndMessage; 3718fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 37193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool isOk = true; 37203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool notSupported = false; 37213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int threadNdx = 0; threadNdx < (int)m_threads.size(); threadNdx++) 37233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3724fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi const tcu::ThreadUtil::Thread::ThreadStatus status = m_threads[threadNdx]->getStatus(); 3725fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 3726fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi switch (status) 37273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3728fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_FAILED: 3729fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_INIT_FAILED: 3730fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_RUNNING: 3731fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi isOk = false; 3732fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi break; 37333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3734fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_NOT_SUPPORTED: 3735fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi notSupported = true; 3736fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi break; 3737fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 3738fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi case tcu::ThreadUtil::Thread::THREADSTATUS_READY: 3739fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi // Nothing 3740fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi break; 3741fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi 3742fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi default: 3743fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi DE_ASSERT(false); 3744fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi isOk = false; 3745fd41d5db179bcd04819c656c3100324a787a456fMika Isojärvi }; 37463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 37473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (notSupported) 37493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::NotSupportedError("Thread threw tcu::NotSupportedError", "", __FILE__, __LINE__); 37503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (isOk) 37523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 37533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 37543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 37553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 37573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 37583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return CONTINUE; 37603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 37613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37623c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void addSimpleTests (EglTestContext& ctx, tcu::TestCaseGroup* group, bool useSync, bool serverSync) 37633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 37643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 37653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* bufferTests = new TestCaseGroup(ctx, "buffers", "Buffer management tests"); 37663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 37683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 37693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_BUFFER; 37713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 37723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 37733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 0; 37743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 37753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 37763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "gen_delete", "Generate and delete buffer")); 37773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 37783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 37803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 37813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_BUFFER; 37833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 37843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 37853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 37863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 37873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 37883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "bufferdata", "Generate, set data and delete buffer")); 37893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 37903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 37923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 37933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 37943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_BUFFER; 37953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 37963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 37973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 37983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 37993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 38003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "buffersubdata", "Generate, set data, update data and delete buffer")); 38013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_BUFFER; 38073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 38103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 38113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 38123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "bufferdata_render", "Generate, set data, render and delete buffer")); 38133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_BUFFER; 38193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 38223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 38233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 38243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "buffersubdata_render", "Generate, set data, update data, render and delete buffer")); 38253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(bufferTests); 38283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* textureTests = new TestCaseGroup(ctx, "textures", "Texture management tests"); 38323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 38373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 0; 38403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 38413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 38423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "gen_delete", "Generate and delete texture")); 38433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 38493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 38523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 38533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 38543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d", "Generate, set data and delete texture")); 38553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 38613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 38643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 38653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 38663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d_texsubimage2d", "Generate, set data, update data and delete texture")); 38673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 38733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 38763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 2; 38773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 38783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d_copytexsubimage2d", "Generate, set data, update data and delete texture")); 38793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 38853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 38883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 38893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 38903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d_render", "Generate, set data, render and delete texture")); 38913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 38923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 38943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 38953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 38963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 38973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 38983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 38993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 39003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 39013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 39023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d_texsubimage2d_render", "Generate, set data, update data, render and delete texture")); 39033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 39123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 2; 39133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 39143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d_copytexsubimage2d_render", "Generate, set data, update data, render and delete texture")); 39153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 39243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 39253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 39263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d", "Generate, set data and delete texture")); 39273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 39363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 39373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 39383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d_texsubimage2d", "Generate, set data, update data and delete texture")); 39393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 39483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 2; 39493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 39503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d_copytexsubimage2d", "Generate, set data, update data and delete texture")); 39513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 39603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 39613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 39623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d_render", "Generate, set data, render and delete texture")); 39633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 39723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 39733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 39743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d_texsubimage2d_render", "Generate, set data, update data, render and delete texture")); 39753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_TEXTURE; 39813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 39823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 39833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 39843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 2; 39853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 39863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d_copytexsubimage2d_render", "Generate, set data, update data, render and delete texture")); 39873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(textureTests); 39903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 39913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* shaderTests = new TestCaseGroup(ctx, "shaders", "Shader management tests"); 39943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 39963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 39973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 39983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_VERTEX_SHADER; 39993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 0; 40023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 40033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "vtx_create_destroy", "Create and delete shader")); 40053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_VERTEX_SHADER; 40113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 40143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 40153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "vtx_shadersource", "Create, set source and delete shader")); 40173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_VERTEX_SHADER; 40233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 40263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 40273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "vtx_compile", "Create, set source, compile and delete shader")); 40293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_FRAGMENT_SHADER; 40353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 0; 40383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 40393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "frag_create_destroy", "Create and delete shader")); 40413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_FRAGMENT_SHADER; 40473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 40503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 40513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "frag_shadersource", "Create, set source and delete shader")); 40533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_FRAGMENT_SHADER; 40593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 40623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 40633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "frag_compile", "Create, set source, compile and delete shader")); 40653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(shaderTests); 40683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* programTests = new TestCaseGroup(ctx, "programs", "Program management tests"); 40723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_PROGRAM; 40773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 0; 40803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 40813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry programTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "create_destroy", "Create and delete program")); 40833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_PROGRAM; 40893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 40903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 40913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 40923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 40933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 40943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry programTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "attach", "Create, attach shaders and delete program")); 40953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 40963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 40973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 40983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 40993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_PROGRAM; 41013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 41043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 41053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry programTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "link", "Create, attach shaders, link and delete program")); 41073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(programTests); 41103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* imageTests = new TestCaseGroup(ctx, "images", "Image management tests"); 41143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* textureSourceTests = new TestCaseGroup(ctx, "texture_source", "Image management tests with texture source."); 41163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 1; 41233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 41243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "create_destroy", "Create and destroy EGLImage.")); 41263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 41353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 41363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "create_texture", "Create texture from image.")); 41383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 41473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 41483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "texsubimage2d", "Modify texture created from image with glTexSubImage2D.")); 41503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 41593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 2; 41603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copytexsubimage2d", "Modify texture created from image with glCopyTexSubImage2D.")); 41623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 41713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 3; 41723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d", "Modify texture created from image with glTexImage2D.")); 41743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 41833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 4; 41843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = false; 41853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d", "Modify texture created from image with glCopyTexImage2D.")); 41863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 41893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 41903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 41913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 41923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 41933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 41943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 41953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 0; 41963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 41973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "create_texture_render", "Create texture from image and render.")); 41983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 41993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 42023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 42043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 42053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 42063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 42073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 1; 42083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 42093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "texsubimage2d_render", "Modify texture created from image and render.")); 42103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 42143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 42163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 42173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 42183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 42193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 2; 42203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 42213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copytexsubimage2d_render", "Modify texture created from image and render.")); 42223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 42263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 42283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 42293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 42303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 42313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 3; 42323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 42333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "teximage2d_render", "Modify texture created from image and render.")); 42343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2ThreadedSharingTest::TestConfig config; 42383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.resourceType = GLES2ThreadedSharingTest::TestConfig::RESOURCETYPE_IMAGE; 42403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 42413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 42423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.define = 2; 42433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.modify = 4; 42443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.render = true; 42453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureSourceTests->addChild(new GLES2ThreadedSharingTest(ctx, config, "copyteximage2d_render", "Modify texture created from image and render.")); 42463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry imageTests->addChild(textureSourceTests); 42493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(imageTests); 42513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 42543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42553c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic void addRandomTests (EglTestContext& ctx, tcu::TestCaseGroup* group, bool useSync, bool serverSync) 42563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 42573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* textureTests = new TestCaseGroup(ctx, "textures", "Texture management tests"); 42593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* genTextureTests = new TestCaseGroup(ctx, "gen_delete", "Texture gen and delete tests"); 42623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int textureTestNdx = 0; textureTestNdx < 20; textureTestNdx++) 42643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 42663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 42673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 42683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + textureTestNdx % 5; 42693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 30 + textureTestNdx; 42703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 42723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 42743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.75f; 42753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.5f; 42773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.5f; 42783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(textureTestNdx); 42803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry genTextureTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 42813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(genTextureTests); 42843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 42853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texImage2DTests = new TestCaseGroup(ctx, "teximage2d", "Texture gen, delete and teximage2D tests"); 42883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int textureTestNdx = 0; textureTestNdx < 20; textureTestNdx++) 42903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 42913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 42923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 42933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 42943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + textureTestNdx % 5; 42953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 40 + textureTestNdx; 42963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 42983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 42993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 43003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.10f; 43013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.80f; 43023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.30f; 43043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.40f; 43053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.30f; 43063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.40f; 43083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.40f; 43093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.20f; 43103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(textureTestNdx); 43123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 43133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 43143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(texImage2DTests); 43163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 43173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 43193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texSubImage2DTests = new TestCaseGroup(ctx, "texsubimage2d", "Texture gen, delete, teximage2D and texsubimage2d tests"); 43203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int textureTestNdx = 0; textureTestNdx < 20; textureTestNdx++) 43223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 43233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 43243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 43253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 43263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + textureTestNdx % 5; 43273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 50 + textureTestNdx; 43283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 43303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.05f; 43323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.10f; 43333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.80f; 43343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.05f; 43353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.30f; 43373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.40f; 43383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.20f; 43393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 43403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.20f; 43423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 43433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.10f; 43443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.50f; 43453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.20f; 43473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 43483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.25f; 43493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.30f; 43503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(textureTestNdx); 43523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 43533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 43543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(texSubImage2DTests); 43563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 43573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 43593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* copyTexImage2DTests = new TestCaseGroup(ctx, "copyteximage2d", "Texture gen, delete and copyteximage2d tests"); 43603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int textureTestNdx = 0; textureTestNdx < 20; textureTestNdx++) 43623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 43633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 43643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 43653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 43663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + textureTestNdx % 5; 43673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 40 + textureTestNdx; 43683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 43703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 43723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.10f; 43733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.80f; 43743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.30f; 43763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.40f; 43773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.30f; 43783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.40f; 43803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.40f; 43813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.20f; 43823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(textureTestNdx); 43853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry copyTexImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 43863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 43873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(copyTexImage2DTests); 43893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 43903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 43923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* copyTexSubImage2DTests = new TestCaseGroup(ctx, "copytexsubimage2d", "Texture gen, delete, teximage2D and copytexsubimage2d tests"); 43933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 43943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int textureTestNdx = 0; textureTestNdx < 20; textureTestNdx++) 43953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 43963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 43973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 43983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 43993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + textureTestNdx % 5; 44003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 50 + textureTestNdx; 44013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 44033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.05f; 44053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.10f; 44063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.80f; 44073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.05f; 44083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.30f; 44103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.40f; 44113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.20f; 44123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 44133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.20f; 44153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 44163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.10f; 44173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.50f; 44183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.20f; 44203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 44213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.25f; 44223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.30f; 44233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(textureTestNdx); 44263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry copyTexSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 44273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 44283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry textureTests->addChild(copyTexSubImage2DTests); 44303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 44313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(textureTests); 44333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* bufferTests = new TestCaseGroup(ctx, "buffers", "Buffer management tests"); 44353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 44373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* genBufferTests = new TestCaseGroup(ctx, "gen_delete", "Buffer gen and delete tests"); 44383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int bufferTestNdx = 0; bufferTestNdx < 20; bufferTestNdx++) 44403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 44413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 44423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 44433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 44443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + bufferTestNdx % 5; 44453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 30 + bufferTestNdx; 44463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_BUFFER] = 1.0f; 44483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_DESTROY_BUFFER] = 0.25f; 44503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_CREATE_BUFFER] = 0.75f; 44513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_DESTROY_BUFFER] = 0.5f; 44533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_CREATE_BUFFER] = 0.5f; 44543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(bufferTestNdx); 44563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry genBufferTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 44573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 44583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(genBufferTests); 44603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 44613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 44633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texImage2DTests = new TestCaseGroup(ctx, "bufferdata", "Buffer gen, delete and bufferdata tests"); 44643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int bufferTestNdx = 0; bufferTestNdx < 20; bufferTestNdx++) 44663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 44673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 44683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 44693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 44703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + bufferTestNdx % 5; 44713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 40 + bufferTestNdx; 44723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_BUFFER] = 1.0f; 44743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_DESTROY_BUFFER] = 0.10f; 44763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_CREATE_BUFFER] = 0.10f; 44773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_BUFFER_DATA] = 0.80f; 44783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_DESTROY_BUFFER] = 0.30f; 44803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_CREATE_BUFFER] = 0.40f; 44813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_BUFFER_DATA] = 0.30f; 44823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_DESTROY_BUFFER] = 0.40f; 44843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_CREATE_BUFFER] = 0.40f; 44853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_BUFFER_DATA] = 0.20f; 44863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(bufferTestNdx); 44883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 44893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 44903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(texImage2DTests); 44923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 44933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 44953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texSubImage2DTests = new TestCaseGroup(ctx, "buffersubdata", "Buffer gen, delete, bufferdata and bufferdata tests"); 44963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 44973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int bufferTestNdx = 0; bufferTestNdx < 20; bufferTestNdx++) 44983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 44993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 45003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 45013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 45023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + bufferTestNdx % 5; 45033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 50 + bufferTestNdx; 45043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_BUFFER] = 1.0f; 45063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_DESTROY_BUFFER] = 0.05f; 45083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_CREATE_BUFFER] = 0.10f; 45093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_BUFFER_DATA] = 0.80f; 45103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_BUFFER][THREADOPERATIONID_BUFFER_SUBDATA] = 0.05f; 45113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_DESTROY_BUFFER] = 0.30f; 45133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_CREATE_BUFFER] = 0.40f; 45143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_BUFFER_DATA] = 0.20f; 45153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_BUFFER][THREADOPERATIONID_BUFFER_SUBDATA] = 0.10f; 45163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_DESTROY_BUFFER] = 0.20f; 45183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_CREATE_BUFFER] = 0.20f; 45193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_BUFFER_DATA] = 0.10f; 45203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_DATA][THREADOPERATIONID_BUFFER_SUBDATA] = 0.50f; 45213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_SUBDATA][THREADOPERATIONID_DESTROY_BUFFER] = 0.20f; 45233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_SUBDATA][THREADOPERATIONID_CREATE_BUFFER] = 0.25f; 45243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_SUBDATA][THREADOPERATIONID_BUFFER_DATA] = 0.25f; 45253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_BUFFER_SUBDATA][THREADOPERATIONID_BUFFER_SUBDATA] = 0.30f; 45263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(bufferTestNdx); 45283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 45293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 45303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bufferTests->addChild(texSubImage2DTests); 45323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 45333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(bufferTests); 45353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* shaderTests = new TestCaseGroup(ctx, "shaders", "Shader management tests"); 45373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 45393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* createShaderTests = new TestCaseGroup(ctx, "create_destroy", "Shader create and destroy tests"); 45403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int shaderTestNdx = 0; shaderTestNdx < 20; shaderTestNdx++) 45423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 45433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 45443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 45453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 45463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + shaderTestNdx % 5; 45473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 30 + shaderTestNdx; 45483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.5f; 45503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.5f; 45513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 45533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.40f; 45543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.40f; 45553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 45573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.40f; 45583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.40f; 45593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.5f; 45613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.25f; 45623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.25f; 45633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(shaderTestNdx); 45653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry createShaderTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 45663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 45673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(createShaderTests); 45693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 45703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 45723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texImage2DTests = new TestCaseGroup(ctx, "source", "Shader create, destroy and source tests"); 45733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int shaderTestNdx = 0; shaderTestNdx < 20; shaderTestNdx++) 45753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 45763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 45773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 45783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 45793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + shaderTestNdx % 5; 45803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 40 + shaderTestNdx; 45813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.5f; 45833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.5f; 45843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 45863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 45873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 45883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.50f; 45893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 45913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 45923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 45933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.50f; 45943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 45953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.30f; 45963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.30f; 45973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.30f; 45983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 45993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 46013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 46023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 46033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_SOURCE] = 0.40f; 46043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(shaderTestNdx); 46063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 46073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 46083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(texImage2DTests); 46103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 46113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 46133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texSubImage2DTests = new TestCaseGroup(ctx, "compile", "Shader create, destroy, source and compile tests"); 46143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int shaderTestNdx = 0; shaderTestNdx < 20; shaderTestNdx++) 46163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 46173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 46183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 46193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 46203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + shaderTestNdx % 5; 46213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 50 + shaderTestNdx; 46223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.5f; 46243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.5f; 46253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 46273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.15f; 46283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.15f; 46293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.50f; 46303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 46313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 46333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.15f; 46343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.15f; 46353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.50f; 46363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 46373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.30f; 46393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.25f; 46403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.25f; 46413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 46423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 46433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 46453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 46463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 46473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_SOURCE] = 0.20f; 46483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_COMPILE] = 0.50f; 46493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_DESTROY_SHADER] = 0.15f; 46513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.15f; 46523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.15f; 46533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 46543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_SHADER_COMPILE] = 0.30f; 46553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(shaderTestNdx); 46573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 46583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 46593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry shaderTests->addChild(texSubImage2DTests); 46613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 46623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(shaderTests); 46643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* programTests = new TestCaseGroup(ctx, "programs", "Program management tests"); 46663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 46683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* createProgramTests = new TestCaseGroup(ctx, "create_destroy", "Program create and destroy tests"); 46693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int programTestNdx = 0; programTestNdx < 20; programTestNdx++) 46713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 46723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 46733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 46743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 46753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + programTestNdx % 5; 46763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 30 + programTestNdx; 46773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_PROGRAM] = 1.0f; 46793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.25f; 46813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.75f; 46823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.5f; 46843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.5f; 46853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(programTestNdx); 46873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry createProgramTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 46883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 46893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry programTests->addChild(createProgramTests); 46913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 46923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 46943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texImage2DTests = new TestCaseGroup(ctx, "attach_detach", "Program create, destroy, attach and detach tests"); 46953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int programTestNdx = 0; programTestNdx < 20; programTestNdx++) 46973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 46983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 46993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 47003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 47013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + programTestNdx % 5; 47023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 60 + programTestNdx; 47033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.35f; 47053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.35f; 47063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_PROGRAM] = 0.30f; 47073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 47093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 47103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 47113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 47123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 47133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 47143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.05f; 47153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.15f; 47163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 47183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 47193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 47203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 47213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 47223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 47233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.05f; 47243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.15f; 47253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 47273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 47283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 47293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 47303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 47313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.15f; 47323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 47333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.15f; 47343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 47363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 47373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 47383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_SOURCE] = 0.20f; 47393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_COMPILE] = 0.50f; 47403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 47413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_DESTROY_PROGRAM] = 0.10f; 47423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_ATTACH_SHADER] = 0.25f; 47433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_DESTROY_SHADER] = 0.15f; 47453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.15f; 47463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.15f; 47473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 47483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_SHADER_COMPILE] = 0.30f; 47493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 47503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_DESTROY_PROGRAM] = 0.10f; 47513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_ATTACH_SHADER] = 0.35f; 47523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 47543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 47553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 47563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_SHADER_SOURCE] = 0.05f; 47573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_SHADER_COMPILE] = 0.05f; 47583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.15f; 47593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.05f; 47603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_ATTACH_SHADER] = 0.40f; 47613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 47633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 47643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 47653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 47663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 47673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.20f; 47683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 47693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_ATTACH_SHADER] = 0.10f; 47703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 47723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 47733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 47743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 47753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 47763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.15f; 47773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 47783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.30f; 47793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(programTestNdx); 47813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 47823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 47833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry programTests->addChild(texImage2DTests); 47853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 47863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 47883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texSubImage2DTests = new TestCaseGroup(ctx, "link", "Program create, destroy, attach and link tests"); 47893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int programTestNdx = 0; programTestNdx < 20; programTestNdx++) 47913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 47923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 47933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 47943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 47953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + programTestNdx % 5; 47963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 70 + programTestNdx; 47973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 47983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.35f; 47993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.35f; 48003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_PROGRAM] = 0.30f; 48013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 48033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 48043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 48053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 48063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 48073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 48083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.05f; 48093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.15f; 48103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_VERTEX_SHADER][THREADOPERATIONID_LINK_PROGRAM] = 0.10f; 48113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 48133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 48143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 48153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 48163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 48173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 48183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.05f; 48193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.15f; 48203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_FRAGMENT_SHADER][THREADOPERATIONID_LINK_PROGRAM] = 0.10f; 48213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 48233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 48243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 48253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 48263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 48273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.15f; 48283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 48293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.15f; 48303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_SHADER][THREADOPERATIONID_LINK_PROGRAM] = 0.10f; 48313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 48333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.10f; 48343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.10f; 48353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_SOURCE] = 0.20f; 48363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_SHADER_COMPILE] = 0.50f; 48373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 48383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_DESTROY_PROGRAM] = 0.10f; 48393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_ATTACH_SHADER] = 0.25f; 48403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_SOURCE][THREADOPERATIONID_LINK_PROGRAM] = 0.20f; 48413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_DESTROY_SHADER] = 0.15f; 48433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.15f; 48443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.15f; 48453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_SHADER_SOURCE] = 0.30f; 48463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_SHADER_COMPILE] = 0.30f; 48473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_CREATE_PROGRAM] = 0.10f; 48483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_DESTROY_PROGRAM] = 0.10f; 48493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_ATTACH_SHADER] = 0.35f; 48503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_SHADER_COMPILE][THREADOPERATIONID_LINK_PROGRAM] = 0.20f; 48513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_DESTROY_SHADER] = 0.10f; 48533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 48543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 48553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_SHADER_SOURCE] = 0.05f; 48563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_SHADER_COMPILE] = 0.05f; 48573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.15f; 48583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.05f; 48593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_ATTACH_SHADER] = 0.40f; 48603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_PROGRAM][THREADOPERATIONID_LINK_PROGRAM] = 0.05f; 48613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 48633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 48643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 48653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 48663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 48673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.20f; 48683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 48693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_ATTACH_SHADER] = 0.10f; 48703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_PROGRAM][THREADOPERATIONID_LINK_PROGRAM] = 0.05f; 48713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 48733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 48743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 48753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 48763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 48773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_CREATE_PROGRAM] = 0.15f; 48783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 48793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_ATTACH_SHADER] = 0.30f; 48803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_ATTACH_SHADER][THREADOPERATIONID_LINK_PROGRAM] = 0.30f; 48813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_DESTROY_SHADER] = 0.20f; 48833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_CREATE_VERTEX_SHADER] = 0.20f; 48843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_CREATE_FRAGMENT_SHADER] = 0.20f; 48853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_SHADER_SOURCE] = 0.10f; 48863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_SHADER_COMPILE] = 0.10f; 48873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_CREATE_PROGRAM] = 0.20f; 48883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_DESTROY_PROGRAM] = 0.15f; 48893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_ATTACH_SHADER] = 0.10f; 48903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_LINK_PROGRAM][THREADOPERATIONID_LINK_PROGRAM] = 0.05f; 48913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(programTestNdx); 48933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 48943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 48953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry programTests->addChild(texSubImage2DTests); 48973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 48983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 48993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(programTests); 49003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* imageTests = new TestCaseGroup(ctx, "images", "Image management tests"); 49023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 49043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texImage2DTests = new TestCaseGroup(ctx, "create_destroy", "Image gen, delete and teximage2D tests"); 49053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int imageTestNdx = 0; imageTestNdx < 20; imageTestNdx++) 49073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 49083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 49093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 49103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 49113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + imageTestNdx % 5; 49123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 70 + imageTestNdx; 49133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useImages = true; 49143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 49163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 49183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.15f; 49193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.40f; 49203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.35f; 49213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.30f; 49223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.15f; 49243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 49253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.40f; 49263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.35f; 49273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 49303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 49313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.40f; 49323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.35f; 49333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 49363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 49373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.40f; 49383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.35f; 49393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 49423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 49433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.40f; 49443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.35f; 49453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 49483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 49493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.30f; 49503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 49513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(imageTestNdx); 49543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 49553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 49563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry imageTests->addChild(texImage2DTests); 49583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 49593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 49613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texImage2DTests = new TestCaseGroup(ctx, "teximage2d", "Image gen, delete and teximage2D tests"); 49623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int imageTestNdx = 0; imageTestNdx < 20; imageTestNdx++) 49643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 49653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 49663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 49673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 49683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + imageTestNdx % 5; 49693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 70 + imageTestNdx; 49703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useImages = true; 49713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 49733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 49753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.15f; 49763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.20f; 49773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 49783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.30f; 49793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.20f; 49803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.15f; 49823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 49833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.15f; 49843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 49853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 49873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 49893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 49903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 49913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 49923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 49933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 49943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 49953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 49963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 49973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 49983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 49993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(imageTestNdx); 50173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 50183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 50193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry imageTests->addChild(texImage2DTests); 50213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 50223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 50243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* texSubImage2DTests = new TestCaseGroup(ctx, "texsubimage2d", "Image gen, delete, teximage2D and texsubimage2d tests"); 50253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int imageTestNdx = 0; imageTestNdx < 20; imageTestNdx++) 50273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 50283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 50293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 50303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 50313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + imageTestNdx % 5; 50323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 70 + imageTestNdx; 50333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useImages = true; 50343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 50363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 50383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.15f; 50393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.20f; 50403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 50413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.30f; 50423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.20f; 50433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.15f; 50463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 50473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.15f; 50483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 50493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 50863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 50873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 50883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 50893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 50903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 50913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXSUBIMAGE2D][THREADOPERATIONID_TEXSUBIMAGE2D] = 0.10f; 50923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(imageTestNdx); 50943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry texSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 50953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 50963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 50973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry imageTests->addChild(texSubImage2DTests); 50983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 50993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 51013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* copyTexImage2DTests = new TestCaseGroup(ctx, "copyteximage2d", "Image gen, delete and copyteximage2d tests"); 51023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int imageTestNdx = 0; imageTestNdx < 20; imageTestNdx++) 51043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 51053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 51063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 51073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 51083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + imageTestNdx % 5; 51093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 70 + imageTestNdx; 51103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useImages = true; 51113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 51133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 51153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.15f; 51163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.20f; 51173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 51183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.30f; 51193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.20f; 51203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.15f; 51223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 51233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.15f; 51243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 51253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.15f; 51263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 51293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 51303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 51313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 51323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.15f; 51333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 51363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 51373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 51383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 51393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.15f; 51403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 51433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 51443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 51453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 51463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.15f; 51473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXIMAGE2D][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 51503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 51513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 51523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 51533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_COPYTEXIMAGE2D] = 0.15f; 51543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(imageTestNdx); 51573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry copyTexImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 51583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 51593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry imageTests->addChild(copyTexImage2DTests); 51613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 51623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 51643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* copyTexSubImage2DTests = new TestCaseGroup(ctx, "copytexsubimage2d", "Image gen, delete, teximage2D and copytexsubimage2d tests"); 51653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int imageTestNdx = 0; imageTestNdx < 20; imageTestNdx++) 51673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 51683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLES2SharingRandomTest::TestConfig config; 51693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useFenceSync = useSync; 51703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.serverSync = serverSync; 51713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.threadCount = 2 + imageTestNdx % 5; 51723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.operationCount = 70 + imageTestNdx; 51733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.useImages = true; 51743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_NONE][THREADOPERATIONID_CREATE_TEXTURE] = 1.0f; 51763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.10f; 51783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.15f; 51793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.20f; 51803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 51813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.30f; 51823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.20f; 51833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_TEXTURE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 51843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.15f; 51863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.20f; 51873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.15f; 51883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.15f; 51893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 51903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_TEXTURE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 51923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 51933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 51943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 51953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 51963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 51973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 51983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 51993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 52003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 52023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 52033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 52043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 52053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 52063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 52073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_DESTROY_IMAGE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 52083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 52103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 52113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 52123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 52133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 52143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 52153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXIMAGE2D][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 52163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 52183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 52193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 52203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 52213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 52223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 52233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_TEXTURE_FROM_IMAGE][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 52243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_DESTROY_TEXTURE] = 0.25f; 52263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_CREATE_TEXTURE] = 0.25f; 52273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_CREATE_IMAGE_FROM_TEXTURE] = 0.25f; 52283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_DESTROY_IMAGE] = 0.25f; 52293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_TEXIMAGE2D] = 0.15f; 52303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_TEXTURE_FROM_IMAGE] = 0.15f; 52313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry config.probabilities[THREADOPERATIONID_COPYTEXSUBIMAGE2D][THREADOPERATIONID_COPYTEXSUBIMAGE2D] = 0.10f; 52323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string name = de::toString(imageTestNdx); 52353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry copyTexSubImage2DTests->addChild(new GLES2SharingRandomTest(ctx, config, name.c_str(), name.c_str())); 52363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 52373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry imageTests->addChild(copyTexSubImage2DTests); 52393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 52403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry group->addChild(imageTests); 52423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 52433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 52443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52453c827367444ee418f129b2c238299f49d3264554Jarkko PoyryGLES2SharingThreadedTests::GLES2SharingThreadedTests (EglTestContext& eglTestCtx) 52463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(eglTestCtx, "multithread", "EGL GLES2 sharing multithread tests") 52473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 52483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 52493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid GLES2SharingThreadedTests::init (void) 52513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 52523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* simpleTests = new TestCaseGroup(m_eglTestCtx, "simple", "Simple multithreaded tests"); 52533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addSimpleTests(m_eglTestCtx, simpleTests, false, false); 52543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(simpleTests); 52553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* randomTests = new TestCaseGroup(m_eglTestCtx, "random", "Random tests"); 52573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addRandomTests(m_eglTestCtx, randomTests, false, false); 52583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(randomTests); 52593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* simpleTestsSync = new TestCaseGroup(m_eglTestCtx, "simple_egl_sync", "Simple multithreaded tests with EGL_KHR_fence_sync"); 52613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addSimpleTests(m_eglTestCtx, simpleTestsSync, true, false); 52623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(simpleTestsSync); 52633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* randomTestsSync = new TestCaseGroup(m_eglTestCtx, "random_egl_sync", "Random tests with EGL_KHR_fence_sync"); 52653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addRandomTests(m_eglTestCtx, randomTestsSync, true, false); 52663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(randomTestsSync); 52673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* simpleTestsServerSync = new TestCaseGroup(m_eglTestCtx, "simple_egl_server_sync", "Simple multithreaded tests with EGL_KHR_fence_sync and EGL_KHR_wait_sync"); 52693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addSimpleTests(m_eglTestCtx, simpleTestsServerSync, true, true); 52703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(simpleTestsServerSync); 52713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TestCaseGroup* randomTestsServerSync = new TestCaseGroup(m_eglTestCtx, "random_egl_server_sync", "Random tests with EGL_KHR_fence_sync and EGL_KHR_wait_sync"); 52733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addRandomTests(m_eglTestCtx, randomTestsServerSync, true, true); 52743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(randomTestsServerSync); 52753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 52763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 52773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // egl 52783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 5279