initial EGL code
[mesa.git] / src / egl / main / egldriver.h
1 #ifndef EGLDRIVER_INCLUDED
2 #define EGLDRIVER_INCLUDED
3
4
5 #include "egltypedefs.h"
6
7
8 /* driver funcs */
9 typedef EGLBoolean (*Initialize_t)(_EGLDriver *, EGLDisplay dpy, EGLint *major, EGLint *minor);
10 typedef EGLBoolean (*Terminate_t)(_EGLDriver *, EGLDisplay dpy);
11
12 /* config funcs */
13 typedef EGLBoolean (*GetConfigs_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
14 typedef EGLBoolean (*ChooseConfig_t)(_EGLDriver *drv, EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
15 typedef EGLBoolean (*GetConfigAttrib_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
16
17 /* context funcs */
18 typedef EGLContext (*CreateContext_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list);
19 typedef EGLBoolean (*DestroyContext_t)(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx);
20 typedef EGLBoolean (*MakeCurrent_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
21 typedef EGLBoolean (*QueryContext_t)(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
22
23 /* surface funcs */
24 typedef EGLSurface (*CreateWindowSurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list);
25 typedef EGLSurface (*CreatePixmapSurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list);
26 typedef EGLSurface (*CreatePbufferSurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
27 typedef EGLBoolean (*DestroySurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface);
28 typedef EGLBoolean (*QuerySurface_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
29 typedef EGLBoolean (*SurfaceAttrib_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
30 typedef EGLBoolean (*BindTexImage_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint buffer);
31 typedef EGLBoolean (*ReleaseTexImage_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, EGLint buffer);
32 typedef EGLBoolean (*SwapInterval_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint interval);
33 typedef EGLBoolean (*SwapBuffers_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw);
34 typedef EGLBoolean (*CopyBuffers_t)(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface, NativePixmapType target);
35
36 /* misc funcs */
37 typedef const char *(*QueryString_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint name);
38 typedef EGLBoolean (*WaitGL_t)(_EGLDriver *drv, EGLDisplay dpy);
39 typedef EGLBoolean (*WaitNative_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint engine);
40
41
42 /* EGL_MESA_screen extension */
43 typedef EGLBoolean (*ChooseModeMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint screen_number, const EGLint *attrib_list, EGLModeMESA *modes, EGLint modes_size, EGLint *num_modes);
44 typedef EGLBoolean (*GetModesMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLint screen_number, EGLModeMESA *modes, EGLint mode_size, EGLint *num_mode);
45 typedef EGLBoolean (*GetModeAttribMESA_t)(_EGLDriver *drv, EGLDisplay dpy, EGLModeMESA mode, EGLint attribute, EGLint *value);
46
47
48
49
50 /**
51 * Base class for device drivers.
52 */
53 struct _egl_driver
54 {
55 EGLBoolean Initialized; /* set by driver after initialized */
56
57 void *LibHandle; /* dlopen handle */
58
59 _EGLDisplay *Display;
60
61 int ABIversion;
62 int APImajor, APIminor; /* returned through eglInitialize */
63
64 /*
65 * The API dispatcher jumps through these functions
66 */
67 Initialize_t Initialize;
68 Terminate_t Terminate;
69
70 GetConfigs_t GetConfigs;
71 ChooseConfig_t ChooseConfig;
72 GetConfigAttrib_t GetConfigAttrib;
73
74 CreateContext_t CreateContext;
75 DestroyContext_t DestroyContext;
76 MakeCurrent_t MakeCurrent;
77 QueryContext_t QueryContext;
78
79 CreateWindowSurface_t CreateWindowSurface;
80 CreatePixmapSurface_t CreatePixmapSurface;
81 CreatePbufferSurface_t CreatePbufferSurface;
82 DestroySurface_t DestroySurface;
83 QuerySurface_t QuerySurface;
84 SurfaceAttrib_t SurfaceAttrib;
85 BindTexImage_t BindTexImage;
86 ReleaseTexImage_t ReleaseTexImage;
87 SwapInterval_t SwapInterval;
88 SwapBuffers_t SwapBuffers;
89 CopyBuffers_t CopyBuffers;
90
91 QueryString_t QueryString;
92 WaitGL_t WaitGL;
93 WaitNative_t WaitNative;
94
95 /* EGL_MESA_screen extension */
96 ChooseModeMESA_t ChooseModeMESA;
97 GetModesMESA_t GetModesMESA;
98 GetModeAttribMESA_t GetModeAttribMESA;
99 };
100
101
102
103
104 extern _EGLDriver *
105 _eglDefaultMain(NativeDisplayType d);
106
107
108 extern _EGLDriver *
109 _eglChooseDriver(EGLDisplay dpy);
110
111
112 extern _EGLDriver *
113 _eglOpenDriver(_EGLDisplay *dpy, const char *driverName);
114
115
116 extern EGLBoolean
117 _eglCloseDriver(_EGLDriver *drv, EGLDisplay dpy);
118
119
120 extern _EGLDriver *
121 _eglLookupDriver(EGLDisplay d);
122
123
124 extern void
125 _eglInitDriverFallbacks(_EGLDriver *drv);
126
127
128 extern const char *
129 _eglQueryString(_EGLDriver *drv, EGLDisplay dpy, EGLint name);
130
131
132 extern EGLBoolean
133 _eglWaitGL(_EGLDriver *drv, EGLDisplay dpy);
134
135
136 extern EGLBoolean
137 _eglWaitNative(_EGLDriver *drv, EGLDisplay dpy, EGLint engine);
138
139
140
141 #endif /* EGLDRIVER_INCLUDED */