simple-egl: add support for EGL_KHR_swap_buffers_with_damage
authorEmil Velikov <emil.velikov@collabora.com>
Mon, 14 Nov 2016 17:27:14 +0000 (17:27 +0000)
committerDaniel Stone <daniels@collabora.com>
Mon, 21 Nov 2016 11:31:15 +0000 (11:31 +0000)
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)

[daniels: Fixed signed vs. unsigned warning.]

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com> (v1)
Reviewed-by: Daniel Stone <daniels@collabora.com>
clients/simple-egl.c

index 9d401f9..c23987a 100644 (file)
@@ -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 < (int) 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);
 
 }