[Mesa-dev] [PATCH 3/6][RFC] EGL/Wayland drirc: Use drirc to complement DRI_PRIME

Axel Davy axel.davy at ens.fr
Sun Jan 5 13:26:39 PST 2014


add to drirc a parameter "wanted_device_id_path_tag", and check
its value to choose which gpu to use, if DRI_PRIME isn't set.

Signed-off-by: Axel Davy <axel.davy at ens.fr>
---
 configure.ac                                    |  1 +
 src/egl/drivers/dri2/Makefile.am                | 12 +++++++++++
 src/egl/drivers/dri2/platform_wayland.c         | 27 +++++++++++++++++++++++++
 src/mesa/drivers/dri/common/xmlpool/t_options.h |  5 +++++
 4 files changed, 45 insertions(+)

diff --git a/configure.ac b/configure.ac
index f75325d..bdec31f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -714,6 +714,7 @@ AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xyes -a \
                                   "x$enable_dri" = xyes)
 AM_CONDITIONAL(HAVE_DRI, test "x$enable_dri" = xyes)
 AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes)
+AM_CONDITIONAL(HAVE_DRIRC_CHOOSE_GPU, test "x$enable_drirc_choose_gpu" = xyes)
 
 AC_ARG_ENABLE([shared-glapi],
     [AS_HELP_STRING([--enable-shared-glapi],
diff --git a/src/egl/drivers/dri2/Makefile.am b/src/egl/drivers/dri2/Makefile.am
index 823ef5e..da1094c 100644
--- a/src/egl/drivers/dri2/Makefile.am
+++ b/src/egl/drivers/dri2/Makefile.am
@@ -57,6 +57,18 @@ if HAVE_EGL_PLATFORM_WAYLAND
 libegl_dri2_la_SOURCES += platform_wayland.c
 AM_CFLAGS += -DHAVE_WAYLAND_PLATFORM
 AM_CFLAGS += $(WAYLAND_CFLAGS)
+
+if HAVE_DRIRC_CHOOSE_GPU
+libegl_dri2_la_LIBADD += -lexpat
+libegl_dri2_la_SOURCES += $(top_srcdir)/src/mesa/drivers/dri/common/xmlconfig.c
+AM_CFLAGS += -DUSE_DRICONF_CHOOSE_GPU_INIT \
+             -I$(top_srcdir)/src/mesa/drivers/dri/common \
+             -I$(top_builddir)/src/mesa/drivers/dri/common \
+             -I$(top_builddir)/src/egl/wayland/wayland-drm \
+             -I$(top_builddir)/src/mesa \
+             -I$(top_builddir)/src/mapi
+endif
+
 endif
 
 if HAVE_EGL_PLATFORM_DRM
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 0f022c1..7c8e076 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -44,6 +44,21 @@
 #include <libudev.h>
 #endif
 
+#ifdef USE_DRICONF_CHOOSE_GPU_INIT
+
+#include "xmlconfig.h"
+#include "xmlpool.h"
+
+
+PUBLIC const char __driConfigOptionsWayland[] =
+DRI_CONF_BEGIN
+    DRI_CONF_SECTION_MISCELLANEOUS
+        DRI_CONF_WANTED_DEVICE_ID_PATH_TAG()
+    DRI_CONF_SECTION_END
+DRI_CONF_END;
+
+#endif
+
 enum wl_drm_format_flags {
    HAS_ARGB8888 = 1,
    HAS_XRGB8888 = 2,
@@ -1069,6 +1084,18 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
 
    if (dri_prime)
       prime = strdup(dri_prime);
+#ifdef USE_DRICONF_CHOOSE_GPU_INIT
+   else {
+      driOptionCache defaultDevice;
+      driOptionCache askedDevice;
+      driParseOptionInfo(&defaultDevice, __driConfigOptionsWayland);
+      driParseConfigFiles(&askedDevice, &defaultDevice, 0, "init");
+      if (driCheckOption(&askedDevice, "wanted_device_id_path_tag", DRI_STRING))
+         prime = strdup(driQueryOptionst(&askedDevice, "wanted_device_id_path_tag"));
+     driDestroyOptionCache(&askedDevice);
+     driDestroyOptionInfo(&defaultDevice);
+    }
+#endif
 
    drv->API.CreateWindowSurface = dri2_create_window_surface;
    drv->API.DestroySurface = dri2_destroy_surface;
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h
index 3bf804a..ac72e3b 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -321,3 +321,8 @@ DRI_CONF_SECTION_BEGIN \
 DRI_CONF_OPT_BEGIN_B(always_have_depth_buffer, def) \
         DRI_CONF_DESC(en,gettext("Create all visuals with a depth buffer")) \
 DRI_CONF_OPT_END
+
+#define DRI_CONF_WANTED_DEVICE_ID_PATH_TAG(def) \
+DRI_CONF_OPT_BEGIN(wanted_device_id_path_tag, string, def) \
+        DRI_CONF_DESC(en,gettext("Define the graphic device to use if possible")) \
+DRI_CONF_OPT_END
-- 
1.8.3.2



More information about the mesa-dev mailing list