On Sat, 2018-09-01 at 02:14 +0300, Andres Gomez wrote: > Juan, should we also include this in the stable queues ? >
Unless Daniel has a different opinion, yes, it should be included. Forgot to CC to stable. Thanks! J.A. > > On Thu, 2018-08-30 at 13:59 +0200, Juan A. Suarez Romero wrote: > > If color buffer is locked, do not set its wayland buffer to NULL; > > otherwise it can not be freed later. > > > > Rather, flag it in order to destroy it later on the release event. > > > > v2: instruct release event to unlock only or free wl_buffer too (Daniel) > > > > This also fixes dEQP-EGL.functional.swap_buffers_with_damage.* tests. > > > > CC: Daniel Stone <dan...@fooishbar.org> > > --- > > src/egl/drivers/dri2/egl_dri2.h | 1 + > > src/egl/drivers/dri2/platform_wayland.c | 22 +++++++++++++++------- > > 2 files changed, 16 insertions(+), 7 deletions(-) > > > > diff --git a/src/egl/drivers/dri2/egl_dri2.h > > b/src/egl/drivers/dri2/egl_dri2.h > > index d1e4e8dcf22..349f66a3506 100644 > > --- a/src/egl/drivers/dri2/egl_dri2.h > > +++ b/src/egl/drivers/dri2/egl_dri2.h > > @@ -297,6 +297,7 @@ struct dri2_egl_surface > > struct { > > #ifdef HAVE_WAYLAND_PLATFORM > > struct wl_buffer *wl_buffer; > > + bool wl_release; > > __DRIimage *dri_image; > > /* for is_different_gpu case. NULL else */ > > __DRIimage *linear_copy; > > diff --git a/src/egl/drivers/dri2/platform_wayland.c > > b/src/egl/drivers/dri2/platform_wayland.c > > index 11c57de0f89..03a3e0993b0 100644 > > --- a/src/egl/drivers/dri2/platform_wayland.c > > +++ b/src/egl/drivers/dri2/platform_wayland.c > > @@ -182,9 +182,12 @@ wl_buffer_release(void *data, struct wl_buffer *buffer) > > if (dri2_surf->color_buffers[i].wl_buffer == buffer) > > break; > > > > - if (i == ARRAY_SIZE(dri2_surf->color_buffers)) { > > + assert (i < ARRAY_SIZE(dri2_surf->color_buffers)); > > + > > + if (dri2_surf->color_buffers[i].wl_release) { > > wl_buffer_destroy(buffer); > > - return; > > + dri2_surf->color_buffers[i].wl_release = false; > > + dri2_surf->color_buffers[i].wl_buffer = NULL; > > } > > > > dri2_surf->color_buffers[i].locked = false; > > @@ -425,9 +428,14 @@ dri2_wl_release_buffers(struct dri2_egl_surface > > *dri2_surf) > > dri2_egl_display(dri2_surf->base.Resource.Display); > > > > for (int 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].wl_buffer) { > > + if (dri2_surf->color_buffers[i].locked) { > > + dri2_surf->color_buffers[i].wl_release = true; > > + } else { > > + wl_buffer_destroy(dri2_surf->color_buffers[i].wl_buffer); > > + dri2_surf->color_buffers[i].wl_buffer = NULL; > > + } > > + } > > if (dri2_surf->color_buffers[i].dri_image) > > > > dri2_dpy->image->destroyImage(dri2_surf->color_buffers[i].dri_image); > > if (dri2_surf->color_buffers[i].linear_copy) > > @@ -436,11 +444,9 @@ dri2_wl_release_buffers(struct dri2_egl_surface > > *dri2_surf) > > munmap(dri2_surf->color_buffers[i].data, > > dri2_surf->color_buffers[i].data_size); > > > > - dri2_surf->color_buffers[i].wl_buffer = NULL; > > dri2_surf->color_buffers[i].dri_image = NULL; > > dri2_surf->color_buffers[i].linear_copy = NULL; > > dri2_surf->color_buffers[i].data = NULL; > > - dri2_surf->color_buffers[i].locked = false; > > } > > > > if (dri2_dpy->dri2) > > @@ -968,6 +974,8 @@ dri2_wl_swap_buffers_with_damage(_EGLDriver *drv, > > dri2_surf->current->wl_buffer = > > create_wl_buffer(dri2_dpy, dri2_surf, image); > > > > + dri2_surf->current->wl_release = false; > > + > > wl_buffer_add_listener(dri2_surf->current->wl_buffer, > > &wl_buffer_listener, dri2_surf); > > } _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev