[Mesa-dev] [PATCH] st/egl: Fix build after changes in src/egl/wayland/

Kristian Høgsberg krh at bitplanet.net
Wed Mar 20 08:33:03 PDT 2013


I pushed a different fix for this.  The gallium egl code doesn't have
support for buffer sharing via fd passing so we can't just ask the
protocol code to advertise that, even if the kernel has the
DRM_CAP_PRIME features.  Instead we just pass 0 for the flags
argument.

thanks,
Kristian

On Tue, Mar 19, 2013 at 6:07 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> Not sure it actually works though, some buffer callbacks seem to have rotted
> before.
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>  src/gallium/state_trackers/egl/drm/native_drm.c     |  8 +++++++-
>  src/gallium/state_trackers/egl/wayland/native_drm.c |  8 +++++++-
>  src/gallium/state_trackers/egl/x11/native_dri2.c    | 14 +++++++++++++-
>  3 files changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/egl/drm/native_drm.c b/src/gallium/state_trackers/egl/drm/native_drm.c
> index f0c0f54..65c91cf 100644
> --- a/src/gallium/state_trackers/egl/drm/native_drm.c
> +++ b/src/gallium/state_trackers/egl/drm/native_drm.c
> @@ -207,13 +207,19 @@ drm_display_bind_wayland_display(struct native_display *ndpy,
>                                    struct wl_display *wl_dpy)
>  {
>     struct drm_display *drmdpy = drm_display(ndpy);
> +   int ret, flags = 0;
> +   uint64_t cap;
>
>     if (drmdpy->wl_server_drm)
>        return FALSE;
>
> +   ret = drmGetCap(drmdpy->fd, DRM_CAP_PRIME, &cap);
> +   if (ret == 0 && cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT))
> +      flags |= WAYLAND_DRM_PRIME;
> +
>     drmdpy->wl_server_drm = wayland_drm_init(wl_dpy,
>           drmdpy->device_name,
> -         &wl_drm_callbacks, ndpy);
> +         &wl_drm_callbacks, ndpy, flags);
>
>     if (!drmdpy->wl_server_drm)
>        return FALSE;
> diff --git a/src/gallium/state_trackers/egl/wayland/native_drm.c b/src/gallium/state_trackers/egl/wayland/native_drm.c
> index 3801fac..7633379 100644
> --- a/src/gallium/state_trackers/egl/wayland/native_drm.c
> +++ b/src/gallium/state_trackers/egl/wayland/native_drm.c
> @@ -265,13 +265,19 @@ wayland_drm_display_bind_wayland_display(struct native_display *ndpy,
>                                           struct wl_display *wl_dpy)
>  {
>     struct wayland_drm_display *drmdpy = wayland_drm_display(ndpy);
> +   int ret, flags = 0;
> +   uint64_t cap;
>
>     if (drmdpy->wl_server_drm)
>        return FALSE;
>
> +   ret = drmGetCap(drmdpy->fd, DRM_CAP_PRIME, &cap);
> +   if (ret == 0 && cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT))
> +      flags |= WAYLAND_DRM_PRIME;
> +
>     drmdpy->wl_server_drm =
>        wayland_drm_init(wl_dpy, drmdpy->device_name,
> -                       &wl_drm_callbacks, ndpy);
> +                       &wl_drm_callbacks, ndpy, flags);
>
>     if (!drmdpy->wl_server_drm)
>        return FALSE;
> diff --git a/src/gallium/state_trackers/egl/x11/native_dri2.c b/src/gallium/state_trackers/egl/x11/native_dri2.c
> index a989f9e..67ecb60 100644
> --- a/src/gallium/state_trackers/egl/x11/native_dri2.c
> +++ b/src/gallium/state_trackers/egl/x11/native_dri2.c
> @@ -40,6 +40,7 @@
>
>  #include "common/native_helper.h"
>  #ifdef HAVE_WAYLAND_BACKEND
> +#include <xf86drm.h>
>  #include "common/native_wayland_drm_bufmgr_helper.h"
>  #endif
>
> @@ -63,6 +64,7 @@ struct dri2_display {
>     struct util_hash_table *surfaces;
>  #ifdef HAVE_WAYLAND_BACKEND
>     struct wl_drm *wl_server_drm; /* for EGL_WL_bind_wayland_display */
> +   int fd;
>  #endif
>  };
>
> @@ -817,6 +819,10 @@ dri2_display_init_screen(struct native_display *ndpy)
>        return FALSE;
>     }
>
> +#ifdef HAVE_WAYLAND_BACKEND
> +   dri2dpy->fd = fd;
> +#endif
> +
>     return TRUE;
>  }
>
> @@ -855,13 +861,19 @@ dri2_display_bind_wayland_display(struct native_display *ndpy,
>                                    struct wl_display *wl_dpy)
>  {
>     struct dri2_display *dri2dpy = dri2_display(ndpy);
> +   int ret, flags = 0;
> +   uint64_t cap;
>
>     if (dri2dpy->wl_server_drm)
>        return FALSE;
>
> +   ret = drmGetCap(dri2dpy->fd, DRM_CAP_PRIME, &cap);
> +   if (ret == 0 && cap == (DRM_PRIME_CAP_IMPORT | DRM_PRIME_CAP_EXPORT))
> +      flags |= WAYLAND_DRM_PRIME;
> +
>     dri2dpy->wl_server_drm = wayland_drm_init(wl_dpy,
>           x11_screen_get_device_name(dri2dpy->xscr),
> -         &wl_drm_callbacks, ndpy);
> +         &wl_drm_callbacks, ndpy, flags);
>
>     if (!dri2dpy->wl_server_drm)
>        return FALSE;
> --
> 1.8.2.rc3
>
> _______________________________________________
> 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