X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fegl%2Fmain%2Fegldisplay.c;h=ac05f6f9fff14805519678f9ea8044c4915ccdb8;hb=485f8f89f9027546df169b7b141d5f4dccb1a85e;hp=05720015c245c6410e4ad6eff57bff6daabf4009;hpb=6775a524004ba15ab281c1391fb24cbf621fe859;p=mesa.git diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c index 05720015c24..ac05f6f9fff 100644 --- a/src/egl/main/egldisplay.c +++ b/src/egl/main/egldisplay.c @@ -39,6 +39,7 @@ #include #include "c11/threads.h" #include "util/macros.h" +#include "util/os_file.h" #include "util/u_atomic.h" #include "eglcontext.h" @@ -105,6 +106,9 @@ _eglGetNativePlatformFromEnv(void) } } + if (plat == _EGL_INVALID_PLATFORM) + _eglLog(_EGL_WARNING, "invalid EGL_PLATFORM given"); + return plat; } @@ -135,15 +139,6 @@ _eglNativePlatformDetectNativeDisplay(void *nativeDisplay) if (first_pointer == gbm_create_device) return _EGL_PLATFORM_DRM; #endif - -#ifdef HAVE_X11_PLATFORM - /* If not matched to any other platform, fallback to x11. */ - return _EGL_PLATFORM_X11; -#endif - -#ifdef HAVE_HAIKU_PLATFORM - return _EGL_PLATFORM_HAIKU; -#endif } return _EGL_INVALID_PLATFORM; @@ -156,33 +151,23 @@ _eglNativePlatformDetectNativeDisplay(void *nativeDisplay) _EGLPlatformType _eglGetNativePlatform(void *nativeDisplay) { - static _EGLPlatformType native_platform = _EGL_INVALID_PLATFORM; - _EGLPlatformType detected_platform = native_platform; + _EGLPlatformType detected_platform = _eglGetNativePlatformFromEnv(); + const char *detection_method = "environment"; if (detected_platform == _EGL_INVALID_PLATFORM) { - const char *detection_method; - - detected_platform = _eglGetNativePlatformFromEnv(); - detection_method = "environment overwrite"; - - if (detected_platform == _EGL_INVALID_PLATFORM) { - detected_platform = _eglNativePlatformDetectNativeDisplay(nativeDisplay); - detection_method = "autodetected"; - } - - if (detected_platform == _EGL_INVALID_PLATFORM) { - detected_platform = _EGL_NATIVE_PLATFORM; - detection_method = "build-time configuration"; - } - - _eglLog(_EGL_DEBUG, "Native platform type: %s (%s)", - egl_platforms[detected_platform].name, detection_method); + detected_platform = _eglNativePlatformDetectNativeDisplay(nativeDisplay); + detection_method = "autodetected"; + } - p_atomic_cmpxchg(&native_platform, _EGL_INVALID_PLATFORM, - detected_platform); + if (detected_platform == _EGL_INVALID_PLATFORM) { + detected_platform = _EGL_NATIVE_PLATFORM; + detection_method = "build-time configuration"; } - return native_platform; + _eglLog(_EGL_DEBUG, "Native platform type: %s (%s)", + egl_platforms[detected_platform].name, detection_method); + + return detected_platform; } @@ -308,9 +293,10 @@ out: * Destroy the contexts and surfaces that are linked to the display. */ void -_eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *display) +_eglReleaseDisplayResources(_EGLDisplay *display) { _EGLResource *list; + const _EGLDriver *drv = display->Driver; list = display->ResourceLists[_EGL_RESOURCE_CONTEXT]; while (list) { @@ -318,7 +304,7 @@ _eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *display) list = list->Next; _eglUnlinkContext(ctx); - drv->API.DestroyContext(drv, display, ctx); + drv->DestroyContext(drv, display, ctx); } assert(!display->ResourceLists[_EGL_RESOURCE_CONTEXT]); @@ -328,7 +314,7 @@ _eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *display) list = list->Next; _eglUnlinkSurface(surf); - drv->API.DestroySurface(drv, display, surf); + drv->DestroySurface(drv, display, surf); } assert(!display->ResourceLists[_EGL_RESOURCE_SURFACE]); @@ -338,7 +324,7 @@ _eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *display) list = list->Next; _eglUnlinkImage(image); - drv->API.DestroyImageKHR(drv, display, image); + drv->DestroyImageKHR(drv, display, image); } assert(!display->ResourceLists[_EGL_RESOURCE_IMAGE]); @@ -348,7 +334,7 @@ _eglReleaseDisplayResources(_EGLDriver *drv, _EGLDisplay *display) list = list->Next; _eglUnlinkSync(sync); - drv->API.DestroySyncKHR(drv, display, sync); + drv->DestroySyncKHR(drv, display, sync); } assert(!display->ResourceLists[_EGL_RESOURCE_SYNC]); } @@ -549,7 +535,6 @@ _eglGetWaylandDisplay(struct wl_display *native_display, } #endif /* HAVE_WAYLAND_PLATFORM */ -#ifdef HAVE_SURFACELESS_PLATFORM _EGLDisplay* _eglGetSurfacelessDisplay(void *native_display, const EGLAttrib *attrib_list) @@ -569,7 +554,6 @@ _eglGetSurfacelessDisplay(void *native_display, return _eglFindDisplay(_EGL_PLATFORM_SURFACELESS, native_display, attrib_list); } -#endif /* HAVE_SURFACELESS_PLATFORM */ #ifdef HAVE_ANDROID_PLATFORM _EGLDisplay* @@ -634,7 +618,7 @@ _eglGetDeviceDisplay(void *native_display, * The new fd is guaranteed to be 3 or greater. */ if (fd != -1 && display->Options.fd == 0) { - display->Options.fd = fcntl(fd, F_DUPFD_CLOEXEC, 3); + display->Options.fd = os_dupfd_cloexec(fd); if (display->Options.fd == -1) { /* Do not (really) need to teardown the display */ _eglError(EGL_BAD_ALLOC, "eglGetPlatformDisplay");