diff -r 000000000000 -r 5d03bc08d59c egl/eglrefimpl/src/entrypoints.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/egl/eglrefimpl/src/entrypoints.cpp Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,305 @@ +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// Reference EGL implementation to support EGL sync objects and OpenWF extensions + +#include "eglprivate.h" + +// Helper macros +// +#define GET_THREAD_SESSION(s,r) CEglThreadSession* s = CEglThreadSession::Static(); \ + if (!s) \ + { \ + return r; \ + } + +#define PANIC_NOT_SUPPORTED User::Panic(KEglPanicCategory, EEglPanicNotSupported); \ + return 0; + +// EGL API entrypoints +// +EXPORT_C EGLDisplay eglGetDisplay(NativeDisplayType display_id) + { + GET_THREAD_SESSION(session, EGL_NO_DISPLAY) + return session->EglGetDisplay(display_id); + } + +EXPORT_C EGLBoolean eglInitialize(EGLDisplay dpy, EGLint* major, EGLint* minor) + { + GET_THREAD_SESSION(session, EGL_FALSE) + return session->EglInitialize(dpy, major, minor); + } + +EXPORT_C EGLBoolean eglTerminate(EGLDisplay dpy) + { + GET_THREAD_SESSION(session, EGL_FALSE) + return session->EglTerminate(dpy); + } + +EXPORT_C EGLBoolean eglReleaseThread(void) + { + // do not call CEglThreadSession::Static() here as it may create thread state if it does not exist + // + CEglThreadSession* session = reinterpret_cast(Dll::Tls()); + if (session) + { + delete session; + Dll::FreeTls(); + } + + return EGL_TRUE; + } + +EXPORT_C EGLint eglGetError(void) + { + // EGL spec section 3.11: GetError will create thread state object, + // it is recommended not to call this API immediately after calling ReleaseThread + // for that reason. + // If session creation fails, we returns BAD_ALLOC + // + GET_THREAD_SESSION(session, EGL_BAD_ALLOC) + return session->EglGetError(); + } + +EXPORT_C const char* eglQueryString(EGLDisplay dpy, EGLint name) + { + GET_THREAD_SESSION(session, NULL) + return session->EglQueryString(dpy, name); + } + +EXPORT_C TFuncPtrEglProc eglGetProcAddress (const char *procname) + { + GET_THREAD_SESSION(session, NULL) + return session->EglGetProcAddress(procname); + } + +// Unsupported EGL APIs +// +EXPORT_C EGLBoolean eglGetConfigs(EGLDisplay /*dpy*/, EGLConfig */*configs*/, + EGLint /*config_size*/, EGLint */*num_config*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglChooseConfig(EGLDisplay /*dpy*/, const EGLint */*attrib_list*/, + EGLConfig */*configs*/, EGLint /*config_size*/, + EGLint */*num_config*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglGetConfigAttrib(EGLDisplay /*dpy*/, EGLConfig /*config*/, + EGLint /*attribute*/, EGLint */*value*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLSurface eglCreateWindowSurface(EGLDisplay /*dpy*/, EGLConfig /*config*/, + EGLNativeWindowType /*win*/, + const EGLint */*attrib_list*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLSurface eglCreatePbufferSurface(EGLDisplay /*dpy*/, EGLConfig /*config*/, + const EGLint */*attrib_list*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLSurface eglCreatePixmapSurface(EGLDisplay /*dpy*/, EGLConfig /*config*/, + EGLNativePixmapType /*pixmap*/, + const EGLint */*attrib_list*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglDestroySurface(EGLDisplay /*dpy*/, EGLSurface /*surface*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglQuerySurface(EGLDisplay /*dpy*/, EGLSurface /*surface*/, + EGLint /*attribute*/, EGLint */*value*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglBindAPI(EGLenum /*api*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLenum eglQueryAPI(void) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglWaitClient(void) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLSurface eglCreatePbufferFromClientBuffer( + EGLDisplay /*dpy*/, EGLenum /*buftype*/, EGLClientBuffer /*buffer*/, + EGLConfig /*config*/, const EGLint */*attrib_list*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglSurfaceAttrib(EGLDisplay /*dpy*/, EGLSurface /*surface*/, + EGLint /*attribute*/, EGLint /*value*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglBindTexImage(EGLDisplay /*dpy*/, EGLSurface /*surface*/, EGLint /*buffer*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglReleaseTexImage(EGLDisplay /*dpy*/, EGLSurface /*surface*/, EGLint /*buffer*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglSwapInterval(EGLDisplay /*dpy*/, EGLint /*interval*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLContext eglCreateContext(EGLDisplay /*dpy*/, EGLConfig /*config*/, + EGLContext /*share_context*/, + const EGLint */*attrib_list*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglDestroyContext(EGLDisplay /*dpy*/, EGLContext /*ctx*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglMakeCurrent(EGLDisplay /*dpy*/, EGLSurface /*draw*/, + EGLSurface /*read*/, EGLContext /*ctx*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLContext eglGetCurrentContext(void) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLSurface eglGetCurrentSurface(EGLint /*readdraw*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLDisplay eglGetCurrentDisplay(void) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglQueryContext(EGLDisplay /*dpy*/, EGLContext /*ctx*/, + EGLint /*attribute*/, EGLint */*value*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglWaitGL(void) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglWaitNative(EGLint /*engine*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglSwapBuffers(EGLDisplay /*dpy*/, EGLSurface /*surface*/) + { + PANIC_NOT_SUPPORTED + } + +EXPORT_C EGLBoolean eglCopyBuffers(EGLDisplay /*dpy*/, EGLSurface /*surface*/, + EGLNativePixmapType /*target*/) + { + PANIC_NOT_SUPPORTED + } + +// EGL_KHR_reusable_sync APIs +// +EGLSyncKHR eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list) + { + GET_THREAD_SESSION(session, EGL_NO_SYNC_KHR) + return session->EglCreateSyncKhr(dpy, type, attrib_list); + } + +EGLBoolean eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync) + { + GET_THREAD_SESSION(session, EGL_FALSE) + return session->EglDestroySyncKhr(dpy, sync); + } + +EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout) + { + GET_THREAD_SESSION(session, EGL_FALSE) + return session->EglClientWaitSyncKhr(dpy, sync, flags, timeout); + } + +EGLBoolean eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) + { + GET_THREAD_SESSION(session, EGL_FALSE) + return session->EglSignalSyncKhr(dpy, sync, mode); + } + +EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value) + { + GET_THREAD_SESSION(session, EGL_FALSE) + return session->EglGetSyncAttribKhr(dpy, sync, attribute, value); + } + +// Private extensions +// +EGLint egl_Private_SignalSyncNOK(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode) + { + GET_THREAD_SESSION(session, EGL_BAD_ALLOC) + return session->EglSignalSyncInternal(dpy, sync, mode); + } + +// Debug APIs +// +#ifdef _DEBUG + +#define GET_THREAD_SESSION_ASSERT(s) CEglThreadSession* s = CEglThreadSession::Static(); \ + __ASSERT_DEBUG(s, User::Panic(KEglPanicCategory, EEglPanicInvalidSession)); + +void egliDebugHeapMarkStart() + { + GET_THREAD_SESSION_ASSERT(session) + session->EglHeapMarkStart(); + } + +EGLint egliDebugHeapMarkEnd(EGLint count) + { + GET_THREAD_SESSION_ASSERT(session) + return session->EglHeapMarkEnd(count); + } + +void egliDebugSetBurstAllocFail(EGLenum type, EGLint rate, EGLint burst) + { + GET_THREAD_SESSION_ASSERT(session) + session->EglHeapSetBurstAllocFail(type, rate, burst); +} +#endif //_DEBUG