egldriver.h revision 485528f2acb69940a7c757638127f716c0cb2654
1adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#ifndef EGLDRIVER_INCLUDED 2adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#define EGLDRIVER_INCLUDED 3adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 4adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 5adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#include "egltypedefs.h" 6adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 751ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul/* should probably use a dynamic-lengh string, but this will do */ 851ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul#define MAX_EXTENSIONS_LEN 1000 951ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul 10adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 11adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* driver funcs */ 12adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*Initialize_t)(_EGLDriver *, EGLDisplay dpy, EGLint *major, EGLint *minor); 13adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*Terminate_t)(_EGLDriver *, EGLDisplay dpy); 14adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 15adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* config funcs */ 16adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*GetConfigs_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); 17adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*ChooseConfig_t)(_EGLDriver *drv, EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); 18adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*GetConfigAttrib_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); 19adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 20adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* context funcs */ 21adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLContext (*CreateContext_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list); 22adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*DestroyContext_t)(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx); 23adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*MakeCurrent_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); 24adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*QueryContext_t)(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); 25adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 26adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* surface funcs */ 27adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLSurface (*CreateWindowSurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list); 28adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLSurface (*CreatePixmapSurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list); 29adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLSurface (*CreatePbufferSurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); 30adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*DestroySurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface); 31adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*QuerySurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); 32adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*SurfaceAttrib_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); 33adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*BindTexImage_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint buffer); 34adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*ReleaseTexImage_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint buffer); 35adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*SwapInterval_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint interval); 36adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*SwapBuffers_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw); 37adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*CopyBuffers_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, NativePixmapType target); 38adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 39adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* misc funcs */ 40adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef const char *(*QueryString_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint name); 41adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*WaitGL_t)(_EGLDriver *drv, EGLDisplay dpy); 42adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*WaitNative_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint engine); 43adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 44adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 45adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/* EGL_MESA_screen extension */ 46c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*ChooseModeMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, const EGLint *attrib_list, EGLModeMESA *modes, EGLint modes_size, EGLint *num_modes); 47c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*GetModesMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode); 48adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paultypedef EGLBoolean (*GetModeAttribMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value); 49f9bad3dfea43d792876c3a7221b9cfcd107085ebBrian Paultypedef EGLBoolean (*CopyContextMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLContext source, EGLContext dest, EGLint mask); 50c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*GetScreensMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA *screens, EGLint max_screens, EGLint *num_screens); 51c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLSurface (*CreateScreenSurfaceMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); 527012d01d888d482f2c6ad1180231a482026d213aJon Smirltypedef EGLBoolean (*ShowSurfaceMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLSurface surface, EGLModeMESA mode); 53c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*ScreenPositionMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLint x, EGLint y); 54c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*QueryScreenMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLint attribute, EGLint *value); 55c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*QueryScreenSurfaceMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLSurface *surface); 56c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paultypedef EGLBoolean (*QueryScreenModeMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLModeMESA *mode); 577012d01d888d482f2c6ad1180231a482026d213aJon Smirltypedef const char * (*QueryModeStringMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLModeMESA mode); 58adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 59adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 60adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul/** 61adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * Base class for device drivers. 62adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 63adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulstruct _egl_driver 64adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul{ 65adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul EGLBoolean Initialized; /* set by driver after initialized */ 66adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 67adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul void *LibHandle; /* dlopen handle */ 68adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 69adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul _EGLDisplay *Display; 70adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 71adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul int ABIversion; 72adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul int APImajor, APIminor; /* returned through eglInitialize */ 73adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 74adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* 75adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul * The API dispatcher jumps through these functions 76adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul */ 77adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul Initialize_t Initialize; 78adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul Terminate_t Terminate; 79adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 80adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul GetConfigs_t GetConfigs; 81adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ChooseConfig_t ChooseConfig; 82adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul GetConfigAttrib_t GetConfigAttrib; 83adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 84adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul CreateContext_t CreateContext; 85adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul DestroyContext_t DestroyContext; 86adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul MakeCurrent_t MakeCurrent; 87adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul QueryContext_t QueryContext; 88adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 89adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul CreateWindowSurface_t CreateWindowSurface; 90adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul CreatePixmapSurface_t CreatePixmapSurface; 91adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul CreatePbufferSurface_t CreatePbufferSurface; 92adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul DestroySurface_t DestroySurface; 93adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul QuerySurface_t QuerySurface; 94adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul SurfaceAttrib_t SurfaceAttrib; 95adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul BindTexImage_t BindTexImage; 96adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ReleaseTexImage_t ReleaseTexImage; 97adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul SwapInterval_t SwapInterval; 98adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul SwapBuffers_t SwapBuffers; 99adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul CopyBuffers_t CopyBuffers; 100adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 101adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul QueryString_t QueryString; 102adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul WaitGL_t WaitGL; 103adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul WaitNative_t WaitNative; 104adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 105adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul /* EGL_MESA_screen extension */ 106adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul ChooseModeMESA_t ChooseModeMESA; 107adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul GetModesMESA_t GetModesMESA; 108adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul GetModeAttribMESA_t GetModeAttribMESA; 1091c606a9aa1d1fa79fe5c92f42651385917322d5fJon Smirl CopyContextMESA_t CopyContextMESA; 110c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul GetScreensMESA_t GetScreensMESA; 111c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul CreateScreenSurfaceMESA_t CreateScreenSurfaceMESA; 112c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul ShowSurfaceMESA_t ShowSurfaceMESA; 113c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul ScreenPositionMESA_t ScreenPositionMESA; 114c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul QueryScreenMESA_t QueryScreenMESA; 115c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul QueryScreenSurfaceMESA_t QueryScreenSurfaceMESA; 116c22990c29a5cdff89e6e3914aa565acc88a6a407Brian Paul QueryScreenModeMESA_t QueryScreenModeMESA; 1177012d01d888d482f2c6ad1180231a482026d213aJon Smirl QueryModeStringMESA_t QueryModeStringMESA; 11851ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul 11951ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul /* Extension enable flags */ 12051ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul EGLBoolean MESA_screen_surface; 12151ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul EGLBoolean MESA_copy_context; 12251ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul 12351ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul /* Extensions string */ 12451ac95ba8945711cf65e94a2deba6c896dea5f0eBrian Paul char Extensions[MAX_EXTENSIONS_LEN]; 125adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul}; 126adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 127adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 128485528f2acb69940a7c757638127f716c0cb2654Jon Smirlextern _EGLDriver *_eglMain(_EGLDisplay *dpy); 129adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 130adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 131adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern _EGLDriver * 132adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglChooseDriver(EGLDisplay dpy); 133adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 134adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 135adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern _EGLDriver * 136adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglOpenDriver(_EGLDisplay *dpy, const char *driverName); 137adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 138adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 139adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 140adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglCloseDriver(_EGLDriver *drv, EGLDisplay dpy); 141adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 142adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 143adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern _EGLDriver * 144adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglLookupDriver(EGLDisplay d); 145adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 146adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 147adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern void 148adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglInitDriverFallbacks(_EGLDriver *drv); 149adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 150adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 151adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern const char * 152adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglQueryString(_EGLDriver *drv, EGLDisplay dpy, EGLint name); 153adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 154adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 155adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 156adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglWaitGL(_EGLDriver *drv, EGLDisplay dpy); 157adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 158adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 159adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paulextern EGLBoolean 160adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul_eglWaitNative(_EGLDriver *drv, EGLDisplay dpy, EGLint engine); 161adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 162adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 163adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul 164adbff7e977c7c768e752a24fb643d68bdf961bfeBrian Paul#endif /* EGLDRIVER_INCLUDED */ 165