Merge branch 'mesa_7_5_branch'
[mesa.git] / src / egl / main / eglx.c
index 085da33e7dc2bc5be570d987142f8cc545ed847b..50acc3a24f9ecf0d53bde869776b7b73d512f861 100644 (file)
@@ -1,3 +1,30 @@
+/**************************************************************************
+ * 
+ * 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.
 
 #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 *DefaultXDriver = "softpipe_egl";
+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);
 
@@ -38,9 +77,21 @@ _xeglChooseDriver(_EGLDisplay *dpy)
 
    assert(dpy->Xdpy);
 
-   printf("%s\n", xdpy->display_name);
+   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 DefaultXDriver; /* XXX temporary */
+   return driverName;
 #else
    return NULL;
 #endif