[Mesa-dev] [PATCH 6/8] egl/wayland: Pull color buffers from dri2_surf->color_buffers pool
Ander Conselvan de Oliveira
conselvan2 at gmail.com
Thu Dec 20 08:56:13 PST 2012
2012/12/14 Kristian Høgsberg <krh at bitplanet.net>
> We used to keep the color buffers in the dri_buffers array and
> swap __DRI_BUFFER_BACK_LEFT and __DRI_BUFFER_FRONT_LEFT around there
> and swap third_buffer in in case we needed to triple buffer. That
> gets a little fidgety with all the swaps, so lets use the
> color_buffers pool like the gbm platform does. We track the color buffers,
> their corresponding wl_buffer and locked status here and just plug
> a free one into dri2_surf->buffers when we need to.
>
Doesn't this change the triple buffering behaviour? Before we would release
the dri_buffer once the third buffer wasn't necessary. With this patch, we
release the wl_buffer but keep the dri_buffer around.
Cheers,
Ander
This is a nice clean-up in itself, but it also sets us up to track
> buffer age in the color_buffers structs.
> ---
> src/egl/drivers/dri2/egl_dri2.h | 23 +-
> src/egl/drivers/dri2/platform_wayland.c | 367
> +++++++++++--------------------
> 2 files changed, 135 insertions(+), 255 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.h
> b/src/egl/drivers/dri2/egl_dri2.h
> index eb8c06e..84ea2a6 100644
> --- a/src/egl/drivers/dri2/egl_dri2.h
> +++ b/src/egl/drivers/dri2/egl_dri2.h
> @@ -172,28 +172,29 @@ struct dri2_egl_surface
>
> #ifdef HAVE_WAYLAND_PLATFORM
> struct wl_egl_window *wl_win;
> - struct wl_egl_pixmap *wl_pix;
> - struct wl_buffer *wl_drm_buffer[WL_BUFFER_COUNT];
> - int wl_buffer_lock[WL_BUFFER_COUNT];
> int dx;
> int dy;
> - __DRIbuffer *dri_buffers[__DRI_BUFFER_COUNT];
> - __DRIbuffer *third_buffer;
> - __DRIbuffer *pending_buffer;
> struct wl_callback *frame_callback;
> int format;
> #endif
>
> #ifdef HAVE_DRM_PLATFORM
> struct gbm_dri_surface *gbm_surf;
> +#endif
> +
> +#if defined(HAVE_WAYLAND_PLATFORM) || defined(HAVE_DRM_PLATFORM)
> + __DRIbuffer *dri_buffers[__DRI_BUFFER_COUNT];
> struct {
> +#ifdef HAVE_WAYLAND_PLATFORM
> + struct wl_buffer *wl_buffer;
> + __DRIbuffer *dri_buffer;
> +#endif
> +#ifdef HAVE_DRM_PLATFORM
> struct gbm_bo *bo;
> - int locked;
> - int age;
> - } color_buffers[3], *back, *current;
> -#ifndef HAVE_WAYLAND_PLATFORM
> - __DRIbuffer *dri_buffers[__DRI_BUFFER_COUNT];
> #endif
> + int locked;
> + int age;
> + } color_buffers[3], *back, *current;
> #endif
>
> #ifdef HAVE_ANDROID_PLATFORM
> diff --git a/src/egl/drivers/dri2/platform_wayland.c
> b/src/egl/drivers/dri2/platform_wayland.c
> index 260a80d..3c6bdd9 100644
> --- a/src/egl/drivers/dri2/platform_wayland.c
> +++ b/src/egl/drivers/dri2/platform_wayland.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright © 2011 Intel Corporation
> + * Copyright © 2011-2012 Intel Corporation
> *
> * Permission is hereby granted, free of charge, to any person obtaining a
> * copy of this software and associated documentation files (the
> "Software"),
> @@ -79,18 +79,16 @@ wl_buffer_release(void *data, struct wl_buffer *buffer)
> struct dri2_egl_surface *dri2_surf = data;
> int i;
>
> - for (i = 0; i < WL_BUFFER_COUNT; ++i)
> - if (dri2_surf->wl_drm_buffer[i] == buffer)
> + for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); ++i)
> + if (dri2_surf->color_buffers[i].wl_buffer == buffer)
> break;
>
> - assert(i <= WL_BUFFER_COUNT);
> -
> - /* not found? */
> - if (i == WL_BUFFER_COUNT)
> + if (i == ARRAY_SIZE(dri2_surf->color_buffers)) {
> + wl_buffer_destroy(buffer);
> return;
> + }
>
> - dri2_surf->wl_buffer_lock[i] = 0;
> -
> + dri2_surf->color_buffers[i].locked = 0;
> }
>
> static struct wl_buffer_listener wl_buffer_listener = {
> @@ -118,7 +116,6 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay
> *disp, EGLint type,
> struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> struct dri2_egl_config *dri2_conf = dri2_egl_config(conf);
> struct dri2_egl_surface *dri2_surf;
> - int i;
>
> (void) drv;
>
> @@ -128,21 +125,10 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay
> *disp, EGLint type,
> return NULL;
> }
>
> + memset(dri2_surf, 0, sizeof *dri2_surf);
> if (!_eglInitSurface(&dri2_surf->base, disp, type, conf, attrib_list))
> goto cleanup_surf;
>
> - for (i = 0; i < WL_BUFFER_COUNT; ++i) {
> - dri2_surf->wl_drm_buffer[i] = NULL;
> - dri2_surf->wl_buffer_lock[i] = 0;
> - }
> -
> - for (i = 0; i < __DRI_BUFFER_COUNT; ++i)
> - dri2_surf->dri_buffers[i] = NULL;
> -
> - dri2_surf->pending_buffer = NULL;
> - dri2_surf->third_buffer = NULL;
> - dri2_surf->frame_callback = NULL;
> -
> if (conf->AlphaSize == 0)
> dri2_surf->format = WL_DRM_FORMAT_XRGB8888;
> else
> @@ -212,24 +198,23 @@ dri2_destroy_surface(_EGLDriver *drv, _EGLDisplay
> *disp, _EGLSurface *surf)
>
> (*dri2_dpy->core->destroyDrawable)(dri2_surf->dri_drawable);
>
> - for (i = 0; i < WL_BUFFER_COUNT; ++i)
> - if (dri2_surf->wl_drm_buffer[i])
> - wl_buffer_destroy(dri2_surf->wl_drm_buffer[i]);
> + for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
> + if (dri2_surf->color_buffers[i].wl_buffer)
> + wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer);
> + if (dri2_surf->color_buffers[i].dri_buffer)
> + dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> +
> dri2_surf->color_buffers[i].dri_buffer);
> + }
>
> - for (i = 0; i < __DRI_BUFFER_COUNT; ++i)
> - if (dri2_surf->dri_buffers[i])
> + for (i = 0; i < __DRI_BUFFER_COUNT; i++)
> + if (dri2_surf->dri_buffers[i] &&
> + dri2_surf->dri_buffers[i]->attachment != __DRI_BUFFER_BACK_LEFT)
> dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> dri2_surf->dri_buffers[i]);
>
> - if (dri2_surf->third_buffer) {
> - dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> - dri2_surf->third_buffer);
> - }
> -
> if (dri2_surf->frame_callback)
> wl_callback_destroy(dri2_surf->frame_callback);
>
> -
> if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
> dri2_surf->wl_win->private = NULL;
> dri2_surf->wl_win->resize_callback = NULL;
> @@ -240,173 +225,90 @@ dri2_destroy_surface(_EGLDriver *drv, _EGLDisplay
> *disp, _EGLSurface *surf)
> return EGL_TRUE;
> }
>
> -static struct wl_buffer *
> -wayland_create_buffer(struct dri2_egl_surface *dri2_surf,
> - __DRIbuffer *buffer)
> -{
> - struct dri2_egl_display *dri2_dpy =
> - dri2_egl_display(dri2_surf->base.Resource.Display);
> - struct wl_buffer *buf;
> -
> - buf = wl_drm_create_buffer(dri2_dpy->wl_drm, buffer->name,
> - dri2_surf->base.Width,
> dri2_surf->base.Height,
> - buffer->pitch, dri2_surf->format);
> - wl_buffer_add_listener(buf, &wl_buffer_listener, dri2_surf);
> -
> - return buf;
> -}
> -
> static void
> -dri2_process_back_buffer(struct dri2_egl_surface *dri2_surf, unsigned
> format)
> +dri2_release_buffers(struct dri2_egl_surface *dri2_surf)
> {
> struct dri2_egl_display *dri2_dpy =
> dri2_egl_display(dri2_surf->base.Resource.Display);
> + int i;
>
> - (void) format;
> + for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
> + if (dri2_surf->color_buffers[i].wl_buffer &&
> + !dri2_surf->color_buffers[i].locked)
> + wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer);
> + if (dri2_surf->color_buffers[i].dri_buffer)
> + dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> +
> dri2_surf->color_buffers[i].dri_buffer);
>
> - switch (dri2_surf->base.Type) {
> - case EGL_WINDOW_BIT:
> - /* allocate a front buffer for our double-buffered window*/
> - if (dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT] != NULL)
> - break;
> - dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT] =
> - dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen,
> - __DRI_BUFFER_FRONT_LEFT, format,
> - dri2_surf->base.Width, dri2_surf->base.Height);
> - break;
> - default:
> - break;
> + dri2_surf->color_buffers[i].wl_buffer = NULL;
> + dri2_surf->color_buffers[i].dri_buffer = NULL;
> + dri2_surf->color_buffers[i].locked = 0;
> }
> -}
> -
> -static void
> -dri2_release_pending_buffer(void *data,
> - struct wl_callback *callback, uint32_t time)
> -{
> - struct dri2_egl_surface *dri2_surf = data;
> - struct dri2_egl_display *dri2_dpy =
> - dri2_egl_display(dri2_surf->base.Resource.Display);
> -
> - /* FIXME: print internal error */
> - if (!dri2_surf->pending_buffer)
> - return;
> -
> - dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> - dri2_surf->pending_buffer);
> - dri2_surf->pending_buffer = NULL;
>
> - wl_callback_destroy(callback);
> + for (i = 0; i < __DRI_BUFFER_COUNT; i++)
> + if (dri2_surf->dri_buffers[i] &&
> + dri2_surf->dri_buffers[i]->attachment != __DRI_BUFFER_BACK_LEFT)
> + dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> + dri2_surf->dri_buffers[i]);
> }
>
> -static const struct wl_callback_listener release_buffer_listener = {
> - dri2_release_pending_buffer
> -};
> -
> -static void
> -dri2_release_buffers(struct dri2_egl_surface *dri2_surf)
> +static int
> +get_back_bo(struct dri2_egl_surface *dri2_surf, __DRIbuffer *buffer)
> {
> struct dri2_egl_display *dri2_dpy =
> dri2_egl_display(dri2_surf->base.Resource.Display);
> - struct wl_callback *callback;
> int i;
>
> - if (dri2_surf->third_buffer) {
> - dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> - dri2_surf->third_buffer);
> - dri2_surf->third_buffer = NULL;
> - }
> + /* There might be a buffer release already queued that wasn't
> processed */
> + wl_display_dispatch_queue_pending(dri2_dpy->wl_dpy,
> dri2_dpy->wl_queue);
>
> - for (i = 0; i < __DRI_BUFFER_COUNT; ++i) {
> - if (dri2_surf->dri_buffers[i]) {
> - switch (i) {
> - case __DRI_BUFFER_FRONT_LEFT:
> - if (dri2_surf->pending_buffer)
> - roundtrip(dri2_dpy);
> - dri2_surf->pending_buffer = dri2_surf->dri_buffers[i];
> - callback = wl_display_sync(dri2_dpy->wl_dpy);
> - wl_callback_add_listener(callback,
> - &release_buffer_listener, dri2_surf);
> - wl_proxy_set_queue((struct wl_proxy *) callback,
> - dri2_dpy->wl_queue);
> - break;
> - default:
> - dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> - dri2_surf->dri_buffers[i]);
> - break;
> - }
> - dri2_surf->dri_buffers[i] = NULL;
> + if (dri2_surf->back == NULL) {
> + for (i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
> + if (!dri2_surf->color_buffers[i].locked) {
> + dri2_surf->back = &dri2_surf->color_buffers[i];
> + break;
> + }
> }
> }
> -}
>
> -static inline void
> -pointer_swap(const void **p1, const void **p2)
> -{
> - const void *tmp = *p1;
> - *p1 = *p2;
> - *p2 = tmp;
> -}
> -
> -static void
> -destroy_third_buffer(struct dri2_egl_surface *dri2_surf)
> -{
> - struct dri2_egl_display *dri2_dpy =
> - dri2_egl_display(dri2_surf->base.Resource.Display);
> -
> - if (dri2_surf->third_buffer == NULL)
> - return;
> -
> - dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
> - dri2_surf->third_buffer);
> - dri2_surf->third_buffer = NULL;
> -
> - if (dri2_surf->wl_drm_buffer[WL_BUFFER_THIRD])
> - wl_buffer_destroy(dri2_surf->wl_drm_buffer[WL_BUFFER_THIRD]);
> - dri2_surf->wl_drm_buffer[WL_BUFFER_THIRD] = NULL;
> - dri2_surf->wl_buffer_lock[WL_BUFFER_THIRD] = 0;
> -}
> + if (dri2_surf->back == NULL)
> + return -1;
> + if (dri2_surf->back->dri_buffer == NULL) {
> + dri2_surf->back->dri_buffer =
> + dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen,
> + __DRI_BUFFER_BACK_LEFT, 32,
> + dri2_surf->base.Width,
> + dri2_surf->base.Height);
> + }
> + if (dri2_surf->back->dri_buffer == NULL)
> + return -1;
>
> -static void
> -swap_wl_buffers(struct dri2_egl_surface *dri2_surf,
> - enum wayland_buffer_type a, enum wayland_buffer_type b)
> -{
> - int tmp;
> + memcpy(buffer, dri2_surf->back->dri_buffer, sizeof *buffer);
>
> - tmp = dri2_surf->wl_buffer_lock[a];
> - dri2_surf->wl_buffer_lock[a] = dri2_surf->wl_buffer_lock[b];
> - dri2_surf->wl_buffer_lock[b] = tmp;
> -
> - pointer_swap((const void **) &dri2_surf->wl_drm_buffer[a],
> - (const void **) &dri2_surf->wl_drm_buffer[b]);
> + return 0;
> }
>
> -static void
> -swap_back_and_third(struct dri2_egl_surface *dri2_surf)
> +static int
> +get_aux_bo(struct dri2_egl_surface *dri2_surf,
> + unsigned int attachment, unsigned int format, __DRIbuffer
> *buffer)
> {
> - if (dri2_surf->wl_buffer_lock[WL_BUFFER_THIRD])
> - destroy_third_buffer(dri2_surf);
> -
> - pointer_swap((const void **)
> &dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT],
> - (const void **) &dri2_surf->third_buffer);
> -
> - swap_wl_buffers(dri2_surf, WL_BUFFER_BACK, WL_BUFFER_THIRD);
> -}
> + struct dri2_egl_display *dri2_dpy =
> + dri2_egl_display(dri2_surf->base.Resource.Display);
> + __DRIbuffer *b = dri2_surf->dri_buffers[attachment];
> +
> + if (b == NULL) {
> + b = dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen,
> + attachment, format,
> + dri2_surf->base.Width,
> + dri2_surf->base.Height);
> + dri2_surf->dri_buffers[attachment] = b;
> + }
> + if (b == NULL)
> + return -1;
>
> -static void
> -dri2_prior_buffer_creation(struct dri2_egl_surface *dri2_surf,
> - unsigned int type)
> -{
> - switch (type) {
> - case __DRI_BUFFER_BACK_LEFT:
> - if (dri2_surf->wl_buffer_lock[WL_BUFFER_BACK])
> - swap_back_and_third(dri2_surf);
> - else if (dri2_surf->third_buffer)
> - destroy_third_buffer(dri2_surf);
> - break;
> - default:
> - break;
> + memcpy(buffer, b, sizeof *buffer);
>
> - }
> + return 0;
> }
>
> static __DRIbuffer *
> @@ -418,10 +320,7 @@ dri2_get_buffers_with_format(__DRIdrawable *
> driDrawable,
> struct dri2_egl_surface *dri2_surf = loaderPrivate;
> struct dri2_egl_display *dri2_dpy =
> dri2_egl_display(dri2_surf->base.Resource.Display);
> - int i;
> -
> - /* There might be a buffer release already queued that wasn't
> processed */
> - wl_display_dispatch_queue_pending(dri2_dpy->wl_dpy,
> dri2_dpy->wl_queue);
> + int i, j;
>
> if (dri2_surf->base.Type == EGL_WINDOW_BIT &&
> (dri2_surf->base.Width != dri2_surf->wl_win->width ||
> @@ -433,47 +332,28 @@ dri2_get_buffers_with_format(__DRIdrawable *
> driDrawable,
> dri2_surf->base.Height = dri2_surf->wl_win->height;
> dri2_surf->dx = dri2_surf->wl_win->dx;
> dri2_surf->dy = dri2_surf->wl_win->dy;
> -
> - for (i = 0; i < WL_BUFFER_COUNT; ++i) {
> - if (dri2_surf->wl_drm_buffer[i])
> - wl_buffer_destroy(dri2_surf->wl_drm_buffer[i]);
> - dri2_surf->wl_drm_buffer[i] = NULL;
> - dri2_surf->wl_buffer_lock[i] = 0;
> - }
> }
>
> - dri2_surf->buffer_count = 0;
> - for (i = 0; i < 2*count; i+=2) {
> - assert(attachments[i] < __DRI_BUFFER_COUNT);
> - assert(dri2_surf->buffer_count < 5);
> -
> - dri2_prior_buffer_creation(dri2_surf, attachments[i]);
> -
> - if (dri2_surf->dri_buffers[attachments[i]] == NULL) {
> -
> - dri2_surf->dri_buffers[attachments[i]] =
> - dri2_dpy->dri2->allocateBuffer(dri2_dpy->dri_screen,
> - attachments[i], attachments[i+1],
> - dri2_surf->base.Width, dri2_surf->base.Height);
> -
> - if (!dri2_surf->dri_buffers[attachments[i]])
> - continue;
> -
> - if (attachments[i] == __DRI_BUFFER_BACK_LEFT)
> - dri2_process_back_buffer(dri2_surf, attachments[i+1]);
> + for (i = 0, j = 0; i < 2 * count; i += 2, j++) {
> + switch (attachments[i]) {
> + case __DRI_BUFFER_BACK_LEFT:
> + if (get_back_bo(dri2_surf, &dri2_surf->buffers[j]) < 0) {
> + _eglError(EGL_BAD_ALLOC, "failed to allocate color buffer");
> + return NULL;
> + }
> + break;
> + default:
> + if (get_aux_bo(dri2_surf, attachments[i], attachments[i + 1],
> + &dri2_surf->buffers[j]) < 0) {
> + _eglError(EGL_BAD_ALLOC, "failed to allocate aux buffer");
> + return NULL;
> + }
> + break;
> }
> -
> - memcpy(&dri2_surf->buffers[dri2_surf->buffer_count],
> - dri2_surf->dri_buffers[attachments[i]],
> - sizeof(__DRIbuffer));
> -
> - dri2_surf->buffer_count++;
> }
>
> - assert(dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
> -
> - *out_count = dri2_surf->buffer_count;
> - if (dri2_surf->buffer_count == 0)
> + *out_count = j;
> + if (j == 0)
> return NULL;
>
> *width = dri2_surf->base.Width;
> @@ -542,7 +422,7 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp,
> _EGLSurface *draw)
> struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
> struct dri2_egl_driver *dri2_drv = dri2_egl_driver(drv);
> - int ret = 0;
> + int i, ret = 0;
>
> while (dri2_surf->frame_callback && ret != -1)
> ret = wl_display_dispatch_queue(dri2_dpy->wl_dpy,
> dri2_dpy->wl_queue);
> @@ -555,39 +435,39 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay
> *disp, _EGLSurface *draw)
> wl_proxy_set_queue((struct wl_proxy *) dri2_surf->frame_callback,
> dri2_dpy->wl_queue);
>
> - if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
> - pointer_swap(
> - (const void **)
> &dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT],
> - (const void **)
> &dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]);
> -
> - dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT]->attachment =
> - __DRI_BUFFER_FRONT_LEFT;
> - dri2_surf->dri_buffers[__DRI_BUFFER_BACK_LEFT]->attachment =
> - __DRI_BUFFER_BACK_LEFT;
> -
> - swap_wl_buffers(dri2_surf, WL_BUFFER_FRONT, WL_BUFFER_BACK);
> + if (dri2_surf->back->wl_buffer == NULL) {
> + dri2_surf->back->wl_buffer =
> + wl_drm_create_buffer(dri2_dpy->wl_drm,
> + dri2_surf->back->dri_buffer->name,
> + dri2_surf->base.Width,
> + dri2_surf->base.Height,
> + dri2_surf->back->dri_buffer->pitch,
> + dri2_surf->format);
> + wl_proxy_set_queue((struct wl_proxy *) dri2_surf->back->wl_buffer,
> + dri2_dpy->wl_queue);
> + wl_buffer_add_listener(dri2_surf->back->wl_buffer,
> + &wl_buffer_listener, dri2_surf);
> + }
>
> - if (!dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT])
> - dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT] =
> - wayland_create_buffer(dri2_surf,
> - dri2_surf->dri_buffers[__DRI_BUFFER_FRONT_LEFT]);
> + dri2_surf->back->locked = 1;
> + dri2_surf->current = dri2_surf->back;
> + dri2_surf->current->age = 1;
> + dri2_surf->back = NULL;
>
> - wl_surface_attach(dri2_surf->wl_win->surface,
> - dri2_surf->wl_drm_buffer[WL_BUFFER_FRONT],
> - dri2_surf->dx, dri2_surf->dy);
> - dri2_surf->wl_buffer_lock[WL_BUFFER_FRONT] = 1;
> + wl_surface_attach(dri2_surf->wl_win->surface,
> + dri2_surf->current->wl_buffer,
> + dri2_surf->dx, dri2_surf->dy);
>
> - dri2_surf->wl_win->attached_width = dri2_surf->base.Width;
> - dri2_surf->wl_win->attached_height = dri2_surf->base.Height;
> - /* reset resize growing parameters */
> - dri2_surf->dx = 0;
> - dri2_surf->dy = 0;
> + dri2_surf->wl_win->attached_width = dri2_surf->base.Width;
> + dri2_surf->wl_win->attached_height = dri2_surf->base.Height;
> + /* reset resize growing parameters */
> + dri2_surf->dx = 0;
> + dri2_surf->dy = 0;
>
> - wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
> - dri2_surf->base.Width, dri2_surf->base.Height);
> + wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
> + dri2_surf->base.Width, dri2_surf->base.Height);
>
> - wl_surface_commit(dri2_surf->wl_win->surface);
> - }
> + wl_surface_commit(dri2_surf->wl_win->surface);
>
> _EGLContext *ctx;
> if (dri2_drv->glFlush) {
> @@ -595,7 +475,6 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp,
> _EGLSurface *draw)
> if (ctx && ctx->DrawSurface == &dri2_surf->base)
> dri2_drv->glFlush();
> }
> -
> (*dri2_dpy->flush->flush)(dri2_surf->dri_drawable);
> (*dri2_dpy->flush->invalidate)(dri2_surf->dri_drawable);
>
> --
> 1.7.10.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20121220/98f26f75/attachment-0001.html>
More information about the mesa-dev
mailing list