From d38f45c6b69ebd0cff111f59e5de49a7cf9d5bef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Molinari?= Date: Fri, 27 Sep 2024 17:10:24 +0200 Subject: [PATCH] gl-renderer: check for EGL_KHR_image_base extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Get eglCreateImageKHR() and eglDestroyImageKHR() function addresses depending on EGL_KHR_image_base availability. Signed-off-by: Loïc Molinari --- libweston/renderer-gl/egl-glue.c | 12 +++++++++--- libweston/renderer-gl/gl-renderer-internal.h | 15 ++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/libweston/renderer-gl/egl-glue.c b/libweston/renderer-gl/egl-glue.c index 90df611d4..06ce5812c 100644 --- a/libweston/renderer-gl/egl-glue.c +++ b/libweston/renderer-gl/egl-glue.c @@ -78,6 +78,7 @@ static const struct gl_extension_table display_table[] = { EXT("EGL_EXT_swap_buffers_with_damage", EXTENSION_EXT_SWAP_BUFFERS_WITH_DAMAGE), EXT("EGL_IMG_context_priority", EXTENSION_IMG_CONTEXT_PRIORITY), EXT("EGL_KHR_fence_sync", EXTENSION_KHR_FENCE_SYNC), + EXT("EGL_KHR_image_base", EXTENSION_KHR_IMAGE_BASE), EXT("EGL_KHR_no_config_context", EXTENSION_KHR_NO_CONFIG_CONTEXT), EXT("EGL_KHR_partial_update", EXTENSION_KHR_PARTIAL_UPDATE), EXT("EGL_KHR_surfaceless_context", EXTENSION_KHR_SURFACELESS_CONTEXT), @@ -650,9 +651,6 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec) bool has_bind_display = false; const char *extensions; - GET_PROC_ADDRESS(gr->create_image, "eglCreateImageKHR"); - GET_PROC_ADDRESS(gr->destroy_image, "eglDestroyImageKHR"); - GET_PROC_ADDRESS(gr->bind_display, "eglBindWaylandDisplayWL"); GET_PROC_ADDRESS(gr->unbind_display, "eglUnbindWaylandDisplayWL"); GET_PROC_ADDRESS(gr->query_buffer, "eglQueryWaylandBufferWL"); @@ -668,6 +666,14 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec) gl_extensions_add(display_table, extensions, &gr->egl_display_extensions); + /* eglCreateImage() and eglDestroyImage() from EGL 1.5 could be used + * instead when available but the type of the attribute list passed to + * eglCreateImage() is different and Mesa does a conversion anyway. */ + if (egl_display_has(gr, EXTENSION_KHR_IMAGE_BASE)) { + GET_PROC_ADDRESS(gr->create_image, "eglCreateImageKHR"); + GET_PROC_ADDRESS(gr->destroy_image, "eglDestroyImageKHR"); + } + if (egl_display_has(gr, EXTENSION_WL_BIND_WAYLAND_DISPLAY)) has_bind_display = gr->bind_display(gr->egl_display, ec->wl_display); diff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h index f7490e602..21aaf7527 100644 --- a/libweston/renderer-gl/gl-renderer-internal.h +++ b/libweston/renderer-gl/gl-renderer-internal.h @@ -89,13 +89,14 @@ enum egl_display_extension_flag { EXTENSION_EXT_SWAP_BUFFERS_WITH_DAMAGE = 1ull << 4, EXTENSION_IMG_CONTEXT_PRIORITY = 1ull << 5, EXTENSION_KHR_FENCE_SYNC = 1ull << 6, - EXTENSION_KHR_NO_CONFIG_CONTEXT = 1ull << 7, - EXTENSION_KHR_PARTIAL_UPDATE = 1ull << 8, - EXTENSION_KHR_SURFACELESS_CONTEXT = 1ull << 9, - EXTENSION_KHR_SWAP_BUFFERS_WITH_DAMAGE = 1ull << 10, - EXTENSION_KHR_WAIT_SYNC = 1ull << 11, - EXTENSION_MESA_CONFIGLESS_CONTEXT = 1ull << 12, - EXTENSION_WL_BIND_WAYLAND_DISPLAY = 1ull << 13, + EXTENSION_KHR_IMAGE_BASE = 1ull << 7, + EXTENSION_KHR_NO_CONFIG_CONTEXT = 1ull << 8, + EXTENSION_KHR_PARTIAL_UPDATE = 1ull << 9, + EXTENSION_KHR_SURFACELESS_CONTEXT = 1ull << 10, + EXTENSION_KHR_SWAP_BUFFERS_WITH_DAMAGE = 1ull << 11, + EXTENSION_KHR_WAIT_SYNC = 1ull << 12, + EXTENSION_MESA_CONFIGLESS_CONTEXT = 1ull << 13, + EXTENSION_WL_BIND_WAYLAND_DISPLAY = 1ull << 14, }; enum gl_feature_flag {