gl-renderer: add EGL surfaceless platform support
authorPekka Paalanen <pekka.paalanen@collabora.com>
Fri, 20 Sep 2019 11:18:14 +0000 (14:18 +0300)
committerPekka Paalanen <pq@iki.fi>
Fri, 11 Oct 2019 12:16:35 +0000 (12:16 +0000)
This allows passing EGL_PLATFORM_SURFACELESS_MESA to
gl_renderer_display_create(). It is not useful on its own, because the
surfaceless platform has no window surfaces.

This feature will be used by the headless backend.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
libweston/renderer-gl/gl-renderer.c
shared/weston-egl-ext.h

index fba0830431397648b8f60b016d14dbe590d74f3f..cc77a3451b2e0fb3378fff4ba466a48f20390301 100644 (file)
@@ -3303,6 +3303,8 @@ platform_to_extension(EGLenum platform)
                return "wayland";
        case EGL_PLATFORM_X11_KHR:
                return "x11";
+       case EGL_PLATFORM_SURFACELESS_MESA:
+               return "surfaceless";
        default:
                assert(0 && "bad EGL platform enum");
        }
@@ -3369,6 +3371,10 @@ gl_renderer_display_create(struct weston_compositor *ec,
                        return -1;
        }
 
+       /* Surfaceless is unusable without platform_base extension */
+       if (supports == 0 && platform == EGL_PLATFORM_SURFACELESS_MESA)
+               return -1;
+
        gr = zalloc(sizeof *gr);
        if (gr == NULL)
                return -1;
index 0784ea2ddb03ef2741110dffcb8abe4b30c8b7da..4a757c8b8274f642c62ddc175b5b0d91e4ffe73f 100644 (file)
@@ -176,6 +176,10 @@ typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLD
 #define EGL_PLATFORM_X11_KHR 0x31D5
 #endif
 
+#ifndef EGL_PLATFORM_SURFACELESS_MESA
+#define EGL_PLATFORM_SURFACELESS_MESA     0x31DD
+#endif
+
 #ifndef EGL_KHR_cl_event2
 #define EGL_KHR_cl_event2 1
 typedef void *EGLSyncKHR;
@@ -210,6 +214,7 @@ typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy,
 #define EGL_PLATFORM_GBM_KHR     0x31D7
 #define EGL_PLATFORM_WAYLAND_KHR 0x31D8
 #define EGL_PLATFORM_X11_KHR     0x31D5
+#define EGL_PLATFORM_SURFACELESS_MESA     0x31DD
 
 #endif /* ENABLE_EGL */