14f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 24f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. 34f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// found in the LICENSE file. 54f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// 64f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 74f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com// libEGL.cpp: Implements the exported EGL functions. 84f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include <exception> 10bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com 11ea0e1af4c3db538081d776e4ec1a588ca82cb9d9alokp@chromium.org#include "common/debug.h" 12a0ce7e613ecbd04617cd49595d7da74856dd3bd1daniel@transgaming.com#include "common/version.h" 13bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libGLESv2/Context.h" 14ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org#include "libGLESv2/Texture.h" 15cfa8efdfe5cf382d1afd81abde03a145fdb5168bdaniel@transgaming.com#include "libGLESv2/main.h" 16d2811d688721a729f514bd78f7fd12a43beeb0a6shannon.woods@transgaming.com#include "libGLESv2/renderer/SwapChain.h" 17bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com 18bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libEGL/main.h" 19bbf56f755e0dd78c7650c52531ce412fcaaafa2bdaniel@transgaming.com#include "libEGL/Display.h" 20486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com#include "libEGL/Surface.h" 214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 22192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.orgbool validateDisplay(egl::Display *display) 234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (display == EGL_NO_DISPLAY) 254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 26779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_DISPLAY, false); 274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->isInitialized()) 304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 31779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_NOT_INITIALIZED, false); 324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return true; 354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 37192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.orgbool validateConfig(egl::Display *display, EGLConfig config) 384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 39192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return false; 424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->isValidConfig(config)) 454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 46779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_CONFIG, false); 474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return true; 504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 52192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.orgbool validateContext(egl::Display *display, gl::Context *context) 534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 54192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return false; 574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->isValidContext(context)) 604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 61779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_CONTEXT, false); 624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return true; 654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 67192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.orgbool validateSurface(egl::Display *display, egl::Surface *surface) 684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 69192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return false; 724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->isValidSurface(surface)) 754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 76779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, false); 774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return true; 804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comextern "C" 834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLint __stdcall eglGetError(void) 854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 860f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com EGLint error = egl::getCurrentError(); 894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (error != EGL_SUCCESS) 914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::setCurrentError(EGL_SUCCESS); 934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return error; 964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLDisplay __stdcall eglGetDisplay(EGLNativeDisplayType display_id) 994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1000f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLNativeDisplayType display_id = 0x%0.8p)", display_id); 1014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 1034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10484d7cbc3b1cf664ef9340ad28755f2851f5040dcjbauman@chromium.org return egl::Display::getDisplay(display_id); 1054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 1074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 108779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_DISPLAY); 1094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) 1134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1140f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint *major = 0x%0.8p, EGLint *minor = 0x%0.8p)", 115b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, major, minor); 1164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 1184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (dpy == EGL_NO_DISPLAY) 1204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 121779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_DISPLAY, EGL_FALSE); 1224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 1254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->initialize()) 1274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 128779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_NOT_INITIALIZED, EGL_FALSE); 1294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1312c42c6c34a6169a83799b21df697f3c5f7377ee2daniel@transgaming.com if (major) *major = 1; 1322c42c6c34a6169a83799b21df697f3c5f7377ee2daniel@transgaming.com if (minor) *minor = 4; 1334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 134779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 1354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 1374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 138779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 1394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglTerminate(EGLDisplay dpy) 1434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1440f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p)", dpy); 1454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 1474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (dpy == EGL_NO_DISPLAY) 1494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 150779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_DISPLAY, EGL_FALSE); 1514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 1544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com display->terminate(); 1564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 157779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 1584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 1604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 161779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 1624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comconst char *__stdcall eglQueryString(EGLDisplay dpy, EGLint name) 1664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 1670f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint name = %d)", dpy, name); 1684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 1704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 1724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 173192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 1744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return NULL; 1764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com switch (name) 1794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_CLIENT_APIS: 181779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success("OpenGL_ES"); 1824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_EXTENSIONS: 183b0f1b486b2320657f6783dd1442c9cef5f601e4bshannonwoods@chromium.org return egl::success(display->getExtensionString()); 1844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_VENDOR: 185b0f1b486b2320657f6783dd1442c9cef5f601e4bshannonwoods@chromium.org return egl::success(display->getVendorString()); 1864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_VERSION: 187779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success("1.4 (ANGLE " VERSION_STRING ")"); 1884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 190779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, (const char*)NULL); 1914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 1934f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 194779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, (const char*)NULL); 1954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 1964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config) 1994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 2000f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig *configs = 0x%0.8p, " 201b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com "EGLint config_size = %d, EGLint *num_config = 0x%0.8p)", 202b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, configs, config_size, num_config); 2034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 2054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 2074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 208192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 2094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 2114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!num_config) 2144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 215779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); 2164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com const EGLint attribList[] = {EGL_NONE}; 2194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->getConfigs(configs, attribList, config_size, num_config)) 2214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 222779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_FALSE); 2234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 225779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 2264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 2284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 229779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 2304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 2324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config) 2344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 2350f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p, " 236b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com "EGLConfig *configs = 0x%0.8p, EGLint config_size = %d, EGLint *num_config = 0x%0.8p)", 237b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, attrib_list, configs, config_size, num_config); 2384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 2404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 2424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 243192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 2444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 2464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!num_config) 2494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 250779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); 2514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com const EGLint attribList[] = {EGL_NONE}; 2544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!attrib_list) 2564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com attrib_list = attribList; 2584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com display->getConfigs(configs, attrib_list, config_size, num_config); 2614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 262779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 2634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 2654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 266779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 2674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 2694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value) 2714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 2720f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)", 273b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, config, attribute, value); 2744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 2764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 2784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 279192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateConfig(display, config)) 2804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 2814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 2824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!display->getConfigAttrib(config, attribute, value)) 2854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 286779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_FALSE); 2874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 289779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 2904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 2924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 293779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 2944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 2954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 2964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 2974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLSurface __stdcall eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list) 2984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 2990f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativeWindowType win = 0x%0.8p, " 300b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com "const EGLint *attrib_list = 0x%0.8p)", dpy, config, win, attrib_list); 3014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 3034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 3054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 306192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateConfig(display, config)) 3074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_NO_SURFACE; 3094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com HWND window = (HWND)win; 3124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (!IsWindow(window)) 3144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 315779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_NATIVE_WINDOW, EGL_NO_SURFACE); 3164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 31806d7a7559b3c284bf568ac1aa0881209a61e7582jbauman@chromium.org return display->createWindowSurface(window, config, attrib_list); 3194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 3214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 322779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_SURFACE); 3234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 3254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLSurface __stdcall eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) 3274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 3280f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)", 329b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, config, attrib_list); 3304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 3324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 3344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 335192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateConfig(display, config)) 3364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_NO_SURFACE; 3384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3404e29770792184805ad0b9e50ec6355e940fd22c4jbauman@chromium.org return display->createOffscreenSurface(config, NULL, attrib_list); 3414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 3434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 344779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_SURFACE); 3454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 3474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLSurface __stdcall eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list) 3494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 3500f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLNativePixmapType pixmap = 0x%0.8p, " 351b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com "const EGLint *attrib_list = 0x%0.8p)", dpy, config, pixmap, attrib_list); 3524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 3544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 3564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 357192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateConfig(display, config)) 3584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_NO_SURFACE; 3604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 3634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 364779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_NO_SURFACE); 3654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 3674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 368779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_SURFACE); 3694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 3714f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglDestroySurface(EGLDisplay dpy, EGLSurface surface) 3734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 3740f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface); 3754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 3774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 379192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = static_cast<egl::Surface*>(surface); 3804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 381192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 3824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 3834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 3844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (surface == EGL_NO_SURFACE) 3874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 388779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 3894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 3914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com display->destroySurface((egl::Surface*)surface); 3924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 393779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 3944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 3964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 397779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 3984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 3994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 4004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 4014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value) 4024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 4030f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)", 404b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, surface, attribute, value); 4054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 4064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 4074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 4084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 409192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = (egl::Surface*)surface; 4104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 411192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 4124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 4134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 4144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 4154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 4164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (surface == EGL_NO_SURFACE) 4174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 418779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 4194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 4204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 4214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com switch (attribute) 4224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 4234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_VG_ALPHA_FORMAT: 4244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_VG_COLORSPACE: 4274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_CONFIG_ID: 4304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_HEIGHT: 4334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com *value = eglSurface->getHeight(); 4344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_HORIZONTAL_RESOLUTION: 4364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_LARGEST_PBUFFER: 4394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_MIPMAP_TEXTURE: 4424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_MIPMAP_LEVEL: 4454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_MULTISAMPLE_RESOLVE: 4484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_PIXEL_ASPECT_RATIO: 4514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_RENDER_BUFFER: 4544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_SWAP_BEHAVIOR: 4574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_TEXTURE_FORMAT: 4604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_TEXTURE_TARGET: 4634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_VERTICAL_RESOLUTION: 4664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 4674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 4684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_WIDTH: 4694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com *value = eglSurface->getWidth(); 4704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 471f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org case EGL_POST_SUB_BUFFER_SUPPORTED_NV: 472f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org *value = eglSurface->isPostSubBufferSupported(); 473f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org break; 4744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com default: 475779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_FALSE); 4764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 4774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 478779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 4794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 4804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 4814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 482779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 4834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 4844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 4854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 486721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.comEGLBoolean __stdcall eglQuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value) 487721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com{ 488721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com TRACE("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, void **value = 0x%0.8p)", 489721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com dpy, surface, attribute, value); 490721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 491721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com try 492721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com { 493721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com egl::Display *display = static_cast<egl::Display*>(dpy); 494192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = (egl::Surface*)surface; 495721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 496192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 497721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com { 498721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com return EGL_FALSE; 499721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com } 500721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 501721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com if (surface == EGL_NO_SURFACE) 502721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com { 503779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 504721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com } 505721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 506721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com switch (attribute) 507721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com { 508721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com case EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE: 5093c72078a46b247266c393afd936d50e503142cf7daniel@transgaming.com { 51076d3e6e07b87d95baf43a0c40ec6f3df883fbf71daniel@transgaming.com rx::SwapChain *swapchain = eglSurface->getSwapChain(); 5113c72078a46b247266c393afd936d50e503142cf7daniel@transgaming.com *value = (void*) (swapchain ? swapchain->getShareHandle() : NULL); 5123c72078a46b247266c393afd936d50e503142cf7daniel@transgaming.com } 513721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com break; 514721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com default: 515779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_FALSE); 516721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com } 517721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 518779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 519721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com } 520721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com catch(std::bad_alloc&) 521721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com { 522779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 523721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com } 524721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com} 525721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com 5264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglBindAPI(EGLenum api) 5274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 5280f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLenum api = 0x%X)", api); 5294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 5314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 5324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com switch (api) 5334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 5344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_OPENGL_API: 5354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_OPENVG_API: 536779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); // Not supported by this implementation 5374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com case EGL_OPENGL_ES_API: 5384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com break; 5394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com default: 540779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); 5414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::setCurrentAPI(api); 5444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 545779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 5464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 5484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 549779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 5504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 5524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLenum __stdcall eglQueryAPI(void) 5544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 5550f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 5564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 5584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 5594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com EGLenum API = egl::getCurrentAPI(); 5604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 561779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(API); 5624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 5644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 565779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 5664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 5684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglWaitClient(void) 5704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 5710f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 5724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 5744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 5754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 5764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 577779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(0); 5784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 5804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 581779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 5824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 5844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglReleaseThread(void) 5864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 5870f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 5884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 5894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 5904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 5914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_CONTEXT, EGL_NO_SURFACE, EGL_NO_SURFACE); 5924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 593779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 5944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 5964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 597779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 5984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 5994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 6004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLSurface __stdcall eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list) 6024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 6030f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLenum buftype = 0x%X, EGLClientBuffer buffer = 0x%0.8p, " 604b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com "EGLConfig config = 0x%0.8p, const EGLint *attrib_list = 0x%0.8p)", 605b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, buftype, buffer, config, attrib_list); 6064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 6084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 6094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 6104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 611192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateConfig(display, config)) 6124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 6134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_NO_SURFACE; 6144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6164e29770792184805ad0b9e50ec6355e940fd22c4jbauman@chromium.org if (buftype != EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE || !buffer) 6174e29770792184805ad0b9e50ec6355e940fd22c4jbauman@chromium.org { 618779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_NO_SURFACE); 6194e29770792184805ad0b9e50ec6355e940fd22c4jbauman@chromium.org } 6204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6214e29770792184805ad0b9e50ec6355e940fd22c4jbauman@chromium.org return display->createOffscreenSurface(config, (HANDLE)buffer, attrib_list); 6224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 6244f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 625779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_SURFACE); 6264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 6284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value) 6304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 6310f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint attribute = %d, EGLint value = %d)", 632b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, surface, attribute, value); 6334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6344f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 6354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 6364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 637192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = static_cast<egl::Surface*>(surface); 6384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 639192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 6404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 6414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 6424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 6454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 646779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 6474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 6494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 650779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 6514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 6534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 6554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 6560f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer); 6574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 6584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 6594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 6604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 661192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = static_cast<egl::Surface*>(surface); 6624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 663192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 6644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 6654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 6664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 668ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org if (buffer != EGL_BACK_BUFFER) 669ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 670779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); 671ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 672ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 673192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (surface == EGL_NO_SURFACE || eglSurface->getWindowHandle()) 674ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 675779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 676ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 677ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 678192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (eglSurface->getBoundTexture()) 679ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 680779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ACCESS, EGL_FALSE); 681ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 682ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 683192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE) 684ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 685779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_MATCH, EGL_FALSE); 686ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 6874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 68864a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com if (!glBindTexImage(eglSurface)) 68964a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com { 690779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_MATCH, EGL_FALSE); 69164a0fb2a82fb54a9426591a73104068b79d1d50edaniel@transgaming.com } 692ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 693779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 6944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 6964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 697779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 6984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 6994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 7004f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer) 7024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 7030f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint buffer = %d)", dpy, surface, buffer); 7044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7054f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 7064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 7074f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 708192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = static_cast<egl::Surface*>(surface); 7094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 710192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 7114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 7124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 7134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 7144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 715ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org if (buffer != EGL_BACK_BUFFER) 716ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 717779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); 718ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 719ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 720192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (surface == EGL_NO_SURFACE || eglSurface->getWindowHandle()) 721ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 722779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 723ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 724ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 725192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (eglSurface->getTextureFormat() == EGL_NO_TEXTURE) 726ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 727779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_MATCH, EGL_FALSE); 728ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 7294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 730192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org gl::Texture2D *texture = eglSurface->getBoundTexture(); 731ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 732ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org if (texture) 733ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org { 734ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org texture->releaseTexImage(); 735ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org } 736ae345807b2b9ca3ae702af129326c63457bfdf4bjbauman@chromium.org 737779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 7384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 7394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 7404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 741779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 7424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 7434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 7444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglSwapInterval(EGLDisplay dpy, EGLint interval) 7464f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 7470f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLint interval = %d)", dpy, interval); 7484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 7504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 7514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 7524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 753192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateDisplay(display)) 7544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 7554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 7564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 7574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7580db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org egl::Surface *draw_surface = static_cast<egl::Surface*>(egl::getCurrentDrawSurface()); 7590db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org 7600db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org if (draw_surface == NULL) 7610db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org { 762779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 7630db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org } 7640db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org 7650db0d6c88fabd966d8bba2d3ff20d66d620863efapatrick@chromium.org draw_surface->setSwapInterval(interval); 7664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 767779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 7684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 7694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 7704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 771779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 7724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 7734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 7744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLContext __stdcall eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list) 7764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 7770f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLConfig config = 0x%0.8p, EGLContext share_context = 0x%0.8p, " 778b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com "const EGLint *attrib_list = 0x%0.8p)", dpy, config, share_context, attrib_list); 7794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 7804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 7814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 78278477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org // Get the requested client version (default is 1) and check it is two. 78378477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org EGLint client_version = 1; 7844ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com bool reset_notification = false; 7854ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com bool robust_access = false; 7864ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com 78724e39699dd02c6b09d7f67ae740297a2a6c3e284apatrick@chromium.org if (attrib_list) 78878477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org { 78924e39699dd02c6b09d7f67ae740297a2a6c3e284apatrick@chromium.org for (const EGLint* attribute = attrib_list; attribute[0] != EGL_NONE; attribute += 2) 79078477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org { 7914ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com switch (attribute[0]) 79224e39699dd02c6b09d7f67ae740297a2a6c3e284apatrick@chromium.org { 7934ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com case EGL_CONTEXT_CLIENT_VERSION: 79424e39699dd02c6b09d7f67ae740297a2a6c3e284apatrick@chromium.org client_version = attribute[1]; 7954ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com break; 7964ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com case EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT: 7974ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com if (attribute[1] == EGL_TRUE) 7984ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com { 799779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_CONFIG, EGL_NO_CONTEXT); // Unimplemented 800a1d8059d676046ff9a35e15341866f1e93944132apatrick@chromium.org // robust_access = true; 8014ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com } 8024ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com else if (attribute[1] != EGL_FALSE) 803779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_NO_CONTEXT); 8044ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com break; 8054ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com case EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT: 8064ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com if (attribute[1] == EGL_LOSE_CONTEXT_ON_RESET_EXT) 8074ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com reset_notification = true; 8084ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com else if (attribute[1] != EGL_NO_RESET_NOTIFICATION_EXT) 809779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_NO_CONTEXT); 8104ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com break; 8114ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com default: 812779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ATTRIBUTE, EGL_NO_CONTEXT); 81324e39699dd02c6b09d7f67ae740297a2a6c3e284apatrick@chromium.org } 81478477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org } 81578477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org } 81678477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org 81778477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org if (client_version != 2) 81878477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org { 819779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_CONFIG, EGL_NO_CONTEXT); 82078477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org } 82178477fc08592a456cd54ca0a1de3552af821fef2apatrick@chromium.org 822b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill gl::Context *sharedContextPtr = (share_context != EGL_NO_CONTEXT ? static_cast<gl::Context*>(share_context) : NULL); 823b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill 824b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill if (sharedContextPtr != NULL && sharedContextPtr->isResetNotificationEnabled() != reset_notification) 8254ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com { 826779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_MATCH, EGL_NO_CONTEXT); 8274ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com } 8284ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com 8294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 8304f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 831b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill // Can not share contexts between displays 832b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill if (sharedContextPtr != NULL && sharedContextPtr->getRenderer() != display->getRenderer()) 833b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill { 834b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill return egl::error(EGL_BAD_MATCH, EGL_NO_CONTEXT); 835b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill } 836b4e0003292f829a0f88a14df4b02a785fcf2b45fJamie Madill 837192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateConfig(display, config)) 8384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 8394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_NO_CONTEXT; 8404f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8424ff960d9166a283d4dd6c072490a5437f05b9eb4daniel@transgaming.com EGLContext context = display->createContext(config, static_cast<gl::Context*>(share_context), reset_notification, robust_access); 8434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 844cf23c45fd5ab413269a097f0d8813d2ab8a304b9daniel@transgaming.com if (context) 845779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(context); 846cf23c45fd5ab413269a097f0d8813d2ab8a304b9daniel@transgaming.com else 847779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_CONTEXT_LOST, EGL_NO_CONTEXT); 8484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 8504f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 851779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_CONTEXT); 8524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 8544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglDestroyContext(EGLDisplay dpy, EGLContext ctx) 8564f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 8570f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p)", dpy, ctx); 8584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 8604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 8614f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 862192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org gl::Context *context = static_cast<gl::Context*>(ctx); 8634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 864192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateContext(display, context)) 8654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 8664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 8674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8684f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8694f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (ctx == EGL_NO_CONTEXT) 8704f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 871779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_CONTEXT, EGL_FALSE); 8724f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 874192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org display->destroyContext(context); 8754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 876779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 8774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 8794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 880779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 8814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 8824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 8834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx) 8854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 8860f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface draw = 0x%0.8p, EGLSurface read = 0x%0.8p, EGLContext ctx = 0x%0.8p)", 887b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, draw, read, ctx); 8884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 8894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 8904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 8914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 8924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com gl::Context *context = static_cast<gl::Context*>(ctx); 893c6c6f0272dd81ae040d87e604894c6e81c7c6e1ddaniel@transgaming.com 894621ce053c1a3048c2357b8b070ca934ef5e3dabfdaniel@transgaming.com if (ctx != EGL_NO_CONTEXT && !validateContext(display, context)) 89509fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com { 89609fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com return EGL_FALSE; 89709fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com } 89809fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com 899ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods if (dpy != EGL_NO_DISPLAY) 900c6c6f0272dd81ae040d87e604894c6e81c7c6e1ddaniel@transgaming.com { 901ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods rx::Renderer *renderer = display->getRenderer(); 902ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods if (renderer->testDeviceLost(true)) 903ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods { 904ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods return EGL_FALSE; 905ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods } 9064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 907ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods if (renderer->isDeviceLost()) 908ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods { 909ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods return egl::error(EGL_CONTEXT_LOST, EGL_FALSE); 910ba6944849acb31e9db7e1f157cdbaf3a249512eeShannon Woods } 9114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 913192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if ((draw != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(draw))) || 914192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org (read != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(read)))) 9154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 9164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 9174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (draw != read) 9204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 9214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 9224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 924e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com egl::setCurrentDisplay(dpy); 925e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com egl::setCurrentDrawSurface(draw); 926e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com egl::setCurrentReadSurface(read); 927e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com 9284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com glMakeCurrent(context, display, static_cast<egl::Surface*>(draw)); 9294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 930779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 9314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 9334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 934779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 9354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 9374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLContext __stdcall eglGetCurrentContext(void) 9394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 9400f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 9414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 9434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 9444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com EGLContext context = glGetCurrentContext(); 9454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 946779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(context); 9474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 9494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 950779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_CONTEXT); 9514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 9534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLSurface __stdcall eglGetCurrentSurface(EGLint readdraw) 9554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 9560f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLint readdraw = %d)", readdraw); 9574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 9594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 960e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com if (readdraw == EGL_READ) 961e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com { 962e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com EGLSurface read = egl::getCurrentReadSurface(); 963779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(read); 964e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com } 965e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com else if (readdraw == EGL_DRAW) 966e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com { 967e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com EGLSurface draw = egl::getCurrentDrawSurface(); 968779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(draw); 969e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com } 970e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com else 971e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com { 972779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_NO_SURFACE); 973e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com } 9744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9754f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 9764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 977779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_SURFACE); 9784f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9794f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 9804f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9814f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLDisplay __stdcall eglGetCurrentDisplay(void) 9824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 9830f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 9844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9854f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 9864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 987e37888d1534ce97db0afccf53d79b128b914a763daniel@transgaming.com EGLDisplay dpy = egl::getCurrentDisplay(); 9884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 989779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(dpy); 9904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 9924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 993779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_NO_DISPLAY); 9944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 9954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 9964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 9974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value) 9984f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 9990f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLContext ctx = 0x%0.8p, EGLint attribute = %d, EGLint *value = 0x%0.8p)", 1000b5b0616063ccb5c22a8f50339d47e134d6b9cd9adaniel@transgaming.com dpy, ctx, attribute, value); 10014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 10034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 1005192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org gl::Context *context = static_cast<gl::Context*>(ctx); 10064f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1007192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateContext(display, context)) 10084f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10094f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 10104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10124f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 10134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1014779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(0); 10154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10164f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 10174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1018779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 10194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10204f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 10214f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10224f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglWaitGL(void) 10234f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 10240f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("()"); 10254f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10264f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 10274f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10284f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 10294f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1030779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(0); 10314f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10324f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 10334f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1034779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 10354f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10364f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 10374f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10384f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglWaitNative(EGLint engine) 10394f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 10400f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLint engine = %d)", engine); 10414f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10424f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 10434f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10444f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 10454f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1046779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(0); 10474f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10484f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 10494f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1050779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 10514f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10524f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 10534f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10544f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) 10554f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 10560f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p)", dpy, surface); 10574f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10584f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 10594f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10604f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 1061192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = (egl::Surface*)surface; 10624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1063192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 10644f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 10664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1068621ce053c1a3048c2357b8b070ca934ef5e3dabfdaniel@transgaming.com if (display->getRenderer()->isDeviceLost()) 106909fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com { 1070779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_CONTEXT_LOST, EGL_FALSE); 107109fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com } 107209fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com 10734f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com if (surface == EGL_NO_SURFACE) 10744f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1075779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 10764f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10774f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1078c6c6f0272dd81ae040d87e604894c6e81c7c6e1ddaniel@transgaming.com if (eglSurface->swap()) 1079c6c6f0272dd81ae040d87e604894c6e81c7c6e1ddaniel@transgaming.com { 1080779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 1081c6c6f0272dd81ae040d87e604894c6e81c7c6e1ddaniel@transgaming.com } 10824f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10834f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 10844f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1085779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 10864f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 10874f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 10894f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 10904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.comEGLBoolean __stdcall eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target) 10924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 10930f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLNativePixmapType target = 0x%0.8p)", dpy, surface, target); 10944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 10954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 10964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 10974f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com egl::Display *display = static_cast<egl::Display*>(dpy); 1098192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org egl::Surface *eglSurface = static_cast<egl::Surface*>(surface); 10994f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1100192a1810f140fd35c2da652b6bda4cadc60891e2apatrick@chromium.org if (!validateSurface(display, eglSurface)) 11014f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 11024f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com return EGL_FALSE; 11034f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 11044f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1105621ce053c1a3048c2357b8b070ca934ef5e3dabfdaniel@transgaming.com if (display->getRenderer()->isDeviceLost()) 110609fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com { 1107779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_CONTEXT_LOST, EGL_FALSE); 110809fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com } 110909fcc9fe6a6247af02ca203a9df4ffb00f2ee003daniel@transgaming.com 11104f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com UNIMPLEMENTED(); // FIXME 11114f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1112779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(0); 11134f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 11144f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 11154f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1116779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 11174f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 11184f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 11194f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1120f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.orgEGLBoolean __stdcall eglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height) 1121f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org{ 1122f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org EVENT("(EGLDisplay dpy = 0x%0.8p, EGLSurface surface = 0x%0.8p, EGLint x = %d, EGLint y = %d, EGLint width = %d, EGLint height = %d)", dpy, surface, x, y, width, height); 1123f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 1124f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org try 1125f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org { 11266409edb0ad2062b21f5ece1940cb4d5493b0431ddaniel@transgaming.com if (x < 0 || y < 0 || width < 0 || height < 0) 11276409edb0ad2062b21f5ece1940cb4d5493b0431ddaniel@transgaming.com { 1128779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_PARAMETER, EGL_FALSE); 11296409edb0ad2062b21f5ece1940cb4d5493b0431ddaniel@transgaming.com } 11306409edb0ad2062b21f5ece1940cb4d5493b0431ddaniel@transgaming.com 1131f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org egl::Display *display = static_cast<egl::Display*>(dpy); 1132f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org egl::Surface *eglSurface = static_cast<egl::Surface*>(surface); 1133f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 1134f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org if (!validateSurface(display, eglSurface)) 1135f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org { 1136f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org return EGL_FALSE; 1137f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org } 1138f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 1139621ce053c1a3048c2357b8b070ca934ef5e3dabfdaniel@transgaming.com if (display->getRenderer()->isDeviceLost()) 1140f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org { 1141779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_CONTEXT_LOST, EGL_FALSE); 1142f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org } 1143f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 1144f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org if (surface == EGL_NO_SURFACE) 1145f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org { 1146779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_SURFACE, EGL_FALSE); 1147f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org } 1148f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 1149f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org if (eglSurface->postSubBuffer(x, y, width, height)) 1150f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org { 1151779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::success(EGL_TRUE); 1152f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org } 1153f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org } 1154f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org catch(std::bad_alloc&) 1155f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org { 1156779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, EGL_FALSE); 1157f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org } 1158f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 1159f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org return EGL_FALSE; 1160f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org} 1161f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org 11624f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com__eglMustCastToProperFunctionPointerType __stdcall eglGetProcAddress(const char *procname) 11634f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com{ 11640f4cefe9462e53627f02f10b34d76f8665c72521apatrick@chromium.org EVENT("(const char *procname = \"%s\")", procname); 11654f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 11664f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com try 11674f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1168ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com struct Extension 1169ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com { 1170ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com const char *name; 1171ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com __eglMustCastToProperFunctionPointerType address; 1172ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com }; 1173ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com 1174ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com static const Extension eglExtensions[] = 1175ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com { 1176721b7f267502e01728d1676cd69765ba28c68dc3vladimirv@gmail.com {"eglQuerySurfacePointerANGLE", (__eglMustCastToProperFunctionPointerType)eglQuerySurfacePointerANGLE}, 1177f4490e220717ee3bdae77a14d1b5d16360190439apatrick@chromium.org {"eglPostSubBufferNV", (__eglMustCastToProperFunctionPointerType)eglPostSubBufferNV}, 1178ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com {"", NULL}, 1179ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com }; 1180ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com 1181d438fd497baeddedec135e7c8bfa4148e116b9a8shannon.woods@transgaming.com for (unsigned int ext = 0; ext < ArraySize(eglExtensions); ext++) 1182ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com { 1183ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com if (strcmp(procname, eglExtensions[ext].name) == 0) 1184ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com { 1185ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com return (__eglMustCastToProperFunctionPointerType)eglExtensions[ext].address; 1186ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com } 1187ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com } 11884f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com 1189ce3d0f2f386ee8d9e00ce99d114435b552f24224daniel@transgaming.com return glGetProcAddress(procname); 11904f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 11914f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com catch(std::bad_alloc&) 11924f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com { 1193779aa2618c1333c034768f3a4ca7826a14753b60shannon.woods@transgaming.com return egl::error(EGL_BAD_ALLOC, (__eglMustCastToProperFunctionPointerType)NULL); 11944f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com } 11954f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 11964f39fd99568ce175f04b5ed72062bfed0fa41803daniel@transgaming.com} 1197