diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/egl/main/Makefile | 6 | ||||
| -rw-r--r-- | src/egl/main/egldisplay.c | 30 | ||||
| -rw-r--r-- | src/egl/main/egldisplay.h | 4 | ||||
| -rw-r--r-- | src/egl/main/egldriver.c | 91 | ||||
| -rw-r--r-- | src/egl/main/egldriver.h | 4 | ||||
| -rw-r--r-- | src/egl/main/eglx.c | 100 | ||||
| -rw-r--r-- | src/egl/main/eglx.h | 12 | 
7 files changed, 43 insertions, 204 deletions
| diff --git a/src/egl/main/Makefile b/src/egl/main/Makefile index 15cd1d09c7..c951b070f1 100644 --- a/src/egl/main/Makefile +++ b/src/egl/main/Makefile @@ -22,8 +22,7 @@ HEADERS = \  	eglmutex.h \  	eglscreen.h \  	eglstring.h \ -	eglsurface.h \ -	eglx.h +	eglsurface.h  SOURCES = \  	eglapi.c \ @@ -39,8 +38,7 @@ SOURCES = \  	eglmode.c \  	eglscreen.c \  	eglstring.c \ -	eglsurface.c \ -	eglx.c +	eglsurface.c  OBJECTS = $(SOURCES:.c=.o) diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index 9b4227f545..2c271efd67 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -40,6 +40,36 @@ _eglFiniDisplay(void)  /** + * If the first character is '!' we interpret it as specific driver name + * (i.e. "!r200" or "!i830").  Whatever follows ':' is interpreted as + * arguments. + * + * The caller may free() the returned driver name. + */ +char * +_eglSplitDisplayString(const char *dpyString, const char **args) +{ +   char *drv, *p; + +   if (!dpyString || dpyString[0] != '!') +      return NULL; +   drv = _eglstrdup(dpyString + 1); +   if (!drv) +      return NULL; + +   p = strchr(dpyString, ':'); +   if (p) { +      drv[p - dpyString] = '\0'; +      p++; +   } +   if (args) +      *args = p; + +   return drv; +} + + +/**   * Allocate a new _EGLDisplay object for the given nativeDisplay handle.   * We'll also try to determine the device driver name at this time.   * diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index 20651e51ff..c7a41cd588 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -65,6 +65,10 @@ extern void  _eglFiniDisplay(void); +extern char * +_eglSplitDisplayString(const char *dpyString, const char **args); + +  extern _EGLDisplay *  _eglNewDisplay(NativeDisplayType displayName); diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c index a252a9aabb..06e10f6189 100644 --- a/src/egl/main/egldriver.c +++ b/src/egl/main/egldriver.c @@ -22,7 +22,6 @@  #if defined(_EGL_PLATFORM_X)  #include <dlfcn.h> -#include "eglx.h"  #elif defined(_EGL_PLATFORM_WINDOWS)  /* Use static linking on Windows for now */  #define WINDOWS_STATIC_LINK @@ -38,7 +37,6 @@     /* XXX Need to decide how to do dynamic name lookup on Windows */     static const char *DefaultDriverName = "TBD";  #endif -   static const char *SysFS = NULL;     typedef HMODULE lib_handle;     static HMODULE @@ -61,8 +59,7 @@     }  #elif defined(_EGL_PLATFORM_X) -   static const char *DefaultDriverName = ":0"; -   static const char *SysFS = "/sys/class"; +   static const char *DefaultDriverName = "egl_softpipe";     typedef void * lib_handle; @@ -80,57 +77,9 @@  #endif -/** - * Given a card number, use sysfs to determine the DRI driver name. - */ -const char * -_eglChooseDRMDriver(int card) -{ -#if 0 -   return _eglstrdup("libEGLdri"); -#else -   char path[2000], driverName[2000]; -   FILE *f; -   int length; - -   snprintf(path, sizeof(path), "%s/drm/card%d/dri_library_name", SysFS, card); - -   f = fopen(path, "r"); -   if (!f) -      return NULL; - -   fgets(driverName, sizeof(driverName), f); -   fclose(f); - -   if ((length = strlen(driverName)) > 1) { -      /* remove the trailing newline from sysfs */ -      driverName[length - 1] = '\0'; -      strncat(driverName, "_dri", sizeof(driverName)); -      return _eglstrdup(driverName); -   } -   else { -      return NULL; -   }    -#endif -} -  /** - * XXX this function is totally subject change!!! - * - * - * Determine/return the path of the driver to use for the given native display. - * - * Try to be clever and determine if nativeDisplay is an Xlib Display - * ptr or a string (naming a driver or screen number, etc). - * - * If the first character is ':' we interpret it as a screen or card index - * number (i.e. ":0" or ":1", etc) - * Else if the first character is '!' we interpret it as specific driver name - * (i.e. "!r200" or "!i830". - * - * Whatever follows ':' is interpreted as arguments. - * + * Choose a driver for a given display.   * The caller may free() the returned strings.   */  static char * @@ -144,42 +93,16 @@ _eglChooseDriver(_EGLDisplay *dpy, char **argsRet)        path = _eglstrdup(path);  #if defined(_EGL_PLATFORM_X) -   (void) DefaultDriverName; -     if (!path && dpy->NativeDisplay) { -      const char *dpyString = (const char *) dpy->NativeDisplay; -      char *p; -      /* parse the display string */ -      if (dpyString[0] == '!' || dpyString[0] == ':') { -         if (dpyString[0] == '!') { -            path = _eglstrdup(dpyString); -            p = strchr(path, ':'); -            if (p) -               *p++ = '\0'; -         } else { -            p = strchr(dpyString, ':'); -            if (p) -               p++; -         } - -         if (p) { -            if (!path && p[0] >= '0' && p[0] <= '9' && !p[1]) { -               int card = atoi(p); -               path = (char *) _eglChooseDRMDriver(card); -            } -            args = p; -         } -      } -      else { -         path = (char *) _xeglChooseDriver(dpy); -      } +      /* assume (wrongly!) that the native display is a display string */ +      path = _eglSplitDisplayString((const char *) dpy->NativeDisplay, &args);     } -#elif defined(_EGL_PLATFORM_WINDOWS) +#endif /* _EGL_PLATFORM_X */ +     if (!path)        path = _eglstrdup(DefaultDriverName); -#endif /* _EGL_PLATFORM_X */ -   if (path && argsRet) +   if (argsRet)        *argsRet = (args) ? _eglstrdup(args) : NULL;     return path; diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h index 7fba938085..6c848eb35e 100644 --- a/src/egl/main/egldriver.h +++ b/src/egl/main/egldriver.h @@ -29,10 +29,6 @@ extern _EGLDriver *_eglMain(const char *args);  extern const char * -_eglChooseDRMDriver(int card); - - -extern const char *  _eglPreloadDriver(_EGLDisplay *dpy); diff --git a/src/egl/main/eglx.c b/src/egl/main/eglx.c deleted file mode 100644 index 50acc3a24f..0000000000 --- a/src/egl/main/eglx.c +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************************************** - *  - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. - * All Rights Reserved. - *  - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - *  - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - *  - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - *  - **************************************************************************/ - - -/** - * X-specific EGL code. - * - * Any glue code needed to make EGL work with X is placed in this file. - */ - - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <X11/Xlib.h> - -#include "egldriver.h" -#include "egllog.h" -#include "eglstring.h" -#include "eglx.h" - - -static const char *DefaultGLXDriver = "egl_glx"; -static const char *DefaultSoftDriver = "egl_softpipe"; - - -/** - * Given an X Display ptr (at dpy->Xdpy) try to determine the appropriate - * device driver.  Return its name. - * - * This boils down to whether to use the egl_glx.so driver which will - * load a DRI driver or the egl_softpipe.so driver that'll do software - * rendering on Xlib. - */ -const char * -_xeglChooseDriver(_EGLDisplay *dpy) -{ -#ifdef _EGL_PLATFORM_X -   _XPrivDisplay xdpy; -   int screen; -   const char *driverName; - -   assert(dpy); - -   if (!dpy->Xdpy) { -      dpy->Xdpy = XOpenDisplay(NULL); -      if (!dpy->Xdpy) { -         /* can't open X display -> can't use X-based driver */ -         return NULL; -      } -   } -   xdpy = (_XPrivDisplay) dpy->Xdpy; - -   assert(dpy->Xdpy); - -   screen = DefaultScreen(dpy->Xdpy); - -   /* See if we can choose a DRI/DRM driver */ -   driverName = _eglChooseDRMDriver(screen); -   if (driverName) { -      free((void *) driverName); -      driverName = _eglstrdup(DefaultGLXDriver); -   } -   else { -      driverName = _eglstrdup(DefaultSoftDriver); -   } - -   _eglLog(_EGL_DEBUG, "_xeglChooseDriver: %s", driverName); - -   return driverName; -#else -   return NULL; -#endif -} - - diff --git a/src/egl/main/eglx.h b/src/egl/main/eglx.h deleted file mode 100644 index 4323d55838..0000000000 --- a/src/egl/main/eglx.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef EGLX_INCLUDED -#define EGLX_INCLUDED - - -#include "egldisplay.h" - - -extern const char * -_xeglChooseDriver(_EGLDisplay *dpy); - - -#endif /* EGLX_INCLUDED */ | 
