Commit 35f9a9c5c99d0d723bb9361fc5018cf2fdec1fce

  • avatar
  • Chia-I Wu <olvaffe @gm…l.com>
  • Mon Sep 28 12:10:37 CEST 2009
egl: Allow driver to be built-in.

This undoes a temporary hack.
  
3232 external/mesa/src/mesa \
3333 external/drm/shared-core
3434
35LOCAL_CFLAGS += -DPTHREADS -D_EGL_PLATFORM_X=1
35LOCAL_CFLAGS += -DPTHREADS
3636LOCAL_SHARED_LIBRARIES := libdl libui libutils
3737LOCAL_STATIC_LIBRARIES := libes1api
3838
  
2323
2424#if defined(_EGL_PLATFORM_X)
2525#include <dlfcn.h>
26#elif defined(_EGL_PLATFORM_WINDOWS)
27/* Use static linking on Windows for now */
28#define WINDOWS_STATIC_LINK
2926#endif
3027
28
3129/**
3230 * Wrappers for dlopen/dlclose()
3331 */
3432#if defined(_EGL_PLATFORM_WINDOWS)
35#ifdef WINDOWS_STATIC_LINK
36 static const char *DefaultDriverName = "Windows EGL Static Library";
37#else
38 /* XXX Need to decide how to do dynamic name lookup on Windows */
39 static const char *DefaultDriverName = "TBD";
40#endif
41 typedef HMODULE lib_handle;
4233
43 static HMODULE
44 open_library(const char *filename)
45 {
46#ifdef WINDOWS_STATIC_LINK
47 return 0;
48#else
49 return LoadLibrary(filename);
50#endif
51 }
5234
53 static void
54 close_library(HMODULE lib)
55 {
56#ifdef WINDOWS_STATIC_LINK
57#else
58 FreeLibrary(lib);
59#endif
60 }
35/* XXX Need to decide how to do dynamic name lookup on Windows */
36static const char DefaultDriverName[] = "TBD";
6137
38typedef HMODULE lib_handle;
39
40static HMODULE
41open_library(const char *filename)
42{
43 return LoadLibrary(filename);
44}
45
46static void
47close_library(HMODULE lib)
48{
49 FreeLibrary(lib);
50}
51
52
6253#elif defined(_EGL_PLATFORM_X)
63 static const char *DefaultDriverName = "egl_softpipe";
6454
65 typedef void * lib_handle;
6655
67 static void *
68 open_library(const char *filename)
69 {
70 return dlopen(filename, RTLD_LAZY);
71 }
56static const char DefaultDriverName[] = "egl_softpipe";
7257
73 static void
74 close_library(void *lib)
75 {
76 dlclose(lib);
77 }
78
58typedef void * lib_handle;
59
60static void *
61open_library(const char *filename)
62{
63 return dlopen(filename, RTLD_LAZY);
64}
65
66static void
67close_library(void *lib)
68{
69 dlclose(lib);
70}
71
72#else /* _EGL_PLATFORM_NO_OS */
73
74static const char DefaultDriverName[] = "builtin";
75
76typedef void *lib_handle;
77
78static INLINE void *
79open_library(const char *filename)
80{
81 return (void *) filename;
82}
83
84static INLINE void
85close_library(void *lib)
86{
87}
88
89
7990#endif
8091
8192
107107 path = _eglstrdup(path);
108108
109109#if defined(_EGL_PLATFORM_X)
110 if (!path && dpy->NativeDisplay) {
110 if (!path && dpy && dpy->NativeDisplay) {
111111 /* assume (wrongly!) that the native display is a display string */
112112 path = _eglSplitDisplayString((const char *) dpy->NativeDisplay, &args);
113113 }
114114 suffix = "so";
115115#elif defined(_EGL_PLATFORM_WINDOWS)
116116 suffix = "dll";
117#endif /* _EGL_PLATFORM_X */
117#else /* _EGL_PLATFORM_NO_OS */
118 if (path) {
119 free(path);
120 path = NULL;
121 }
122 suffix = NULL;
123#endif
118124
119125 if (!path)
120126 path = _eglstrdup(DefaultDriverName);
160160 assert(driverPath);
161161
162162#if defined(_EGL_PLATFORM_WINDOWS)
163/* Use static linking on Windows for now */
164#ifdef WINDOWS_STATIC_LINK
165 lib = 0;
166 mainFunc = (_EGLMain_t)_eglMain;
167#else
168163 /* XXX untested */
169164 _eglLog(_EGL_DEBUG, "dlopen(%s)", driverPath);
170165 lib = open_library(driverPath);
169169 return NULL;
170170 }
171171 mainFunc = (_EGLMain_t) GetProcAddress(lib, "_eglMain");
172#endif
173172#elif defined(_EGL_PLATFORM_X)
174173 _eglLog(_EGL_DEBUG, "dlopen(%s)", driverPath);
175174 lib = open_library(driverPath);
181181 return NULL;
182182 }
183183 mainFunc = (_EGLMain_t) dlsym(lib, "_eglMain");
184#else /* _EGL_PLATFORM_NO_OS */
185 lib = 0;
186 /* must be default driver name */
187 if (strcmp(driverPath, DefaultDriverName) == 0)
188 mainFunc = (_EGLMain_t) _eglMain;
189 else
190 mainFunc = NULL;
184191#endif
185192
186193 if (!mainFunc) {
213213 lib_handle lib;
214214 _EGLDriver *drv = NULL;
215215
216 /* temporary hack */
217 (void) _eglOpenLibrary;
218 mainFunc = _eglMain;
219 lib = (lib_handle) 0;
220
216 mainFunc = _eglOpenLibrary(path, &lib);
221217 if (!mainFunc)
222218 return NULL;
223219
452452 const char *es2_libname = "libGLESv2.so";
453453 const char *gl_libname = "libGL.so";
454454 const char *vg_libname = "libOpenVG.so";
455#else /* _EGL_PLATFORM_NO_OS */
456 const char *es1_libname = NULL;
457 const char *es2_libname = NULL;
458 const char *gl_libname = NULL;
459 const char *vg_libname = NULL;
455460#endif
456461
457462 if ((lib = open_library(es1_libname))) {
  
2121static void
2222log_level_initialize(void)
2323{
24#if defined(_EGL_PLATFORM_X)
2524 char *log_env = getenv("EGL_LOG_LEVEL");
26#else
27 char *log_env = NULL;
28#endif
2925
3026 if (log_env == NULL) {
3127 ReportingLevel = FALLBACK_LOG_LEVEL;