1 /*
2 *
3 */
4 #ifndef HAVE_EGL_PROTOTYPES
5 #define HAVE_EGL_PROTOTYPES
6
7 #include "../EGL/egl.h"
8 #include "../EGL/eglext.h"
9
10 #if !defined(EGL_DRM_MASTER_FD_EXT)
11 #define EGL_DRM_MASTER_FD_EXT 0x333C
12 #endif
13
14 #if !defined(EGL_CONSUMER_AUTO_ACQUIRE_EXT)
15 #define EGL_CONSUMER_AUTO_ACQUIRE_EXT 0x332B
16 #endif
17
18 #if !defined(EGL_DRM_FLIP_EVENT_DATA_NV)
19 #define EGL_DRM_FLIP_EVENT_DATA_NV 0x33E
20 #endif
21
22 /*
23 * Dynamically load all EGL function use, and look them up with dlsym if we're
24 * dynamically linked against the EGL library already (for the devices where an
25 * explicit library isn't defined). Since we synch a copy of the KHR EGL
26 * headers there shouldn't be a conflict with the locally defined ones.
27 */
28 typedef void* GLeglImageOES;
29 typedef void (EGLAPIENTRY* PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)(EGLenum target, GLeglImageOES image);
30 typedef EGLBoolean (EGLAPIENTRY* PFNEGLCHOOSECONFIGPROC)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
31 typedef EGLContext (EGLAPIENTRY* PFNEGLCREATECONTEXTPROC)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
32 typedef EGLSurface (EGLAPIENTRY* PFNEGLCREATEWINDOWSURFACEPROC)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);
33 typedef EGLint (EGLAPIENTRY* PFNEGLGETERRORPROC)(void);
34 typedef EGLDisplay (EGLAPIENTRY* PFNEGLGETDISPLAYPROC)(EGLNativeDisplayType display_id);
35 typedef void* (EGLAPIENTRY* PFNEGLGETPROCADDRESSPROC)(const char *procname);
36 typedef EGLBoolean (EGLAPIENTRY* PFNEGLINITIALIZEPROC)
37 (EGLDisplay dpy, EGLint *major, EGLint *minor);
38 typedef EGLBoolean (EGLAPIENTRY* PFNEGLMAKECURRENTPROC)
39 (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
40 typedef EGLBoolean (EGLAPIENTRY* PFNEGLDESTROYCONTEXTPROC)
41 (EGLDisplay dpy, EGLContext ctx);
42 typedef EGLBoolean (EGLAPIENTRY* PFNEGLDESTROYSURFACEPROC)
43 (EGLDisplay dpy, EGLSurface surface);
44 typedef const char* (EGLAPIENTRY* PGNEGLQUERYSTRINGPROC)
45 (EGLDisplay dpy, EGLint name);
46 typedef EGLBoolean (EGLAPIENTRY* PFNEGLSWAPBUFFERSPROC)
47 (EGLDisplay dpy, EGLSurface surface);
48 typedef EGLBoolean (EGLAPIENTRY* PFNEGLSWAPINTERVALPROC)
49 (EGLDisplay dpy, EGLint interval);
50 typedef EGLBoolean (EGLAPIENTRY* PFNEGLTERMINATEPROC)
51 (EGLDisplay dpy);
52 typedef EGLBoolean (EGLAPIENTRY* PFNEGLBINDAPIPROC)(EGLenum);
53 typedef EGLBoolean (EGLAPIENTRY* PFNEGLGETCONFIGSPROC)
54 (EGLDisplay, EGLConfig*, EGLint, EGLint*);
55 typedef const char* (EGLAPIENTRY* PFNEGLQUERYSTRINGPROC)(EGLDisplay, EGLenum);
56 typedef EGLBoolean (EGLAPIENTRY* PFNEGLSTREAMCONSUMERACQUIREATTRIBNVPROC)(EGLDisplay,
57 EGLStreamKHR, const EGLAttrib*);
58 typedef EGLBoolean (EGLAPIENTRY* PFNEGLGETCONFIGATTRIBPROC)(EGLDisplay, EGLConfig, EGLint, EGLint*);
59
60 struct egl_env {
61 /* EGLImage */
62 PFNEGLCREATEIMAGEKHRPROC create_image;
63 PFNEGLDESTROYIMAGEKHRPROC destroy_image;
64 PFNGLEGLIMAGETARGETTEXTURE2DOESPROC image_target_texture2D;
65
66 /* DMA-Buf */
67 PFNEGLQUERYDMABUFFORMATSEXTPROC query_dmabuf_formats;
68 PFNEGLQUERYDMABUFMODIFIERSEXTPROC query_dmabuf_modifiers;
69 PFNEGLEXPORTDMABUFIMAGEMESAPROC export_dmabuf;
70 PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC query_image_format;
71
72 /* EGLStreams */
73 PFNEGLQUERYDEVICESEXTPROC query_devices;
74 PFNEGLQUERYDEVICESTRINGEXTPROC query_device_string;
75 PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display;
76 PFNEGLGETOUTPUTLAYERSEXTPROC get_output_layers;
77 PFNEGLCREATESTREAMKHRPROC create_stream;
78 PFNEGLDESTROYSTREAMKHRPROC destroy_stream;
79 PFNEGLSTREAMCONSUMEROUTPUTEXTPROC stream_consumer_output;
80 PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC create_stream_producer_surface;
81 PFNEGLSTREAMCONSUMERACQUIREKHRPROC stream_consumer_acquire;
82 PFNEGLSTREAMCONSUMERACQUIREATTRIBNVPROC stream_consumer_acquire_attrib;
83
84 /* Explicit Sync */
85 PFNEGLCREATESYNCKHRPROC create_synch;
86 PFNEGLWAITSYNCKHRPROC wait_synch;
87 PFNEGLDESTROYSYNCKHRPROC destroy_synch;
88 PFNEGLDUPNATIVEFENCEFDANDROIDPROC dup_fence_fd;
89
90 /* Basic EGL */
91 PFNEGLDESTROYSURFACEPROC destroy_surface;
92 PFNEGLGETERRORPROC get_error;
93 PFNEGLCREATEWINDOWSURFACEPROC create_window_surface;
94 PFNEGLMAKECURRENTPROC make_current;
95 PFNEGLGETDISPLAYPROC get_display;
96 PFNEGLINITIALIZEPROC initialize;
97 PFNEGLBINDAPIPROC bind_api;
98 PFNEGLGETCONFIGSPROC get_configs;
99 PFNEGLCHOOSECONFIGPROC choose_config;
100 PFNEGLCREATECONTEXTPROC create_context;
101 PFNEGLGETPROCADDRESSPROC get_proc_address;
102 PFNEGLDESTROYCONTEXTPROC destroy_context;
103 PFNEGLTERMINATEPROC terminate;
104 PFNEGLQUERYSTRINGPROC query_string;
105 PFNEGLSWAPBUFFERSPROC swap_buffers;
106 PFNEGLSWAPINTERVALPROC swap_interval;
107 PFNEGLGETCONFIGATTRIBPROC get_config_attrib;
108 };
109
map_eglext_functions(struct egl_env * denv,void * (lookup)(void * tag,const char * sym,bool req),void * tag)110 static void map_eglext_functions(struct egl_env* denv,
111 void*(lookup)(void* tag, const char* sym, bool req), void* tag)
112 {
113 /* Mapping dma_buf */
114 /* XXX: */
115 denv->create_image = (PFNEGLCREATEIMAGEKHRPROC)
116 lookup(tag, "eglCreateImageKHR", false);
117 /* XXX: */
118 denv->destroy_image = (PFNEGLDESTROYIMAGEKHRPROC)
119 lookup(tag, "eglDestroyImageKHR", false);
120 /* XXX: */
121 denv->image_target_texture2D = (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)
122 lookup(tag, "glEGLImageTargetTexture2DOES", false);
123
124 /* EGL_EXT_image_dma_buf_import_modifiers */
125 denv->query_dmabuf_modifiers = (PFNEGLQUERYDMABUFMODIFIERSEXTPROC)
126 lookup(tag, "eglQueryDmaBufModifiersEXT", false);
127 denv->query_dmabuf_formats = (PFNEGLQUERYDMABUFFORMATSEXTPROC)
128 lookup(tag, "eglQueryDmaBufFormatsEXT", false);
129 denv->query_image_format = (PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)
130 lookup(tag, "eglExportDMABUFImageQueryMESA", false);
131 denv->export_dmabuf = (PFNEGLEXPORTDMABUFIMAGEMESAPROC)
132 lookup(tag, "eglExportDMABUFImageMESA", false);
133
134 /* EGLStreams */
135 /* "EGL_EXT_device_query"
136 * "EGL_EXT_device_enumeration"
137 * "EGL_EXT_device_query" */
138
139 denv->query_device_string = (PFNEGLQUERYDEVICESTRINGEXTPROC)
140 lookup(tag, "eglQueryDeviceStringEXT", false);
141 denv->query_devices = (PFNEGLQUERYDEVICESEXTPROC)
142 lookup(tag, "eglQueryDevicesEXT", false);
143 denv->get_platform_display = (PFNEGLGETPLATFORMDISPLAYEXTPROC)
144 lookup(tag, "eglGetPlatformDisplayEXT", false );
145 denv->get_output_layers = (PFNEGLGETOUTPUTLAYERSEXTPROC)
146 lookup(tag, "eglGetOutputLayersEXT", false);
147 denv->create_stream = (PFNEGLCREATESTREAMKHRPROC)
148 lookup(tag, "eglCreateStreamKHR", false);
149 denv->destroy_stream = (PFNEGLDESTROYSTREAMKHRPROC)
150 lookup(tag, "eglDestroyStreamKHR", false);
151 denv->stream_consumer_output = (PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)
152 lookup(tag, "eglStreamConsumerOutputEXT", false);
153 denv->create_stream_producer_surface = (PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)
154 lookup(tag, "eglCreateStreamProducerSurfaceKHR", false);
155 denv->stream_consumer_acquire = (PFNEGLSTREAMCONSUMERACQUIREKHRPROC)
156 lookup(tag, "eglStreamConsumerAcquireKHR", false);
157 denv->stream_consumer_acquire_attrib = (PFNEGLSTREAMCONSUMERACQUIREATTRIBNVPROC)
158 lookup(tag, "eglStreamConsumerAcquireAttribNV", false);
159 }
160
map_egl_functions(struct egl_env * denv,void * (lookup)(void * tag,const char * sym,bool req),void * tag)161 static void map_egl_functions(struct egl_env* denv,
162 void*(lookup)(void* tag, const char* sym, bool req), void* tag)
163 {
164 denv->get_config_attrib =
165 (PFNEGLGETCONFIGATTRIBPROC) lookup(tag, "eglGetConfigAttrib", true);
166 denv->destroy_surface =
167 (PFNEGLDESTROYSURFACEPROC) lookup(tag, "eglDestroySurface", true);
168 denv->get_error =
169 (PFNEGLGETERRORPROC) lookup(tag, "eglGetError", true);
170 denv->create_window_surface =
171 (PFNEGLCREATEWINDOWSURFACEPROC) lookup(tag, "eglCreateWindowSurface", true);
172 denv->make_current =
173 (PFNEGLMAKECURRENTPROC) lookup(tag, "eglMakeCurrent", true);
174 denv->get_display =
175 (PFNEGLGETDISPLAYPROC) lookup(tag, "eglGetDisplay", true);
176 denv->initialize =
177 (PFNEGLINITIALIZEPROC) lookup(tag, "eglInitialize", true);
178 denv->bind_api =
179 (PFNEGLBINDAPIPROC) lookup(tag, "eglBindAPI", true);
180 denv->get_configs =
181 (PFNEGLGETCONFIGSPROC) lookup(tag, "eglGetConfigs", true);
182 denv->choose_config =
183 (PFNEGLCHOOSECONFIGPROC) lookup(tag, "eglChooseConfig", true);
184 denv->create_context =
185 (PFNEGLCREATECONTEXTPROC) lookup(tag, "eglCreateContext", true);
186 denv->destroy_context =
187 (PFNEGLDESTROYCONTEXTPROC) lookup(tag, "eglDestroyContext", true);
188 denv->terminate = (PFNEGLTERMINATEPROC) lookup(tag, "eglTerminate", true);
189 denv->query_string =
190 (PFNEGLQUERYSTRINGPROC) lookup(tag, "eglQueryString", true);
191 denv->swap_buffers =
192 (PFNEGLSWAPBUFFERSPROC) lookup(tag, "eglSwapBuffers", true);
193 denv->swap_interval =
194 (PFNEGLSWAPINTERVALPROC) lookup(tag, "eglSwapInterval", true);
195 denv->create_synch =
196 (PFNEGLCREATESYNCKHRPROC) lookup(tag, "eglCreateSyncKHR", false);
197 denv->wait_synch =
198 (PFNEGLWAITSYNCKHRPROC) lookup(tag, "eglWaitSyncKHR", false);
199 denv->dup_fence_fd =
200 (PFNEGLDUPNATIVEFENCEFDANDROIDPROC)
201 lookup(tag, "eglDupNativeFenceFDANDROID", false);
202 }
203
204 #endif
205