#include <fcntl.h>
#include "c11/threads.h"
#include "util/macros.h"
+#include "util/os_file.h"
#include "util/u_atomic.h"
#include "eglcontext.h"
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;
_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;
}
list = list->Next;
_eglUnlinkContext(ctx);
- drv->API.DestroyContext(drv, display, ctx);
+ drv->DestroyContext(drv, display, ctx);
}
assert(!display->ResourceLists[_EGL_RESOURCE_CONTEXT]);
list = list->Next;
_eglUnlinkSurface(surf);
- drv->API.DestroySurface(drv, display, surf);
+ drv->DestroySurface(drv, display, surf);
}
assert(!display->ResourceLists[_EGL_RESOURCE_SURFACE]);
list = list->Next;
_eglUnlinkImage(image);
- drv->API.DestroyImageKHR(drv, display, image);
+ drv->DestroyImageKHR(drv, display, image);
}
assert(!display->ResourceLists[_EGL_RESOURCE_IMAGE]);
list = list->Next;
_eglUnlinkSync(sync);
- drv->API.DestroySyncKHR(drv, display, sync);
+ drv->DestroySyncKHR(drv, display, sync);
}
assert(!display->ResourceLists[_EGL_RESOURCE_SYNC]);
}
}
#endif /* HAVE_WAYLAND_PLATFORM */
-#ifdef HAVE_SURFACELESS_PLATFORM
_EGLDisplay*
_eglGetSurfacelessDisplay(void *native_display,
const EGLAttrib *attrib_list)
return _eglFindDisplay(_EGL_PLATFORM_SURFACELESS, native_display,
attrib_list);
}
-#endif /* HAVE_SURFACELESS_PLATFORM */
#ifdef HAVE_ANDROID_PLATFORM
_EGLDisplay*
* 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");