From 04826cd9fc83365e99db3a491254a8d5a6eaac63 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Tue, 20 Sep 2022 14:55:37 -0400 Subject: [PATCH] egl: Factor some common terminate cleanup up to common code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's a little difficult to see from the diff, but this is effectively the same calling sequence as before, and more importantly it means the backend only cleans up backend state rather than needing to call up to the core. Reviewed-by: Marek Olšák Part-of: --- src/egl/drivers/dri2/egl_dri2.c | 4 ---- src/egl/drivers/wgl/egl_wgl.c | 4 ---- src/egl/main/eglapi.c | 9 ++------- src/egl/main/egldisplay.c | 8 +++++++- 4 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 13d957580f0..356548e11dc 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1225,7 +1225,6 @@ dri2_display_release(_EGLDisplay *disp) if (!p_atomic_dec_zero(&dri2_dpy->ref_count)) return; - _eglCleanupDisplay(disp); dri2_display_destroy(disp); } @@ -1327,9 +1326,6 @@ dri2_egl_surface_free_local_buffers(struct dri2_egl_surface *dri2_surf) static EGLBoolean dri2_terminate(_EGLDisplay *disp) { - /* Release all non-current Context/Surfaces. */ - _eglReleaseDisplayResources(disp); - dri2_display_release(disp); return EGL_TRUE; diff --git a/src/egl/drivers/wgl/egl_wgl.c b/src/egl/drivers/wgl/egl_wgl.c index 9165ae5646f..f069b450df7 100644 --- a/src/egl/drivers/wgl/egl_wgl.c +++ b/src/egl/drivers/wgl/egl_wgl.c @@ -357,7 +357,6 @@ wgl_display_release(_EGLDisplay *disp) if (!p_atomic_dec_zero(&wgl_dpy->ref_count)) return; - _eglCleanupDisplay(disp); wgl_display_destroy(disp); } @@ -370,9 +369,6 @@ wgl_display_release(_EGLDisplay *disp) static EGLBoolean wgl_terminate(_EGLDisplay *disp) { - /* Release all non-current Context/Surfaces. */ - _eglReleaseDisplayResources(disp); - wgl_display_release(disp); return EGL_TRUE; diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index f9d32b92dbd..57df75cd725 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -779,14 +779,9 @@ eglTerminate(EGLDisplay dpy) RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE); if (disp->Initialized) { + _eglReleaseDisplayResources(disp); disp->Driver->Terminate(disp); - /* do not reset disp->Driver */ - disp->ClientAPIsString[0] = 0; - disp->Initialized = EGL_FALSE; - - /* Reset blob cache funcs on terminate. */ - disp->BlobCacheSet = NULL; - disp->BlobCacheGet = NULL; + _eglCleanupDisplay(disp); } simple_mtx_unlock(&disp->Mutex); diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index 39850e34f7c..52a91027292 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -370,7 +370,13 @@ _eglCleanupDisplay(_EGLDisplay *disp) disp->Configs = NULL; } - /* XXX incomplete */ + /* do not reset disp->Driver */ + disp->ClientAPIsString[0] = 0; + disp->Initialized = EGL_FALSE; + + /* Reset blob cache funcs on terminate. */ + disp->BlobCacheSet = NULL; + disp->BlobCacheGet = NULL; }