aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-06-24 13:11:21 +0200
committerSimon Zeni <simon@bl4ckb0ne.ca>2021-06-30 14:02:26 -0400
commit1db976cecb6968b2d989840c6f16aa00bb83d026 (patch)
tree79f47a4e2d0e11a648dc4f9b10b25a18762e3796
parent1c4b5bcab3aa1ca7b2c40fd64f77f90b8dde11d7 (diff)
render/egl: replace wlr_egl_create with wlr_egl_create_with_drm_fd
We never create an EGL context with the platform set to something other than EGL_PLATFORM_GBM_KHR. Let's simplify wlr_egl_create by taking a DRM FD instead of a (platform, remote_display) tuple. This hides the internal details of creating an EGL context for a specific device. This will allow us to transparently use the device platform [1] when the time comes. [1]: https://github.com/swaywm/wlroots/pull/2671
-rw-r--r--include/render/egl.h7
-rw-r--r--render/egl.c20
-rw-r--r--render/gles2/renderer.c11
3 files changed, 17 insertions, 21 deletions
diff --git a/include/render/egl.h b/include/render/egl.h
index 7d593f69..191293bf 100644
--- a/include/render/egl.h
+++ b/include/render/egl.h
@@ -11,10 +11,11 @@ struct wlr_egl_context {
};
/**
- * Initializes an EGL context for the given platform and remote display.
- * Will attempt to load all possibly required api functions.
+ * Initializes an EGL context for the given DRM FD.
+ *
+ * Will attempt to load all possibly required API functions.
*/
-struct wlr_egl *wlr_egl_create(EGLenum platform, void *remote_display);
+struct wlr_egl *wlr_egl_create_with_drm_fd(int drm_fd);
/**
* Frees all related EGL resources, makes the context not-current and
diff --git a/render/egl.c b/render/egl.c
index 7f88880c..b01f7d54 100644
--- a/render/egl.c
+++ b/render/egl.c
@@ -156,7 +156,7 @@ out:
free(formats);
}
-struct wlr_egl *wlr_egl_create(EGLenum platform, void *remote_display) {
+struct wlr_egl *wlr_egl_create_with_drm_fd(int drm_fd) {
struct wlr_egl *egl = calloc(1, sizeof(struct wlr_egl));
if (egl == NULL) {
wlr_log_errno(WLR_ERROR, "Allocation failed");
@@ -173,11 +173,9 @@ struct wlr_egl *wlr_egl_create(EGLenum platform, void *remote_display) {
return NULL;
}
- if (platform == EGL_PLATFORM_GBM_KHR) {
- if (!check_egl_ext(client_exts_str, "EGL_KHR_platform_gbm")) {
- wlr_log(WLR_ERROR, "EGL_KHR_platform_gbm not supported");
- return NULL;
- }
+ if (!check_egl_ext(client_exts_str, "EGL_KHR_platform_gbm")) {
+ wlr_log(WLR_ERROR, "EGL_KHR_platform_gbm not supported");
+ return NULL;
}
if (!check_egl_ext(client_exts_str, "EGL_EXT_platform_base")) {
@@ -206,8 +204,14 @@ struct wlr_egl *wlr_egl_create(EGLenum platform, void *remote_display) {
goto error;
}
- egl->display = egl->procs.eglGetPlatformDisplayEXT(platform,
- remote_display, NULL);
+ egl->gbm_device = gbm_create_device(drm_fd);
+ if (!egl->gbm_device) {
+ wlr_log(WLR_ERROR, "Failed to create GBM device");
+ goto error;
+ }
+
+ egl->display = egl->procs.eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR,
+ egl->gbm_device, NULL);
if (egl->display == EGL_NO_DISPLAY) {
wlr_log(WLR_ERROR, "Failed to create EGL display");
goto error;
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c
index e0534749..9bfaebd7 100644
--- a/render/gles2/renderer.c
+++ b/render/gles2/renderer.c
@@ -733,21 +733,12 @@ extern const GLchar tex_fragment_src_rgbx[];
extern const GLchar tex_fragment_src_external[];
struct wlr_renderer *wlr_gles2_renderer_create_with_drm_fd(int drm_fd) {
- struct gbm_device *gbm_device = gbm_create_device(drm_fd);
- if (!gbm_device) {
- wlr_log(WLR_ERROR, "Failed to create GBM device");
- return NULL;
- }
-
- struct wlr_egl *egl = wlr_egl_create(EGL_PLATFORM_GBM_KHR, gbm_device);
+ struct wlr_egl *egl = wlr_egl_create_with_drm_fd(drm_fd);
if (egl == NULL) {
wlr_log(WLR_ERROR, "Could not initialize EGL");
- gbm_device_destroy(gbm_device);
return NULL;
}
- egl->gbm_device = gbm_device;
-
struct wlr_renderer *renderer = wlr_gles2_renderer_create(egl);
if (!renderer) {
wlr_log(WLR_ERROR, "Failed to create GLES2 renderer");