X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Feglcontext.h;h=2c6ebd19cb9c2eb6bcfdc48e81d9e7c1cbb7c387;hb=7d5a13ebf31edab412a06c075b847fc9f0137da1;hp=4811e3bb7ad83b24c1849ef89016dcc7df2dda8d;hpb=9b346f83a7b672e913a7bb6a089d5dbd7fbdce06;p=mesa.git diff --git a/src/egl/main/eglcontext.h b/src/egl/main/eglcontext.h index 4811e3bb7ad..2c6ebd19cb9 100644 --- a/src/egl/main/eglcontext.h +++ b/src/egl/main/eglcontext.h @@ -1,12 +1,46 @@ +/************************************************************************** + * + * Copyright 2008 VMware, Inc. + * Copyright 2009-2010 Chia-I Wu + * Copyright 2010-2011 LunarG, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + #ifndef EGLCONTEXT_INCLUDED #define EGLCONTEXT_INCLUDED +#include "c99_compat.h" #include "egltypedefs.h" #include "egldisplay.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * "Base" class for device driver contexts. */ @@ -23,60 +57,65 @@ struct _egl_context _EGLConfig *Config; EGLint ClientAPI; /**< EGL_OPENGL_ES_API, EGL_OPENGL_API, EGL_OPENVG_API */ - EGLint ClientVersion; /**< 1 = OpenGLES 1.x, 2 = OpenGLES 2.x */ - - /* The real render buffer when a window surface is bound */ - EGLint WindowRenderBuffer; + EGLint ClientMajorVersion; + EGLint ClientMinorVersion; + EGLint Flags; + EGLint Profile; + EGLint ResetNotificationStrategy; + EGLint ContextPriority; + EGLBoolean NoError; + EGLint ReleaseBehavior; }; -PUBLIC EGLBoolean -_eglInitContext(_EGLDriver *drv, _EGLContext *ctx, +extern EGLBoolean +_eglInitContext(_EGLContext *ctx, _EGLDisplay *disp, _EGLConfig *config, const EGLint *attrib_list); -extern _EGLContext * -_eglCreateContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLConfig *conf, _EGLContext *share_list, const EGLint *attrib_list); - - extern EGLBoolean -_eglDestroyContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx); +_eglQueryContext(_EGLDriver *drv, _EGLDisplay *disp, _EGLContext *ctx, EGLint attribute, EGLint *value); extern EGLBoolean -_eglQueryContext(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx, EGLint attribute, EGLint *value); - - -PUBLIC EGLBoolean -_eglBindContext(_EGLContext **ctx, _EGLSurface **draw, _EGLSurface **read); +_eglBindContext(_EGLContext *ctx, _EGLSurface *draw, _EGLSurface *read, + _EGLContext **old_ctx, + _EGLSurface **old_draw, _EGLSurface **old_read); - -extern EGLBoolean -_eglMakeCurrent(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *draw, _EGLSurface *read, _EGLContext *ctx); +extern _EGLContext * +_eglBindContextToThread(_EGLContext *ctx, _EGLThreadInfo *t); -extern EGLBoolean -_eglCopyContextMESA(_EGLDriver *drv, EGLDisplay dpy, EGLContext source, EGLContext dest, EGLint mask); +/** + * Increment reference count for the context. + */ +static inline _EGLContext * +_eglGetContext(_EGLContext *ctx) +{ + if (ctx) + _eglGetResource(&ctx->Resource); + return ctx; +} /** - * Return true if the context is bound to a thread. + * Decrement reference count for the context. */ -static INLINE EGLBoolean -_eglIsContextBound(_EGLContext *ctx) +static inline EGLBoolean +_eglPutContext(_EGLContext *ctx) { - return (ctx->Binding != NULL); + return (ctx) ? _eglPutResource(&ctx->Resource) : EGL_FALSE; } /** - * Link a context to a display and return the handle of the link. + * Link a context to its display and return the handle of the link. * The handle can be passed to client directly. */ -static INLINE EGLContext -_eglLinkContext(_EGLContext *ctx, _EGLDisplay *dpy) +static inline EGLContext +_eglLinkContext(_EGLContext *ctx) { - _eglLinkResource(&ctx->Resource, _EGL_RESOURCE_CONTEXT, dpy); + _eglLinkResource(&ctx->Resource, _EGL_RESOURCE_CONTEXT); return (EGLContext) ctx; } @@ -85,7 +124,7 @@ _eglLinkContext(_EGLContext *ctx, _EGLDisplay *dpy) * Unlink a linked context from its display. * Accessing an unlinked context should generate EGL_BAD_CONTEXT error. */ -static INLINE void +static inline void _eglUnlinkContext(_EGLContext *ctx) { _eglUnlinkResource(&ctx->Resource, _EGL_RESOURCE_CONTEXT); @@ -96,11 +135,11 @@ _eglUnlinkContext(_EGLContext *ctx) * Lookup a handle to find the linked context. * Return NULL if the handle has no corresponding linked context. */ -static INLINE _EGLContext * -_eglLookupContext(EGLContext context, _EGLDisplay *dpy) +static inline _EGLContext * +_eglLookupContext(EGLContext context, _EGLDisplay *disp) { _EGLContext *ctx = (_EGLContext *) context; - if (!dpy || !_eglCheckResource((void *) ctx, _EGL_RESOURCE_CONTEXT, dpy)) + if (!disp || !_eglCheckResource((void *) ctx, _EGL_RESOURCE_CONTEXT, disp)) ctx = NULL; return ctx; } @@ -109,7 +148,7 @@ _eglLookupContext(EGLContext context, _EGLDisplay *dpy) /** * Return the handle of a linked context, or EGL_NO_CONTEXT. */ -static INLINE EGLContext +static inline EGLContext _eglGetContextHandle(_EGLContext *ctx) { _EGLResource *res = (_EGLResource *) ctx; @@ -118,15 +157,8 @@ _eglGetContextHandle(_EGLContext *ctx) } -/** - * Return true if the context is linked to a display. - */ -static INLINE EGLBoolean -_eglIsContextLinked(_EGLContext *ctx) -{ - _EGLResource *res = (_EGLResource *) ctx; - return (res && _eglIsResourceLinked(res)); +#ifdef __cplusplus } - +#endif #endif /* EGLCONTEXT_INCLUDED */