1 // Copyright 2016 The SwiftShader Authors. All Rights Reserved.
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
19 #include <EGL/eglext.h>
21 #include "Common/SharedLibrary.hpp"
28 EGLint (*eglGetError)(void);
29 EGLDisplay (*eglGetDisplay)(EGLNativeDisplayType display_id);
30 EGLBoolean (*eglInitialize)(EGLDisplay dpy, EGLint *major, EGLint *minor);
31 EGLBoolean (*eglTerminate)(EGLDisplay dpy);
32 const char *(*eglQueryString)(EGLDisplay dpy, EGLint name);
33 EGLBoolean (*eglGetConfigs)(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config);
34 EGLBoolean (*eglChooseConfig)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);
35 EGLBoolean (*eglGetConfigAttrib)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value);
36 EGLSurface (*eglCreateWindowSurface)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list);
37 EGLSurface (*eglCreatePbufferSurface)(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
38 EGLSurface (*eglCreatePixmapSurface)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list);
39 EGLBoolean (*eglDestroySurface)(EGLDisplay dpy, EGLSurface surface);
40 EGLBoolean (*eglQuerySurface)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value);
41 EGLBoolean (*eglBindAPI)(EGLenum api);
42 EGLenum (*eglQueryAPI)(void);
43 EGLBoolean (*eglWaitClient)(void);
44 EGLBoolean (*eglReleaseThread)(void);
45 EGLSurface (*eglCreatePbufferFromClientBuffer)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list);
46 EGLBoolean (*eglSurfaceAttrib)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value);
47 EGLBoolean (*eglBindTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
48 EGLBoolean (*eglReleaseTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
49 EGLBoolean (*eglSwapInterval)(EGLDisplay dpy, EGLint interval);
50 EGLContext (*eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list);
51 EGLBoolean (*eglDestroyContext)(EGLDisplay dpy, EGLContext ctx);
52 EGLBoolean (*eglMakeCurrent)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx);
53 EGLContext (*eglGetCurrentContext)(void);
54 EGLSurface (*eglGetCurrentSurface)(EGLint readdraw);
55 EGLDisplay (*eglGetCurrentDisplay)(void);
56 EGLBoolean (*eglQueryContext)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value);
57 EGLBoolean (*eglWaitGL)(void);
58 EGLBoolean (*eglWaitNative)(EGLint engine);
59 EGLBoolean (*eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface);
60 EGLBoolean (*eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
61 EGLImageKHR (*eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
62 EGLBoolean (*eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image);
63 __eglMustCastToProperFunctionPointerType (*eglGetProcAddress)(const char*);
64 EGLSyncKHR (*eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
65 EGLBoolean (*eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync);
66 EGLint (*eglClientWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
67 EGLBoolean (*eglGetSyncAttribKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
69 // Functions that don't change the error code, for use by client APIs
70 egl::Context *(*clientGetCurrentContext)();
79 libEGLexports = nullptr;
87 LibEGLexports *operator->()
93 LibEGLexports *loadExports()
99 const char *libEGL_lib[] = {"libEGL.dll", "lib64EGL_translator.dll"};
101 const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};
103 #elif defined(__ANDROID__)
104 #if defined(__LP64__)
105 const char *libEGL_lib[] = {"/vendor/lib64/egl/libEGL_swiftshader.so", "/system/lib64/egl/libEGL_swiftshader.so"};
107 const char *libEGL_lib[] = {"/vendor/lib/egl/libEGL_swiftshader.so", "/system/lib/egl/libEGL_swiftshader.so"};
109 #elif defined(__linux__)
110 #if defined(__LP64__)
111 const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
113 const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};
115 #elif defined(__APPLE__)
116 #if defined(__LP64__)
117 const char *libEGL_lib[] = {"libswiftshader_libEGL.dylib", "lib64EGL_translator.dylib", "libEGL.so", "libEGL.dylib"};
119 const char *libEGL_lib[] = {"libswiftshader_libEGL.dylib", "libEGL_translator.dylib", "libEGL.so", "libEGL.dylib"};
121 #elif defined(__Fuchsia__)
122 const char *libEGL_lib[] = {"libEGL.so"};
124 #error "libEGL::loadExports unimplemented for this platform"
127 libEGL = loadLibrary(libEGL_lib, "libEGL_swiftshader");
131 auto libEGL_swiftshader = (LibEGLexports *(*)())getProcAddress(libEGL, "libEGL_swiftshader");
132 libEGLexports = libEGL_swiftshader();
136 return libEGLexports;
140 LibEGLexports *libEGLexports;