egl/x11_dri3: implement EGL_KHR_swap_buffers_with_damage
[mesa.git] / src / egl / drivers / dri2 / platform_x11_dri3.c
index 5c69a3b981e4a0f50ad9c82fccaddc9ce5cb3fd8..40d203c9ec1b906b3ff0a7af69ff8cad0466fc82 100644 (file)
@@ -413,15 +413,23 @@ const __DRIimageLoaderExtension dri3_image_loader_extension = {
 };
 
 static EGLBoolean
-dri3_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw)
+dri3_swap_buffers_with_damage(_EGLDisplay *disp, _EGLSurface *draw,
+                              const EGLint *rects, EGLint n_rects)
 {
    struct dri3_egl_surface *dri3_surf = dri3_egl_surface(draw);
 
    return loader_dri3_swap_buffers_msc(&dri3_surf->loader_drawable,
                                        0, 0, 0, 0,
+                                       rects, n_rects,
                                        draw->SwapBehavior == EGL_BUFFER_PRESERVED) != -1;
 }
 
+static EGLBoolean
+dri3_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw)
+{
+   return dri3_swap_buffers_with_damage(disp, draw, NULL, 0);
+}
+
 static EGLBoolean
 dri3_copy_buffers(_EGLDisplay *disp, _EGLSurface *surf, void *native_pixmap_target)
 {
@@ -488,6 +496,7 @@ struct dri2_egl_display_vtbl dri3_x11_display_vtbl = {
    .create_image = dri3_create_image_khr,
    .swap_interval = dri3_set_swap_interval,
    .swap_buffers = dri3_swap_buffers,
+   .swap_buffers_with_damage = dri3_swap_buffers_with_damage,
    .copy_buffers = dri3_copy_buffers,
    .query_buffer_age = dri3_query_buffer_age,
    .query_surface = dri3_query_surface,