aboutsummaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorVincent Vanlaer <vincent.vanlaer@skynet.be>2018-06-09 11:35:07 +0200
committerVincent Vanlaer <vincent.vanlaer@skynet.be>2018-06-09 11:39:14 +0200
commit5ec6d8230d4df137dff722bf4d72f73b0be4c8e6 (patch)
tree1a90ff2ca65dcc98eda863063bbbff692e678d59 /render
parent9179b438a596943f78dd2f7c27086c3116b26b01 (diff)
Split eglSwapBuffersWithDamage feature detection
Detecting whether eglSwapBuffersWithDamageEXT or eglSwapBuffersWithDamageKHR is used should be based on the extension string, not only on the availability of the function.
Diffstat (limited to 'render')
-rw-r--r--render/egl.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/render/egl.c b/render/egl.c
index eafaebd7..61d3af1a 100644
--- a/render/egl.c
+++ b/render/egl.c
@@ -154,7 +154,8 @@ bool wlr_egl_init(struct wlr_egl *egl, EGLenum platform, void *remote_display,
check_egl_ext(egl->exts_str, "EGL_EXT_buffer_age");
egl->exts.swap_buffers_with_damage =
(check_egl_ext(egl->exts_str, "EGL_EXT_swap_buffers_with_damage") &&
- eglSwapBuffersWithDamageEXT) ||
+ eglSwapBuffersWithDamageEXT);
+ egl->exts.swap_buffers_with_damage_khr =
(check_egl_ext(egl->exts_str, "EGL_KHR_swap_buffers_with_damage") &&
eglSwapBuffersWithDamageKHR);
@@ -313,7 +314,8 @@ bool wlr_egl_is_current(struct wlr_egl *egl) {
bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface,
pixman_region32_t *damage) {
EGLBoolean ret;
- if (damage != NULL && egl->exts.swap_buffers_with_damage) {
+ if (damage != NULL && (egl->exts.swap_buffers_with_damage ||
+ egl->exts.swap_buffers_with_damage_khr)) {
int nrects;
pixman_box32_t *rects =
pixman_region32_rectangles(damage, &nrects);
@@ -325,8 +327,7 @@ bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface,
egl_damage[4*i + 3] = rects[i].y2 - rects[i].y1;
}
- assert(eglSwapBuffersWithDamageEXT || eglSwapBuffersWithDamageKHR);
- if (eglSwapBuffersWithDamageEXT) {
+ if (egl->exts.swap_buffers_with_damage) {
ret = eglSwapBuffersWithDamageEXT(egl->display, surface, egl_damage,
nrects);
} else {