egl: Remove dependency on libX11.
authorChia-I Wu <olvaffe@gmail.com>
Fri, 21 Aug 2009 05:53:36 +0000 (13:53 +0800)
committerBrian Paul <brianp@vmware.com>
Fri, 21 Aug 2009 14:34:34 +0000 (08:34 -0600)
libX11 is used to determine the screen number, which is in turned used
to determine the DRI driver.  However, the sysfs interface for
determining the DRI driver is gone, and no working driver depends on
this mechanism.

Display string parsing is moved to a new function,
_eglSplitDisplayString.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
configs/default
src/egl/main/Makefile
src/egl/main/egldisplay.c
src/egl/main/egldisplay.h
src/egl/main/egldriver.c
src/egl/main/egldriver.h
src/egl/main/eglx.c [deleted file]
src/egl/main/eglx.h [deleted file]

index 60638d739ddd3925428ae0195e7bb8e20ebfded5..127b98e76ce3fd3fd6e1481c48467f3b659a5803 100644 (file)
@@ -105,7 +105,7 @@ GALLIUM_STATE_TRACKERS_DIRS = glx
 # Library dependencies
 #EXTRA_LIB_PATH ?=
 GL_LIB_DEPS     = $(EXTRA_LIB_PATH) -lX11 -lXext -lm -lpthread
-EGL_LIB_DEPS    = $(EXTRA_LIB_PATH) -lX11 -ldl -lpthread
+EGL_LIB_DEPS    = $(EXTRA_LIB_PATH) -ldl -lpthread
 OSMESA_LIB_DEPS = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GL_LIB)
 GLU_LIB_DEPS    = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GL_LIB) -lm
 GLUT_LIB_DEPS   = $(EXTRA_LIB_PATH) -L$(TOP)/$(LIB_DIR) -l$(GLU_LIB) -l$(GL_LIB) -lX11 -lXmu -lXi -lm
index 15cd1d09c74a6bbfee8e637a3b9a441e29841dc7..c951b070f1f4a8aa9d9c01d21a7a6a9146ffdcde 100644 (file)
@@ -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)
 
index 9b4227f54586566f9f6e653d7ad85279fd9d4313..2c271efd670674a6fc771b20cfbb9d3cf36d46c8 100644 (file)
@@ -39,6 +39,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.
index 20651e51ffdbf57ce82c1aaabda158f27586b10c..c7a41cd588358c266f42ee332639dc50e25ef1bb 100644 (file)
@@ -65,6 +65,10 @@ extern void
 _eglFiniDisplay(void);
 
 
+extern char *
+_eglSplitDisplayString(const char *dpyString, const char **args);
+
+
 extern _EGLDisplay *
 _eglNewDisplay(NativeDisplayType displayName);
 
index a252a9aabb9c03c6e12a148c87fc4d758c82e282..06e10f618941b18d9d0397b2c679a6cd19ef749a 100644 (file)
@@ -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;
 
    
 #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;
index 7fba9380859f956c87ad0d2b17023b660b9a1e1b..6c848eb35eab5f2fe72d7bd08c936ff5c68c8861 100644 (file)
@@ -28,10 +28,6 @@ struct _egl_driver
 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 (file)
index 50acc3a..0000000
+++ /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 (file)
index 4323d55..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef EGLX_INCLUDED
-#define EGLX_INCLUDED
-
-
-#include "egldisplay.h"
-
-
-extern const char *
-_xeglChooseDriver(_EGLDisplay *dpy);
-
-
-#endif /* EGLX_INCLUDED */