Uhh, last minute rebase without compile re-testing, sorry. <facepalm>
On Thu, Mar 30, 2017 at 7:55 PM, Tomasz Figa <tf...@chromium.org> wrote: [snip] > diff --git a/src/egl/drivers/dri2/platform_android.c > b/src/egl/drivers/dri2/platform_android.c > index 6db4015cc9..571afa8004 100644 > --- a/src/egl/drivers/dri2/platform_android.c > +++ b/src/egl/drivers/dri2/platform_android.c [snip] > @@ -195,15 +224,36 @@ droid_window_dequeue_buffer(struct dri2_egl_surface > *dri2_surf) > * any value except -1) then the caller is responsible for closing the > * file descriptor. > */ > - if (fence_fd >= 0) { > + if (dri2_surf->acquire_fence_fd >= 0) { > /* From the SYNC_IOC_WAIT documentation in <linux/sync.h>: > * > * Waits indefinitely if timeout < 0. > */ > int timeout = -1; > - sync_wait(fence_fd, timeout); > - close(fence_fd); > + sync_wait(dri2_surf->acquire_fence_fd, timeout); > + close(dri2_surf->acquire_fence_fd); > + dri2_surf->acquire_fence_fd = -1; > } > +} > + > +static EGLBoolean > +droid_window_dequeue_buffer(struct dri2_egl_surface *dri2_surf) Should be: +droid_window_dequeue_buffer(_EGLDisplay *disp, struct dri2_egl_surface *dri2_surf) > +{ > + int err; > + > + /* To avoid blocking other EGL calls, release the display mutex before > + * we enter droid_window_enqueue_buffer() and re-acquire the mutex upon > + * return. > + */ > + mtx_unlock(&disp->Mutex); > + > + err = dri2_surf->window->dequeueBuffer(dri2_surf->window, > &dri2_surf->buffer, > + &dri2_surf->acquire_fence_fd); > + > + mtx_lock(&disp->Mutex); > + > + if (err) > + return EGL_FALSE; > > dri2_surf->buffer->common.incRef(&dri2_surf->buffer->common); > [snip] > @@ -336,6 +362,7 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay *disp, > EGLint type, > _eglError(EGL_BAD_ALLOC, "droid_create_surface"); > return NULL; > } > + dri2_surf->acquire_fence_fd = -1; > > if (!_eglInitSurface(&dri2_surf->base, disp, type, conf, attrib_list)) > goto cleanup_surface; > @@ -377,10 +404,18 @@ droid_create_surface(_EGLDriver *drv, _EGLDisplay > *disp, EGLint type, > if (window) { > window->common.incRef(&window->common); > dri2_surf->window = window; > + if (!droid_window_dequeue_buffer(dri2_surf)) { Should be: + if (!droid_window_dequeue_buffer(disp, dri2_surf)) { > + _eglError(EGL_BAD_SURFACE, "Could not dequeue buffer from native > window"); > + goto cleanup_window; > + } > } > > return &dri2_surf->base; > > +cleanup_window: > + window->common.decRef(&window->common); > + (*dri2_dpy->core->destroyDrawable)(dri2_surf->dri_drawable); > + > cleanup_surface: > free(dri2_surf); > [snip] > @@ -651,6 +664,12 @@ droid_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, > _EGLSurface *draw) > > dri2_dpy->flush->invalidate(dri2_surf->dri_drawable); > > + /* try to dequeue the next back buffer */ > + if (!droid_window_dequeue_buffer(dri2_surf)) { Should be: + if (!droid_window_dequeue_buffer(disp, dri2_surf)) { Sorry for the noise. Will resend correct patch anyway. Best regards, Tomasz _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev