This function gets the default display for the given platform.

If the given platform platform is EGL_NONE, the the function wraps
eglGetDisplay().  Otherwise, it wraps eglGetPlatformDisplayEXT().  If
EGL does not support the platform extension for the given platform, then
it returns EGL_NO_DISPLAY.

This is useful for EGL tests that need to create a display for
a specific platform.

Signed-off-by: Chad Versace <[email protected]>
---
 tests/util/piglit-util-egl.c | 55 ++++++++++++++++++++++++++++++++++++++++++++
 tests/util/piglit-util-egl.h | 14 +++++++++++
 2 files changed, 69 insertions(+)

diff --git a/tests/util/piglit-util-egl.c b/tests/util/piglit-util-egl.c
index 5ce09d9..8d48f30 100644
--- a/tests/util/piglit-util-egl.c
+++ b/tests/util/piglit-util-egl.c
@@ -76,6 +76,61 @@ piglit_check_egl_error(EGLint expected_error)
        return false;
 }
 
+EGLDisplay
+piglit_egl_get_default_display(EGLenum platform)
+{
+       static bool once = true;
+
+       static bool has_base = false;
+       static bool has_x11 = false;
+       static bool has_wayland = false;
+       static bool has_gbm = false;
+
+       static EGLDisplay (*peglGetPlatformDisplayEXT)(EGLenum platform, void 
*native_display, const EGLint *attrib_list);
+
+       if (platform == EGL_NONE) {
+               return eglGetDisplay(EGL_DEFAULT_DISPLAY);
+       }
+
+       if (once) {
+               once = false;
+
+               has_base = piglit_is_egl_extension_supported(EGL_NO_DISPLAY, 
"EGL_EXT_platform_base");
+               has_x11 = piglit_is_egl_extension_supported(EGL_NO_DISPLAY, 
"EGL_EXT_platform_x11");
+               has_wayland = piglit_is_egl_extension_supported(EGL_NO_DISPLAY, 
"EGL_EXT_platform_wayland");
+               has_gbm = piglit_is_egl_extension_supported(EGL_NO_DISPLAY, 
"EGL_EXT_platform_gbm");
+
+               peglGetPlatformDisplayEXT = (void*) 
eglGetProcAddress("eglGetPlaformDisplayEXT");
+       }
+
+       if (!has_base) {
+               return EGL_NO_DISPLAY;
+       }
+
+       switch (platform) {
+       case EGL_PLATFORM_X11_EXT:
+               if (!has_x11) {
+                       return EGL_NO_DISPLAY;
+               }
+               break;
+       case EGL_PLATFORM_WAYLAND_EXT:
+               if (!has_wayland) {
+                       return EGL_NO_DISPLAY;
+               }
+               break;
+       case EGL_PLATFORM_GBM_MESA:
+               if (!has_gbm) {
+                       return EGL_NO_DISPLAY;
+               }
+               break;
+       default:
+               fprintf(stderr, "%s: unrecognized platform %#x\n", __func__, 
platform);
+               return EGL_NO_DISPLAY;
+       }
+
+       return peglGetPlatformDisplayEXT(platform, EGL_DEFAULT_DISPLAY, NULL);
+}
+
 bool
 piglit_is_egl_extension_supported(EGLDisplay egl_dpy, const char *name)
 {
diff --git a/tests/util/piglit-util-egl.h b/tests/util/piglit-util-egl.h
index d8fa0d2..4a6eecf 100644
--- a/tests/util/piglit-util-egl.h
+++ b/tests/util/piglit-util-egl.h
@@ -55,6 +55,20 @@ bool
 piglit_check_egl_error(EGLint expected_error);
 
 /**
+ * \brief Get default display for given platform.
+ *
+ * If \a platform is EGL_NONE, the this function wraps eglGetDisplay().
+ * Otherwise, it wraps eglGetPlatformDisplayEXT().
+ *
+ * On failure, return EGL_NO_DISPLAY.
+ *
+ * If EGL does not support the platform extension for the given \a platform,
+ * then return EGL_NO_DISPLAY.
+ */
+EGLDisplay
+piglit_egl_get_default_display(EGLenum platform);
+
+/**
  * \brief Checks whether an EGL extension is supported.
  */
 bool piglit_is_egl_extension_supported(EGLDisplay egl_dpy, const char *name);
-- 
1.8.5.3

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to