aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-12-04 13:37:36 +0100
committerIlia Bozhinov <ammen99@gmail.com>2020-12-07 11:40:45 +0100
commit037710b1d42864ff1e681580e738c82b005bcbfb (patch)
tree2c7c624104c1c4f449d434602edef3b4961831fb
parent44b1ff16e9bc9d3a0afc86c1afafd1efcdada806 (diff)
render/egl: support config-less wlr_egl
When using wlr_swapchain, there's no need to select an EGLConfig. Add support for creating config-less EGL contexts.
-rw-r--r--render/egl.c16
-rw-r--r--render/wlr_renderer.c6
2 files changed, 18 insertions, 4 deletions
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;