Files
third_party_mesa3d/src/egl/main/egldisplay.h

202 lines
4.4 KiB
C
Raw Normal View History

2005-04-22 21:09:39 +00:00
#ifndef EGLDISPLAY_INCLUDED
#define EGLDISPLAY_INCLUDED
2005-04-22 21:09:39 +00:00
#include "egltypedefs.h"
#include "egldefines.h"
#include "eglmutex.h"
2010-06-30 17:10:10 +08:00
#include "eglarray.h"
enum _egl_platform_type {
_EGL_PLATFORM_WINDOWS,
_EGL_PLATFORM_X11,
_EGL_PLATFORM_DRM,
_EGL_PLATFORM_FBDEV,
_EGL_NUM_PLATFORMS,
_EGL_INVALID_PLATFORM = -1
};
typedef enum _egl_platform_type _EGLPlatformType;
enum _egl_resource_type {
_EGL_RESOURCE_CONTEXT,
_EGL_RESOURCE_SURFACE,
_EGL_RESOURCE_IMAGE,
_EGL_RESOURCE_SYNC,
_EGL_NUM_RESOURCES
};
/* this cannot and need not go into egltypedefs.h */
typedef enum _egl_resource_type _EGLResourceType;
/**
* A resource of a display.
*/
struct _egl_resource
{
/* which display the resource belongs to */
_EGLDisplay *Display;
EGLBoolean IsLinked;
EGLint RefCount;
/* used to link resources of the same type */
_EGLResource *Next;
};
/**
* Optional EGL extensions info.
*/
struct _egl_extensions
{
EGLBoolean MESA_screen_surface;
EGLBoolean MESA_copy_context;
EGLBoolean MESA_drm_display;
EGLBoolean MESA_drm_image;
EGLBoolean KHR_image_base;
EGLBoolean KHR_image_pixmap;
EGLBoolean KHR_vg_parent_image;
EGLBoolean KHR_gl_texture_2D_image;
EGLBoolean KHR_gl_texture_cubemap_image;
EGLBoolean KHR_gl_texture_3D_image;
EGLBoolean KHR_gl_renderbuffer_image;
EGLBoolean KHR_reusable_sync;
EGLBoolean KHR_fence_sync;
EGLBoolean KHR_surfaceless_gles1;
EGLBoolean KHR_surfaceless_gles2;
EGLBoolean KHR_surfaceless_opengl;
EGLBoolean NOK_swap_region;
EGLBoolean NOK_texture_from_pixmap;
};
2005-04-22 21:09:39 +00:00
struct _egl_display
2005-04-22 21:09:39 +00:00
{
/* used to link displays */
_EGLDisplay *Next;
_EGLMutex Mutex;
_EGLPlatformType Platform; /**< The type of the platform display */
void *PlatformDisplay; /**< A pointer to the platform display */
_EGLDriver *Driver; /**< Matched driver of the display */
EGLBoolean Initialized; /**< True if the display is initialized */
/* options that affect how the driver initializes the display */
struct {
EGLBoolean TestOnly; /**< Driver should not set fields when true */
EGLBoolean UseFallback; /**< Use fallback driver (sw or less features) */
} Options;
/* these fields are set by the driver during init */
void *DriverData; /**< Driver private data */
EGLint VersionMajor; /**< EGL major version */
EGLint VersionMinor; /**< EGL minor version */
EGLint ClientAPIs; /**< Bitmask of APIs supported (EGL_xxx_BIT) */
_EGLExtensions Extensions; /**< Extensions supported */
/* these fields are derived from above */
char VersionString[1000]; /**< EGL_VERSION */
char ClientAPIsString[1000]; /**< EGL_CLIENT_APIS */
char ExtensionsString[_EGL_MAX_EXTENSIONS_LEN]; /**< EGL_EXTENSIONS */
2010-06-30 18:02:23 +08:00
_EGLArray *Screens;
2010-06-30 17:10:10 +08:00
_EGLArray *Configs;
/* lists of resources */
_EGLResource *ResourceLists[_EGL_NUM_RESOURCES];
2005-04-22 21:09:39 +00:00
};
extern _EGLPlatformType
_eglGetNativePlatform(void);
extern void
_eglFiniDisplay(void);
2005-04-22 21:09:39 +00:00
extern _EGLDisplay *
_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy);
PUBLIC void
_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *dpy);
PUBLIC void
_eglCleanupDisplay(_EGLDisplay *disp);
extern EGLBoolean
_eglCheckDisplayHandle(EGLDisplay dpy);
PUBLIC EGLBoolean
_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *dpy);
/**
* Lookup a handle to find the linked display.
* Return NULL if the handle has no corresponding linked display.
*/
static INLINE _EGLDisplay *
_eglLookupDisplay(EGLDisplay display)
{
_EGLDisplay *dpy = (_EGLDisplay *) display;
if (!_eglCheckDisplayHandle(display))
dpy = NULL;
return dpy;
}
/**
* Return the handle of a linked display, or EGL_NO_DISPLAY.
*/
static INLINE EGLDisplay
_eglGetDisplayHandle(_EGLDisplay *dpy)
{
return (EGLDisplay) ((dpy) ? dpy : EGL_NO_DISPLAY);
}
extern void
_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *dpy);
PUBLIC void
_eglGetResource(_EGLResource *res);
PUBLIC EGLBoolean
_eglPutResource(_EGLResource *res);
extern void
_eglLinkResource(_EGLResource *res, _EGLResourceType type);
extern void
_eglUnlinkResource(_EGLResource *res, _EGLResourceType type);
/**
* Return true if the resource is linked.
*/
static INLINE EGLBoolean
_eglIsResourceLinked(_EGLResource *res)
{
return res->IsLinked;
}
2005-04-22 21:09:39 +00:00
#endif /* EGLDISPLAY_INCLUDED */