Files
third_party_mesa3d/src/egl/main/egldisplay.h
Chia-I Wu 621801abd2 egl: Make display and surface hash tables local.
Move display and surface hash tables to egldisplay.c, and have them
initialized on demand.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
2009-08-11 22:14:35 -06:00

155 lines
2.6 KiB
C

#ifndef EGLDISPLAY_INCLUDED
#define EGLDISPLAY_INCLUDED
#ifdef _EGL_PLATFORM_X
#include <X11/Xlib.h>
#endif
#include "egltypedefs.h"
#include "eglhash.h"
struct _egl_display
{
EGLNativeDisplayType NativeDisplay;
EGLDisplay Handle;
const char *DriverName;
const char *DriverArgs;
_EGLDriver *Driver;
EGLint NumScreens;
_EGLScreen **Screens; /* array [NumScreens] */
EGLint NumConfigs;
_EGLConfig **Configs; /* array [NumConfigs] of ptr to _EGLConfig */
/* lists of linked contexts and surface */
_EGLContext *ContextList;
_EGLSurface *SurfaceList;
/* hash table to map surfaces to handles */
_EGLHashtable *SurfaceHash;
#ifdef _EGL_PLATFORM_X
Display *Xdpy;
#endif
};
extern _EGLDisplay *
_eglNewDisplay(NativeDisplayType displayName);
extern EGLDisplay
_eglLinkDisplay(_EGLDisplay *dpy);
extern void
_eglUnlinkDisplay(_EGLDisplay *dpy);
extern EGLDisplay
_eglGetDisplayHandle(_EGLDisplay *display);
extern _EGLDisplay *
_eglLookupDisplay(EGLDisplay dpy);
/**
* Return true if the display is linked.
*/
static INLINE EGLBoolean
_eglIsDisplayLinked(_EGLDisplay *dpy)
{
return (EGLBoolean) (_eglGetDisplayHandle(dpy) != EGL_NO_DISPLAY);
}
extern _EGLDisplay *
_eglFindDisplay(NativeDisplayType nativeDisplay);
extern void
_eglReleaseDisplayResources(_EGLDriver *drv, EGLDisplay dpy);
extern void
_eglCleanupDisplay(_EGLDisplay *disp);
extern EGLContext
_eglLinkContext(_EGLContext *ctx, _EGLDisplay *dpy);
extern void
_eglUnlinkContext(_EGLContext *ctx);
extern EGLContext
_eglGetContextHandle(_EGLContext *ctx);
extern _EGLContext *
_eglLookupContext(EGLContext ctx);
/**
* Return true if the context is linked to a display.
*/
static INLINE EGLBoolean
_eglIsContextLinked(_EGLContext *ctx)
{
return (EGLBoolean) (_eglGetContextHandle(ctx) != EGL_NO_CONTEXT);
}
extern EGLSurface
_eglLinkSurface(_EGLSurface *surf, _EGLDisplay *dpy);
extern void
_eglUnlinkSurface(_EGLSurface *surf);
extern EGLSurface
_eglGetSurfaceHandle(_EGLSurface *);
extern _EGLSurface *
_eglLookupSurface(EGLSurface surf);
/**
* Return true if the surface is linked to a display.
*/
static INLINE EGLBoolean
_eglIsSurfaceLinked(_EGLSurface *surf)
{
return (EGLBoolean) (_eglGetSurfaceHandle(surf) != EGL_NO_SURFACE);
}
/**
* Cast an unsigned int to a pointer.
*/
static INLINE void *
_eglUIntToPointer(unsigned int v)
{
return (void *) ((uintptr_t) v);
}
/**
* Cast a pointer to an unsigned int. The pointer must be one that is
* returned by _eglUIntToPointer.
*/
static INLINE unsigned int
_eglPointerToUInt(const void *p)
{
return (unsigned int) ((uintptr_t) p);
}
#endif /* EGLDISPLAY_INCLUDED */