diff --git a/render/egl.c b/render/egl.c index 2b899593..8fe73398 100644 --- a/render/egl.c +++ b/render/egl.c @@ -319,9 +319,19 @@ bool wlr_egl_init(struct wlr_egl *egl, EGLenum platform, void *remote_display, check_egl_ext(device_exts_str, "EGL_EXT_device_drm"); } - if (!egl_get_config(egl->display, config_attribs, &egl->config, visual_id)) { - wlr_log(WLR_ERROR, "Failed to get EGL config"); - goto error; + if (config_attribs != NULL) { + if (!egl_get_config(egl->display, config_attribs, &egl->config, visual_id)) { + wlr_log(WLR_ERROR, "Failed to get EGL config"); + goto error; + } + } else { + if (!check_egl_ext(display_exts_str, "EGL_KHR_no_config_context") && + !check_egl_ext(display_exts_str, "EGL_MESA_configless_context")) { + wlr_log(WLR_ERROR, "EGL_KHR_no_config_context or " + "EGL_MESA_configless_context not supported"); + goto error; + } + egl->config = EGL_NO_CONFIG_KHR; } wlr_log(WLR_INFO, "Using EGL %d.%d", (int)major, (int)minor); diff --git a/render/wlr_renderer.c b/render/wlr_renderer.c index 3703f419..b8374be9 100644 --- a/render/wlr_renderer.c +++ b/render/wlr_renderer.c @@ -268,7 +268,11 @@ struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl, memcpy(&all_config_attribs[config_attribs_len], gles2_config_attribs, sizeof(gles2_config_attribs)); - if (!wlr_egl_init(egl, platform, remote_display, all_config_attribs, + if (config_attribs != NULL) { + config_attribs = all_config_attribs; + } + + if (!wlr_egl_init(egl, platform, remote_display, config_attribs, visual_id)) { wlr_log(WLR_ERROR, "Could not initialize EGL"); return NULL;