egl: Remove window disconnect before calling driver eglDestroySurface
This was originally added for b/14445579. An in-development app was attempting to render to a window as an EGLSurface, then tear that down, change some window properties, and create a new EGLSurface. The second eglCreateWindowSurface failed because the window was already connected. This change went in, but it turned out the real problem was that the app still (unintentionally) had the surface current. After the app bug was fixed, nobody revisited whether this change was actually needed. Turns out it wasn't needed. After an EGLSurface is both destroyed *AND* not current (basically refcount==0), we were already disconnecting the window in ~egl_surface_t(). Apart from being unnecessary and redundant, disconnecting the window here is wrong for two reasons: (a) The surface may still be in use after eglDestroySurface, if it was still current. Rendering is undefined in that case, but disconnecting the window leads to more catastrophic results than necessary. (b) It's being called before calling the driver's eglDestroySurface. The driver will almost definitely have a buffer dequeued that it needs to cancel, and by disconnecting first we turn that into an error that they don't have a graceful way to deal with. Bug: 24524053 Change-Id: Ib063134413d25d3526f794aafb5e333e3417ea42
This commit is contained in:
parent
16b0ae105e
commit
312d7555cb
@ -595,15 +595,6 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
|
||||
return setError(EGL_BAD_SURFACE, EGL_FALSE);
|
||||
|
||||
egl_surface_t * const s = get_surface(surface);
|
||||
ANativeWindow* window = s->win.get();
|
||||
if (window) {
|
||||
int result = native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL);
|
||||
if (result != OK) {
|
||||
ALOGE("eglDestroySurface: native_window_api_disconnect (win=%p) "
|
||||
"failed (%#x)",
|
||||
window, result);
|
||||
}
|
||||
}
|
||||
EGLBoolean result = s->cnx->egl.eglDestroySurface(dp->disp.dpy, s->surface);
|
||||
if (result == EGL_TRUE) {
|
||||
_s.terminate();
|
||||
|
Loading…
Reference in New Issue
Block a user