[Mesa-dev] [PATCH] gallium/vl: add prime support

Andreas Boll andreas.boll.dev at gmail.com
Thu Jul 25 03:10:19 PDT 2013


Candidate for 9.2?

Please add:
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67283

2013/7/25, Dave Airlie <airlied at gmail.com>:
> From: Dave Airlie <airlied at 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 <airlied at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list