Candidate for 9.2? Please add: Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67283
2013/7/25, Dave Airlie <airl...@gmail.com>: > From: Dave Airlie <airl...@redhat.com> > > This fixes the dri2 opening to check if DRI_PRIME is set, > and picks the correct drm device path to open, this along > with a change to libvdpau allows vdpauinfo to work at least, > > Martin Peres tested with nouveau, and there seems to be a > further issue with final displaying, it only works sometimes, > but this patch is at least necessary to help debug further. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/auxiliary/vl/vl_winsys_dri.c | 20 +++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c > b/src/gallium/auxiliary/vl/vl_winsys_dri.c > index 88e17fe..7aec3fe 100644 > --- a/src/gallium/auxiliary/vl/vl_winsys_dri.c > +++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c > @@ -32,8 +32,10 @@ > #include <fcntl.h> > > #include <X11/Xlib-xcb.h> > +#include <X11/extensions/dri2tokens.h> > #include <xcb/dri2.h> > #include <xf86drm.h> > +#include <errno.h> > > #include "pipe/p_screen.h" > #include "pipe/p_context.h" > @@ -305,6 +307,7 @@ vl_screen_create(Display *display, int screen) > xcb_generic_error_t *error = NULL; > char *device_name; > int fd, device_name_length; > + unsigned int driverType; > > drm_magic_t magic; > > @@ -332,7 +335,22 @@ vl_screen_create(Display *display, int screen) > s = xcb_setup_roots_iterator(xcb_get_setup(scrn->conn)); > while (screen--) > xcb_screen_next(&s); > - connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, s.data->root, > XCB_DRI2_DRIVER_TYPE_DRI); > + driverType = XCB_DRI2_DRIVER_TYPE_DRI; > +#ifdef DRI2DriverPrimeShift > + { > + char *prime = getenv("DRI_PRIME"); > + if (prime) { > + unsigned int primeid; > + errno = 0; > + primeid = strtoul(prime, NULL, 0); > + if (errno == 0) > + driverType |= > + ((primeid & DRI2DriverPrimeMask) << DRI2DriverPrimeShift); > + } > + } > +#endif > + > + connect_cookie = xcb_dri2_connect_unchecked(scrn->conn, s.data->root, > driverType); > connect = xcb_dri2_connect_reply(scrn->conn, connect_cookie, NULL); > if (connect == NULL || connect->driver_name_length + > connect->device_name_length == 0) > goto free_screen; > -- > 1.8.3.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev