[Mesa-dev] [PATCH v2 1/9] egl: add a treatment of tizen platform on egl display

Gwan-gyeong Mun elongbug at gmail.com
Sun Sep 17 18:00:59 UTC 2017


It adds a _EGL_PLATFORM_TIZEN enum value to _EGLPlatformType for tizen platform.

It adds a detecting routine of tizen platform to _eglNativePlatformDetectNativeDisplay()
and _eglGetNativePlatform().
  - As tizen platform internally distinguishes native displays of drm/gbm and wayland
    client, when EGL_PLATFORM_WAYLAND_EXT or EGL_PLATFORM_GBM_MESA come from
    eglGetPlatformDisplayEXT(), it have call _eglGetTizenDisplay().
  - If tizen platform is enabled at the configuration, _eglGetNativePlatform()
    always detects _EGL_PLATFORM_TIZEN as a detected_platform.

Signed-off-by: Mun Gwan-gyeong <elongbug at gmail.com>
---
 src/egl/main/eglapi.c     | 12 ++++++++++++
 src/egl/main/egldisplay.c | 30 ++++++++++++++++++++++++++++++
 src/egl/main/egldisplay.h |  7 +++++++
 3 files changed, 49 insertions(+)

diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index e3f10fcbe2..12e867ca72 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -404,6 +404,18 @@ _eglGetPlatformDisplayCommon(EGLenum platform, void *native_display,
       dpy = _eglGetSurfacelessDisplay(native_display, attrib_list);
       break;
 #endif
+#ifdef HAVE_TIZEN_PLATFORM
+#ifndef HAVE_DRM_PLATFORM
+    case EGL_PLATFORM_GBM_MESA:
+       dpy = _eglGetTizenDisplay(native_display, attrib_list);
+       break;
+#endif /* not HAVE_DRM_PLATFORM */
+#ifndef HAVE_WAYLAND_PLATFORM
+    case EGL_PLATFORM_WAYLAND_EXT:
+       dpy = _eglGetTizenDisplay(native_display, attrib_list);
+       break;
+#endif /* not HAVE_WAYLAND_PLATFORM */
+#endif /* HAVE_TIZEN_PLATFORM */
    default:
       RETURN_EGL_ERROR(NULL, EGL_BAD_PARAMETER, NULL);
    }
diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
index 690728d2f7..b55d243015 100644
--- a/src/egl/main/egldisplay.c
+++ b/src/egl/main/egldisplay.c
@@ -70,6 +70,7 @@ static const struct {
    { _EGL_PLATFORM_ANDROID, "android" },
    { _EGL_PLATFORM_HAIKU, "haiku" },
    { _EGL_PLATFORM_SURFACELESS, "surfaceless" },
+   { _EGL_PLATFORM_TIZEN, "tizen" },
 };
 
 
@@ -115,6 +116,13 @@ _eglNativePlatformDetectNativeDisplay(void *nativeDisplay)
 
       (void) first_pointer; /* silence unused var warning */
 
+#ifdef HAVE_TIZEN_PLATFORM
+      /* In Tizen Platform, _EGL_PLATFORM_TIZEN treats together DRM(gbm) platform
+       * and wayland egl platform.
+       */
+      return _EGL_PLATFORM_TIZEN;
+#endif
+
 #ifdef HAVE_WAYLAND_PLATFORM
       /* wl_display is a wl_proxy, which is a wl_object.
        * wl_object's first element points to the interfacetype. */
@@ -157,6 +165,13 @@ _eglGetNativePlatform(void *nativeDisplay)
       detected_platform = _eglGetNativePlatformFromEnv();
       detection_method = "environment overwrite";
 
+#ifdef HAVE_TIZEN_PLATFORM
+      if (detected_platform != _EGL_PLATFORM_TIZEN) {
+         detected_platform = _EGL_PLATFORM_TIZEN;
+         detection_method = "build-time configuration";
+      }
+#endif
+
       if (detected_platform == _EGL_INVALID_PLATFORM) {
          detected_platform = _eglNativePlatformDetectNativeDisplay(nativeDisplay);
          detection_method = "autodetected";
@@ -541,3 +556,18 @@ _eglGetSurfacelessDisplay(void *native_display,
    return _eglFindDisplay(_EGL_PLATFORM_SURFACELESS, native_display);
 }
 #endif /* HAVE_SURFACELESS_PLATFORM */
+
+#ifdef HAVE_TIZEN_PLATFORM
+_EGLDisplay*
+_eglGetTizenDisplay(void *native_display,
+                    const EGLint *attrib_list)
+{
+   /* EGL_EXT_platform_wayland recognizes no attributes. */
+   if (attrib_list != NULL && attrib_list[0] != EGL_NONE) {
+      _eglError(EGL_BAD_ATTRIBUTE, "eglGetPlatformDisplay");
+      return NULL;
+   }
+
+   return _eglFindDisplay(_EGL_PLATFORM_TIZEN, native_display);
+}
+#endif /* HAVE_TIZEN_PLATFORM */
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index 9a0b9b672a..c009462b82 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -50,6 +50,7 @@ enum _egl_platform_type {
    _EGL_PLATFORM_ANDROID,
    _EGL_PLATFORM_HAIKU,
    _EGL_PLATFORM_SURFACELESS,
+   _EGL_PLATFORM_TIZEN,
 
    _EGL_NUM_PLATFORMS,
    _EGL_INVALID_PLATFORM = -1
@@ -285,6 +286,12 @@ _eglGetSurfacelessDisplay(void *native_display,
                           const EGLint *attrib_list);
 #endif
 
+#ifdef HAVE_TIZEN_PLATFORM
+_EGLDisplay*
+_eglGetTizenDisplay(void *native_display,
+                    const EGLint *attrib_list);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.14.1



More information about the mesa-dev mailing list