gl-renderer: display_create needs surface type
authorPekka Paalanen <pekka.paalanen@collabora.com>
Thu, 19 Sep 2019 09:45:06 +0000 (12:45 +0300)
committerPekka Paalanen <pq@iki.fi>
Fri, 11 Oct 2019 12:16:35 +0000 (12:16 +0000)
In case the base EGLConfig is needed, gl_renderer_display_create() needs to
know it should use EGL_WINDOW_BIT or EGL_PBUFFER_BIT.

The PBUFFER case is added for when the headless backend will grow GL-renderer
support.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
libweston/backend-drm/drm.c
libweston/backend-wayland/wayland.c
libweston/backend-x11/x11.c
libweston/renderer-gl/gl-renderer.c
libweston/renderer-gl/gl-renderer.h

index f6fb827a5dd62c0ef791da2052fb4bb2844e1440..b21a5ed7cf8e6e56fba947ee0da0057687833c05 100644 (file)
@@ -747,6 +747,7 @@ drm_backend_create_gl_renderer(struct drm_backend *b)
        if (gl_renderer->display_create(b->compositor,
                                        EGL_PLATFORM_GBM_KHR,
                                        (void *)b->gbm,
+                                       EGL_WINDOW_BIT,
                                        format,
                                        n_formats) < 0) {
                return -1;
index 5592becc59a8e1c0e57fb36d9a2d17fce73d803b..42af0c801a3eede9e5b2de54cb9df34a1eeb9048 100644 (file)
@@ -2773,6 +2773,7 @@ wayland_backend_create(struct weston_compositor *compositor,
                if (gl_renderer->display_create(compositor,
                                                EGL_PLATFORM_WAYLAND_KHR,
                                                b->parent.wl_display,
+                                               EGL_WINDOW_BIT,
                                                wayland_formats,
                                                ARRAY_LENGTH(wayland_formats)) < 0) {
                        weston_log("Failed to initialize the GL renderer; "
index 4ed3f5116b3f6f53f057d853ed4c23b24718b0e0..5fda05685c09a9ca4d87ded7e9ee3e6520f96adb 100644 (file)
@@ -1813,6 +1813,7 @@ init_gl_renderer(struct x11_backend *b)
 
        ret = gl_renderer->display_create(b->compositor, EGL_PLATFORM_X11_KHR,
                                          (void *) b->dpy,
+                                         EGL_WINDOW_BIT,
                                          x11_formats,
                                          ARRAY_LENGTH(x11_formats));
 
index 142cb5bb0a7ae97a1f40dc096e22ac398e1c9ce6..fba0830431397648b8f60b016d14dbe590d74f3f 100644 (file)
@@ -3354,6 +3354,7 @@ static int
 gl_renderer_display_create(struct weston_compositor *ec,
                           EGLenum platform,
                           void *native_display,
+                          EGLint egl_surface_type,
                           const uint32_t *drm_formats,
                           unsigned drm_formats_count)
 {
@@ -3427,13 +3428,11 @@ gl_renderer_display_create(struct weston_compositor *ec,
                goto fail_with_error;
 
        if (!gr->has_configless_context) {
-               EGLint surface_type = EGL_WINDOW_BIT;
-
                if (!gr->has_surfaceless_context)
-                       surface_type |= EGL_PBUFFER_BIT;
+                       egl_surface_type |= EGL_PBUFFER_BIT;
 
                gr->egl_config = gl_renderer_get_egl_config(gr,
-                                                           surface_type,
+                                                           egl_surface_type,
                                                            drm_formats,
                                                            drm_formats_count);
                if (gr->egl_config == EGL_NO_CONFIG_KHR) {
index 8a26ac66a6e68ac4286ea04ff8f3e6f272861fda..a9187be8cc786aab94814dbe0d5f158ae855aaa7 100644 (file)
@@ -46,6 +46,8 @@ typedef void *EGLConfig;
 typedef intptr_t EGLNativeDisplayType;
 typedef intptr_t EGLNativeWindowType;
 #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0)
+#define EGL_PBUFFER_BIT                   0x0001
+#define EGL_WINDOW_BIT                    0x0004
 
 #endif /* ENABLE_EGL */
 
@@ -60,6 +62,7 @@ struct gl_renderer_interface {
        int (*display_create)(struct weston_compositor *ec,
                              EGLenum platform,
                              void *native_display,
+                             EGLint egl_surface_type,
                              const uint32_t *drm_formats,
                              unsigned drm_formats_count);