mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 11:10:10 +01:00
egl/dri2: Consolidate eglTerminate
egl_dri2.c:dri2_terminate() handled terminating X11 and DRM displays. The Wayland platform implemented its own dri2_wl_terminate(), which was nearly a copy of the common one. To implement the EGL platform extensions, we either need to dispatch eglTerminate per display or define a common implementation for all platforms. This patch chooses consolidation. It removes dri2_wl_terminate() by folding it into the common dri2_terminate(). It was necessary to invert the `if (disp->PlatformDisplay == NULL)` and the switch statement because, unlike DRM and X11, Wayland's terminator performed action even when EGL didn't own the native display. In the inversion, I replaced `disp->PlatformDisplay == NULL` with `dri2_dpy->own_device` because the two expressions are synonymous, but the latter's meaning is clearer. Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
parent
31cd0fee31
commit
f506ef6784
2 changed files with 25 additions and 41 deletions
|
|
@ -25,6 +25,8 @@
|
|||
* Kristian Høgsberg <krh@bitplanet.net>
|
||||
*/
|
||||
|
||||
#define WL_HIDE_DEPRECATED
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -42,12 +44,13 @@
|
|||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "egl_dri2.h"
|
||||
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
#include "wayland-drm.h"
|
||||
#include "wayland-drm-client-protocol.h"
|
||||
#endif
|
||||
|
||||
#include "egl_dri2.h"
|
||||
|
||||
const __DRIuseInvalidateExtension use_invalidate = {
|
||||
{ __DRI_USE_INVALIDATE, 1 }
|
||||
};
|
||||
|
|
@ -672,23 +675,31 @@ dri2_terminate(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
dlclose(dri2_dpy->driver);
|
||||
free(dri2_dpy->device_name);
|
||||
|
||||
if (disp->PlatformDisplay == NULL) {
|
||||
switch (disp->Platform) {
|
||||
switch (disp->Platform) {
|
||||
#ifdef HAVE_X11_PLATFORM
|
||||
case _EGL_PLATFORM_X11:
|
||||
case _EGL_PLATFORM_X11:
|
||||
if (dri2_dpy->own_device) {
|
||||
xcb_disconnect(dri2_dpy->conn);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_DRM_PLATFORM
|
||||
case _EGL_PLATFORM_DRM:
|
||||
if (dri2_dpy->own_device) {
|
||||
gbm_device_destroy(&dri2_dpy->gbm_dri->base.base);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
case _EGL_PLATFORM_DRM:
|
||||
if (dri2_dpy->own_device) {
|
||||
gbm_device_destroy(&dri2_dpy->gbm_dri->base.base);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_WAYLAND_PLATFORM
|
||||
case _EGL_PLATFORM_WAYLAND:
|
||||
wl_drm_destroy(dri2_dpy->wl_drm);
|
||||
if (dri2_dpy->own_device) {
|
||||
wl_display_disconnect(dri2_dpy->wl_dpy);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
free(dri2_dpy);
|
||||
|
|
|
|||
|
|
@ -781,31 +781,6 @@ dri2_wl_authenticate(_EGLDisplay *disp, uint32_t id)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called via eglTerminate(), drv->API.Terminate().
|
||||
*/
|
||||
static EGLBoolean
|
||||
dri2_wl_terminate(_EGLDriver *drv, _EGLDisplay *disp)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
|
||||
_eglReleaseDisplayResources(drv, disp);
|
||||
_eglCleanupDisplay(disp);
|
||||
|
||||
dri2_dpy->core->destroyScreen(dri2_dpy->dri_screen);
|
||||
close(dri2_dpy->fd);
|
||||
dlclose(dri2_dpy->driver);
|
||||
free(dri2_dpy->driver_name);
|
||||
free(dri2_dpy->device_name);
|
||||
wl_drm_destroy(dri2_dpy->wl_drm);
|
||||
if (dri2_dpy->own_device)
|
||||
wl_display_disconnect(dri2_dpy->wl_dpy);
|
||||
free(dri2_dpy);
|
||||
disp->DriverData = NULL;
|
||||
|
||||
return EGL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
||||
{
|
||||
|
|
@ -986,8 +961,6 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
|
||||
loader_set_logger(_eglLog);
|
||||
|
||||
drv->API.Terminate = dri2_wl_terminate;
|
||||
|
||||
drv->API.CreateWaylandBufferFromImageWL =
|
||||
dri2_wl_create_wayland_buffer_from_image_wl;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue