[PATCH weston v3 2/2] simple-egl: add support for EGL_KHR_swap_buffers_with_damage

Emil Velikov emil.l.velikov at gmail.com
Mon Nov 14 17:27:14 UTC 2016


From: Emil Velikov <emil.velikov at collabora.com>

Functionally identical to the EXT version of the extension.

v2: s/foo/swap_damage_ext_to_entrypoint/ (Eric, Daniel)
v3: do the above sed for real (Frank)

Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com> (v1)
---
Thanks Frank !
---
 clients/simple-egl.c | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/clients/simple-egl.c b/clients/simple-egl.c
index 9d401f9..bfb45dd 100644
--- a/clients/simple-egl.c
+++ b/clients/simple-egl.c
@@ -48,6 +48,7 @@
 #include "protocol/ivi-application-client-protocol.h"
 #define IVI_SURFACE_ID 9000
 
+#include "shared/helpers.h"
 #include "shared/platform.h"
 #include "weston-egl-ext.h"
 
@@ -125,6 +126,19 @@ static int running = 1;
 static void
 init_egl(struct display *display, struct window *window)
 {
+	static const struct {
+		char *extension, *entrypoint;
+	} swap_damage_ext_to_entrypoint[] = {
+		{
+			.extension = "EGL_EXT_swap_buffers_with_damage",
+			.entrypoint = "eglSwapBuffersWithDamageEXT",
+		},
+		{
+			.extension = "EGL_KHR_swap_buffers_with_damage",
+			.entrypoint = "eglSwapBuffersWithDamageKHR",
+		},
+	};
+
 	static const EGLint context_attribs[] = {
 		EGL_CONTEXT_CLIENT_VERSION, 2,
 		EGL_NONE
@@ -191,14 +205,21 @@ init_egl(struct display *display, struct window *window)
 	display->swap_buffers_with_damage = NULL;
 	extensions = eglQueryString(display->egl.dpy, EGL_EXTENSIONS);
 	if (extensions &&
-	    weston_check_egl_extension(extensions, "EGL_EXT_swap_buffers_with_damage") &&
-	    weston_check_egl_extension(extensions, "EGL_EXT_buffer_age"))
-		display->swap_buffers_with_damage =
-			(PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)
-			eglGetProcAddress("eglSwapBuffersWithDamageEXT");
+	    weston_check_egl_extension(extensions, "EGL_EXT_buffer_age")) {
+		for (i = 0; i < ARRAY_LENGTH(swap_damage_ext_to_entrypoint); i++) {
+			if (weston_check_egl_extension(extensions,
+						       swap_damage_ext_to_entrypoint[i].extension)) {
+				/* The EXTPROC is identical to the KHR one */
+				display->swap_buffers_with_damage =
+					(PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)
+					eglGetProcAddress(swap_damage_ext_to_entrypoint[i].entrypoint);
+				break;
+			}
+		}
+	}
 
 	if (display->swap_buffers_with_damage)
-		printf("has EGL_EXT_buffer_age and EGL_EXT_swap_buffers_with_damage\n");
+		printf("has EGL_EXT_buffer_age and %s\n", swap_damage_ext_to_entrypoint[i].extension);
 
 }
 
-- 
2.9.3



More information about the wayland-devel mailing list