[PATCH weston 1/2] gl-renderer: add support for EGL_KHR_swap_buffers_with_damage

Emil Velikov emil.l.velikov at gmail.com
Thu Nov 3 22:38:19 UTC 2016


Extension is identical to the EXT one, yet we need to check for the KHR
abbreviated extension name + entry-point.

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 libweston/gl-renderer.c | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/libweston/gl-renderer.c b/libweston/gl-renderer.c
index 3e8e5ab..a585001 100644
--- a/libweston/gl-renderer.c
+++ b/libweston/gl-renderer.c
@@ -2781,6 +2781,18 @@ renderer_setup_egl_client_extensions(struct gl_renderer *gr)
 static int
 gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
 {
+	static const struct {
+		char *extension, *entrypoint;
+	} foo[] = {
+		{
+			.extension = "EGL_EXT_swap_buffers_with_damage",
+			.entrypoint = "eglSwapBuffersWithDamageEXT",
+		},
+		{
+			.extension = "EGL_KHR_swap_buffers_with_damage",
+			.entrypoint = "eglSwapBuffersWithDamageKHR",
+		},
+	};
 	struct gl_renderer *gr = get_renderer(ec);
 	const char *extensions;
 	EGLBoolean ret;
@@ -2815,12 +2827,17 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)
 		weston_log("warning: EGL_EXT_buffer_age not supported. "
 			   "Performance could be affected.\n");
 
-	if (weston_check_egl_extension(extensions, "EGL_EXT_swap_buffers_with_damage"))
-		gr->swap_buffers_with_damage =
-			(void *) eglGetProcAddress("eglSwapBuffersWithDamageEXT");
-	else
-		weston_log("warning: EGL_EXT_swap_buffers_with_damage not "
-			   "supported. Performance could be affected.\n");
+	for (unsigned i = 0; i < ARRAY_LENGTH(foo); i++) {
+		if (weston_check_egl_extension(extensions, foo[i].extension)) {
+			gr->swap_buffers_with_damage =
+				(void *) eglGetProcAddress(foo[i].entrypoint);
+			break;
+		}
+	}
+	if (!gr->swap_buffers_with_damage)
+		weston_log("warning: neither %s or %s is supported. "
+			   "Performance could be affected.\n",
+			   foo[0].extension, foo[1].extension);
 
 	if (weston_check_egl_extension(extensions, "EGL_MESA_configless_context"))
 		gr->has_configless_context = 1;
-- 
2.9.3



More information about the wayland-devel mailing list