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