[PATCH 5/6] clients: Fix a few issues in simple-dmabuf-intel
Derek Foreman
derekf at osg.samsung.com
Thu Dec 3 13:17:06 PST 2015
On 24/11/15 01:28 PM, Emmanuel Gil Peyrot wrote:
> Those were found while working on simple-dmabuf-v4l, as found in the
> next patch of this series.
>
> After each buffer’s params were ready to be submitted to the
> compositor, a roundtrip was done, which is wasteful since we can do it
> only once after having queued all the params we want. Removing those
> nested roundtrips also prevent the potentially dangerous side-effect of
> calling callbacks for later events while previous events were still
> being processed.
>
> Signed-off-by: Emmanuel Gil Peyrot <emmanuel.peyrot at collabora.com>
> Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> Reviewed-by: Daniel Stone <daniels at collabora.com>
the removal of the worthless surface damage isn't really mentioned in
the commit log. Maybe just give it a mention, don't really have to
split the patch in two unless you want to...
but yeah, this makes more sense than before:
Reviewed-by: Derek Foreman <derekf at osg.samsung.com>
> Differential Revision: https://phabricator.freedesktop.org/D344
> ---
> clients/simple-dmabuf-intel.c | 41 +++++++++++++++++++----------------------
> 1 file changed, 19 insertions(+), 22 deletions(-)
>
> diff --git a/clients/simple-dmabuf-intel.c b/clients/simple-dmabuf-intel.c
> index f371d80..0ceefeb 100644
> --- a/clients/simple-dmabuf-intel.c
> +++ b/clients/simple-dmabuf-intel.c
> @@ -35,9 +35,9 @@
> #include <fcntl.h>
>
> #include <xf86drm.h>
> -#include <libdrm/i915_drm.h>
> -#include <libdrm/intel_bufmgr.h>
> -#include <libdrm/drm_fourcc.h>
> +#include <i915_drm.h>
> +#include <intel_bufmgr.h>
> +#include <drm_fourcc.h>
>
> #include <wayland-client.h>
> #include "xdg-shell-unstable-v5-client-protocol.h"
> @@ -204,6 +204,7 @@ create_failed(void *data, struct zwp_linux_buffer_params_v1 *params)
> struct buffer *buffer = data;
>
> buffer->buffer = NULL;
> + running = 0;
>
> zwp_linux_buffer_params_v1_destroy(params);
>
> @@ -274,13 +275,6 @@ create_dmabuf_buffer(struct display *display, struct buffer *buffer,
> DRM_FORMAT_XRGB8888,
> flags);
>
> - /* params is destroyed by the event handlers */
> -
> - wl_display_roundtrip(display->display);
> - if (buffer->buffer == NULL) {
> - goto error2;
> - }
> -
> return 0;
>
> error2:
> @@ -313,6 +307,8 @@ static struct window *
> create_window(struct display *display, int width, int height)
> {
> struct window *window;
> + int i;
> + int ret;
>
> window = calloc(1, sizeof *window);
> if (!window)
> @@ -344,6 +340,14 @@ create_window(struct display *display, int width, int height)
> assert(0);
> }
>
> + for (i = 0; i < 2; ++i) {
> + ret = create_dmabuf_buffer(display, &window->buffers[i],
> + width, height);
> +
> + if (ret < 0)
> + return NULL;
> + }
> +
> return window;
> }
>
> @@ -375,7 +379,6 @@ static struct buffer *
> window_next_buffer(struct window *window)
> {
> struct buffer *buffer;
> - int ret = 0;
>
> if (!window->buffers[0].busy)
> buffer = &window->buffers[0];
> @@ -384,14 +387,6 @@ window_next_buffer(struct window *window)
> else
> return NULL;
>
> - if (!buffer->buffer) {
> - ret = create_dmabuf_buffer(window->display, buffer,
> - window->width, window->height);
> -
> - if (ret < 0)
> - return NULL;
> - }
> -
> return buffer;
> }
>
> @@ -574,9 +569,11 @@ main(int argc, char **argv)
> sigint.sa_flags = SA_RESETHAND;
> sigaction(SIGINT, &sigint, NULL);
>
> - /* Initialise damage to full surface, so the padding gets painted */
> - wl_surface_damage(window->surface, 0, 0,
> - window->width, window->height);
> + /* Here we retrieve the linux-dmabuf objects, or error */
> + wl_display_roundtrip(display->display);
> +
> + if (!running)
> + return 1;
>
> redraw(window, NULL, 0);
>
>
More information about the wayland-devel
mailing list