diff options
author | Alexis Ballier <aballier@gentoo.org> | 2013-02-14 19:07:35 +0000 |
---|---|---|
committer | Alexis Ballier <aballier@gentoo.org> | 2013-02-14 19:07:35 +0000 |
commit | 1eee16104c7a4d2340b965bb0b9af55d932feff4 (patch) | |
tree | 244d113cc52387e1240acfbbcd740562bce78a3b /x11-libs | |
parent | Version bump. (diff) | |
download | gentoo-2-1eee16104c7a4d2340b965bb0b9af55d932feff4.tar.gz gentoo-2-1eee16104c7a4d2340b965bb0b9af55d932feff4.tar.bz2 gentoo-2-1eee16104c7a4d2340b965bb0b9af55d932feff4.zip |
Add upsteam patch porting to wayland-1 API, bug #455310 by Dennis Schridde
(Portage version: 2.2.0_alpha163/cvs/Linux x86_64, signed Manifest commit with key 160F534A)
Diffstat (limited to 'x11-libs')
-rw-r--r-- | x11-libs/libva/ChangeLog | 8 | ||||
-rw-r--r-- | x11-libs/libva/files/libva-1.1.0-wayland1.patch | 359 | ||||
-rw-r--r-- | x11-libs/libva/libva-1.1.0.ebuild | 7 |
3 files changed, 369 insertions, 5 deletions
diff --git a/x11-libs/libva/ChangeLog b/x11-libs/libva/ChangeLog index d28e56ca98bd..529d68faebff 100644 --- a/x11-libs/libva/ChangeLog +++ b/x11-libs/libva/ChangeLog @@ -1,6 +1,10 @@ # ChangeLog for x11-libs/libva -# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/x11-libs/libva/ChangeLog,v 1.46 2012/12/02 22:16:11 ssuominen Exp $ +# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/x11-libs/libva/ChangeLog,v 1.47 2013/02/14 19:07:35 aballier Exp $ + + 14 Feb 2013; Alexis Ballier <aballier@gentoo.org> libva-1.1.0.ebuild, + +files/libva-1.1.0-wayland1.patch: + Add upsteam patch porting to wayland-1 API, bug #455310 by Dennis Schridde 02 Dec 2012; Samuli Suominen <ssuominen@gentoo.org> libva-1.0.15.ebuild, libva-1.0.16.ebuild: diff --git a/x11-libs/libva/files/libva-1.1.0-wayland1.patch b/x11-libs/libva/files/libva-1.1.0-wayland1.patch new file mode 100644 index 000000000000..653bcb9caef0 --- /dev/null +++ b/x11-libs/libva/files/libva-1.1.0-wayland1.patch @@ -0,0 +1,359 @@ +commit b1cf861a087234eb797c402040403a538adbe0cc +Author: Rob Bradford <rob@linux.intel.com> +Date: Fri Nov 2 10:57:47 2012 +0000 + + wayland: port to 1.0 protocol. + + With the change in protocol the hash of globals maintained by the client was + dropped. Instead we must setup a listener on the registry and get the globals + in a stream from that. + + Signed-off-by: Rob Bradford <rob@linux.intel.com> + Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com> + +diff --git a/configure.ac b/configure.ac +index de83e35..257964d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -78,7 +78,7 @@ m4_define([libva_lt_age], + m4_define([libdrm_version], [2.4]) + + # Wayland minimum version number +-m4_define([wayland_api_version], [0.95.0]) ++m4_define([wayland_api_version], [1.0.0]) + + AC_PREREQ(2.57) + AC_INIT([libva], [libva_version], [waldo.bastian@intel.com], libva) +diff --git a/test/common/va_display_wayland.c b/test/common/va_display_wayland.c +index 332d16d..abcb2b6 100644 +--- a/test/common/va_display_wayland.c ++++ b/test/common/va_display_wayland.c +@@ -33,42 +33,39 @@ + + struct display { + struct wl_display *display; ++ struct wl_registry *registry; + struct wl_compositor *compositor; + struct wl_shell *shell; + struct wl_shell_surface *shell_surface; + struct wl_surface *surface; + unsigned int ref_count; + int event_fd; +- unsigned int event_mask; + }; + + static struct display *g_display; + + static void +-display_handle_global( +- struct wl_display *display, +- uint32_t id, +- const char *interface, +- uint32_t version, +- void *data ++registry_handle_global( ++ void *data, ++ struct wl_registry *registry, ++ uint32_t id, ++ const char *interface, ++ uint32_t version + ) + { + struct display * const d = data; + + if (strcmp(interface, "wl_compositor") == 0) +- d->compositor = wl_display_bind(display, id, &wl_compositor_interface); ++ d->compositor = ++ wl_registry_bind(registry, id, &wl_compositor_interface, 1); + else if (strcmp(interface, "wl_shell") == 0) +- d->shell = wl_display_bind(display, id, &wl_shell_interface); ++ d->shell = wl_registry_bind(registry, id, &wl_shell_interface, 1); + } + +-static int +-event_mask_update(uint32_t mask, void *data) +-{ +- struct display * const d = data; +- +- d->event_mask = mask; +- return 0; +-} ++static const struct wl_registry_listener registry_listener = { ++ registry_handle_global, ++ NULL, ++}; + + static VADisplay + va_open_display_wayland(void) +@@ -91,9 +88,10 @@ va_open_display_wayland(void) + return NULL; + } + wl_display_set_user_data(d->display, d); +- wl_display_add_global_listener(d->display, display_handle_global, d); +- d->event_fd = wl_display_get_fd(d->display, event_mask_update, d); +- wl_display_iterate(d->display, d->event_mask); ++ d->registry = wl_display_get_registry(d->display); ++ wl_registry_add_listener(d->registry, ®istry_listener, d); ++ d->event_fd = wl_display_get_fd(d->display); ++ wl_display_dispatch(d->display); + + d->ref_count = 1; + g_display = d; +@@ -182,6 +180,7 @@ va_put_surface_wayland( + dst_rect->x, dst_rect->y, dst_rect->width, dst_rect->height + ); + ++ wl_surface_commit(d->surface); + wl_display_flush(d->display); + return VA_STATUS_SUCCESS; + } +diff --git a/test/putsurface/putsurface_wayland.c b/test/putsurface/putsurface_wayland.c +index 3e1d495..b93334d 100644 +--- a/test/putsurface/putsurface_wayland.c ++++ b/test/putsurface/putsurface_wayland.c +@@ -102,7 +102,7 @@ struct display { + struct wl_display *display; + struct wl_compositor *compositor; + struct wl_shell *shell; +- uint32_t mask; ++ struct wl_registry *registry; + int event_fd; + }; + +@@ -153,7 +153,7 @@ va_put_surface( + if (wl_drawable->redraw_pending) { + wl_display_flush(d->display); + while (wl_drawable->redraw_pending) +- wl_display_iterate(wl_drawable->display, WL_DISPLAY_READABLE); ++ wl_display_dispatch(wl_drawable->display); + } + + va_status = vaGetSurfaceBufferWl(va_dpy, va_surface, VA_FRAME_PICTURE, &buffer); +@@ -169,35 +169,33 @@ va_put_surface( + wl_display_flush(d->display); + wl_drawable->redraw_pending = 1; + callback = wl_surface_frame(wl_drawable->surface); ++ wl_surface_commit(wl_drawable->surface); + wl_callback_add_listener(callback, &frame_callback_listener, wl_drawable); + return VA_STATUS_SUCCESS; + } + + static void +-display_handle_global( +- struct wl_display *display, +- uint32_t id, +- const char *interface, +- uint32_t version, +- void *data ++registry_handle_global( ++ void *data, ++ struct wl_registry *registry, ++ uint32_t id, ++ const char *interface, ++ uint32_t version + ) + { + struct display * const d = data; + + if (strcmp(interface, "wl_compositor") == 0) +- d->compositor = wl_display_bind(display, id, &wl_compositor_interface); ++ d->compositor = ++ wl_registry_bind(registry, id, &wl_compositor_interface, 1); + else if (strcmp(interface, "wl_shell") == 0) +- d->shell = wl_display_bind(display, id, &wl_shell_interface); ++ d->shell = wl_registry_bind(registry, id, &wl_shell_interface, 1); + } + +-static int +-event_mask_update(uint32_t mask, void *data) +-{ +- struct display * const d = data; +- +- d->mask = mask; +- return 0; +-} ++static const struct wl_registry_listener registry_listener = { ++ registry_handle_global, ++ NULL, ++}; + + static void * + open_display(void) +@@ -213,9 +211,10 @@ open_display(void) + return NULL; + + wl_display_set_user_data(d->display, d); +- wl_display_add_global_listener(d->display, display_handle_global, d); +- d->event_fd = wl_display_get_fd(d->display, event_mask_update, d); +- wl_display_iterate(d->display, d->mask); ++ d->registry = wl_display_get_registry(d->display); ++ wl_registry_add_listener(d->registry, ®istry_listener, d); ++ d->event_fd = wl_display_get_fd(d->display); ++ wl_display_dispatch(d->display); + return d->display; + } + +@@ -298,9 +297,6 @@ check_window_event( + if (check_event == 0) + return 0; + +- if (!(d->mask & WL_DISPLAY_READABLE)) +- return 0; +- + tv.tv_sec = 0; + tv.tv_usec = 0; + do { +@@ -313,7 +309,7 @@ check_window_event( + break; + } + if (retval == 1) +- wl_display_iterate(d->display, WL_DISPLAY_READABLE); ++ wl_display_dispatch(d->display); + } while (retval > 0); + + #if 0 +diff --git a/va/wayland/va_wayland_drm.c b/va/wayland/va_wayland_drm.c +index 30c3953..d292316 100644 +--- a/va/wayland/va_wayland_drm.c ++++ b/va/wayland/va_wayland_drm.c +@@ -44,6 +44,7 @@ typedef struct va_wayland_drm_context { + struct va_wayland_context base; + void *handle; + struct wl_drm *drm; ++ struct wl_registry *registry; + void *drm_interface; + unsigned int is_authenticated : 1; + } VADisplayContextWaylandDRM; +@@ -142,6 +143,28 @@ va_wayland_drm_destroy(VADisplayContextP pDisplayContext) + } + } + ++static void ++registry_handle_global( ++ void *data, ++ struct wl_registry *registry, ++ uint32_t id, ++ const char *interface, ++ uint32_t version ++) ++{ ++ struct va_wayland_drm_context *wl_drm_ctx = data; ++ ++ if (strcmp(interface, "wl_drm") == 0) { ++ wl_drm_ctx->drm = ++ wl_registry_bind(wl_drm_ctx->registry, id, wl_drm_ctx->drm_interface, 1); ++ } ++} ++ ++static const struct wl_registry_listener registry_listener = { ++ registry_handle_global, ++ NULL, ++}; ++ + bool + va_wayland_drm_create(VADisplayContextP pDisplayContext) + { +@@ -168,14 +191,6 @@ va_wayland_drm_create(VADisplayContextP pDisplayContext) + drm_state->auth_type = 0; + ctx->drm_state = drm_state; + +- id = wl_display_get_global(ctx->native_dpy, "wl_drm", 1); +- if (!id) { +- wl_display_roundtrip(ctx->native_dpy); +- id = wl_display_get_global(ctx->native_dpy, "wl_drm", 1); +- if (!id) +- return false; +- } +- + wl_drm_ctx->handle = dlopen(LIBWAYLAND_DRM_NAME, RTLD_LAZY|RTLD_LOCAL); + if (!wl_drm_ctx->handle) + return false; +@@ -185,8 +200,14 @@ va_wayland_drm_create(VADisplayContextP pDisplayContext) + if (!wl_drm_ctx->drm_interface) + return false; + +- wl_drm_ctx->drm = +- wl_display_bind(ctx->native_dpy, id, wl_drm_ctx->drm_interface); ++ wl_drm_ctx->registry = wl_display_get_registry(ctx->native_dpy); ++ wl_registry_add_listener(wl_drm_ctx->registry, ®istry_listener, wl_drm_ctx); ++ wl_display_roundtrip(ctx->native_dpy); ++ ++ /* registry_handle_global should have been called by the ++ * wl_display_roundtrip above ++ */ ++ + if (!wl_drm_ctx->drm) + return false; + +diff --git a/va/wayland/va_wayland_emgd.c b/va/wayland/va_wayland_emgd.c +index 73e6802..cb885d1 100644 +--- a/va/wayland/va_wayland_emgd.c ++++ b/va/wayland/va_wayland_emgd.c +@@ -40,6 +40,7 @@ typedef struct va_wayland_emgd_context { + struct wl_emgd *emgd; + void *emgd_interface; + unsigned int is_created : 1; ++ struct wl_registry *registry; + } VADisplayContextWaylandEMGD; + + static inline void +@@ -86,6 +87,28 @@ va_wayland_emgd_destroy(VADisplayContextP pDisplayContext) + } + } + ++static void ++registry_handle_global( ++ void *data, ++ struct wl_registry *registry, ++ uint32_t id, ++ const char *interface, ++ uint32_t version ++) ++{ ++ VADisplayContextWaylandEMGD *wl_emgd_ctx = data; ++ ++ if (strcmp(interface, "wl_emgd") == 0) { ++ wl_emgd_ctx->emgd = ++ wl_registry_bind(registry, id, wl_emgd_ctx->emgd_interface, 1); ++ } ++} ++ ++static const struct wl_registry_listener registry_listener = { ++ registry_handle_global, ++ NULL, ++}; ++ + bool + va_wayland_emgd_create(VADisplayContextP pDisplayContext) + { +@@ -112,14 +135,6 @@ va_wayland_emgd_create(VADisplayContextP pDisplayContext) + drm_state->auth_type = 0; + ctx->drm_state = drm_state; + +- id = wl_display_get_global(ctx->native_dpy, "wl_emgd", 1); +- if (!id) { +- wl_display_roundtrip(ctx->native_dpy); +- id = wl_display_get_global(ctx->native_dpy, "wl_emgd", 1); +- if (!id) +- return false; +- } +- + wl_emgd_ctx->handle = dlopen(LIBWAYLAND_EMGD_NAME, RTLD_LAZY|RTLD_LOCAL); + if (!wl_emgd_ctx->handle) + return false; +@@ -129,8 +144,13 @@ va_wayland_emgd_create(VADisplayContextP pDisplayContext) + if (!wl_emgd_ctx->emgd_interface) + return false; + +- wl_emgd_ctx->emgd = +- wl_display_bind(ctx->native_dpy, id, wl_emgd_ctx->emgd_interface); ++ wl_emgd_ctx->registry = wl_display_get_registry(ctx->native_dpy); ++ wl_registry_add_listener(wl_emgd_ctx->registry, ®istry_listener, wl_emgd_ctx); ++ wl_display_roundtrip(ctx->native_dpy); ++ ++ /* registry_handle_global should have been called by the ++ * wl_display_roundtrip above ++ */ + if (!wl_emgd_ctx->emgd) + return false; + return true; diff --git a/x11-libs/libva/libva-1.1.0.ebuild b/x11-libs/libva/libva-1.1.0.ebuild index a207d6a1ab8d..604ebcc857a7 100644 --- a/x11-libs/libva/libva-1.1.0.ebuild +++ b/x11-libs/libva/libva-1.1.0.ebuild @@ -1,6 +1,6 @@ -# Copyright 1999-2012 Gentoo Foundation +# Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/x11-libs/libva/libva-1.1.0.ebuild,v 1.6 2012/11/21 18:13:30 aballier Exp $ +# $Header: /var/cvsroot/gentoo-x86/x11-libs/libva/libva-1.1.0.ebuild,v 1.7 2013/02/14 19:07:35 aballier Exp $ EAPI=4 @@ -11,7 +11,7 @@ if [ "${PV%9999}" != "${PV}" ] ; then # Live ebuild EGIT_REPO_URI="git://anongit.freedesktop.org/vaapi/libva" fi -inherit autotools ${SCM} multilib +inherit autotools ${SCM} multilib eutils DESCRIPTION="Video Acceleration (VA) API for Linux" HOMEPAGE="http://www.freedesktop.org/wiki/Software/vaapi" @@ -56,6 +56,7 @@ PDEPEND="video_cards_nvidia? ( x11-libs/libva-vdpau-driver ) REQUIRED_USE="opengl? ( X )" src_prepare() { + has_version '>=dev-libs/wayland-1' && epatch "${FILESDIR}/${P}-wayland1.patch" eautoreconf } |