mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
egl/wayland: Implement EGL_EXT_swap_buffers_with_damage
Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
6425b14515
commit
f8c3242682
1 changed files with 26 additions and 3 deletions
|
|
@ -495,7 +495,11 @@ create_wl_buffer(struct dri2_egl_surface *dri2_surf)
|
|||
* Called via eglSwapBuffers(), drv->API.SwapBuffers().
|
||||
*/
|
||||
static EGLBoolean
|
||||
dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
|
||||
dri2_swap_buffers_with_damage(_EGLDriver *drv,
|
||||
_EGLDisplay *disp,
|
||||
_EGLSurface *draw,
|
||||
const EGLint *rects,
|
||||
EGLint n_rects)
|
||||
{
|
||||
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
|
||||
struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw);
|
||||
|
|
@ -540,8 +544,18 @@ dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
|
|||
dri2_surf->dx = 0;
|
||||
dri2_surf->dy = 0;
|
||||
|
||||
wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
|
||||
dri2_surf->base.Width, dri2_surf->base.Height);
|
||||
if (n_rects == 0) {
|
||||
wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
|
||||
dri2_surf->base.Width, dri2_surf->base.Height);
|
||||
} else {
|
||||
for (i = 0; i < n_rects; i++) {
|
||||
const int *rect = &rects[i * 4];
|
||||
wl_surface_damage(dri2_surf->wl_win->surface,
|
||||
rect[0],
|
||||
dri2_surf->base.Height - rect[1] - rect[3],
|
||||
rect[2], rect[3]);
|
||||
}
|
||||
}
|
||||
|
||||
wl_surface_commit(dri2_surf->wl_win->surface);
|
||||
|
||||
|
|
@ -566,6 +580,12 @@ dri2_query_buffer_age(_EGLDriver *drv,
|
|||
return dri2_surf->back->age;
|
||||
}
|
||||
|
||||
static EGLBoolean
|
||||
dri2_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw)
|
||||
{
|
||||
return dri2_swap_buffers_with_damage (drv, disp, draw, NULL, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
dri2_wayland_authenticate(_EGLDisplay *disp, uint32_t id)
|
||||
{
|
||||
|
|
@ -713,6 +733,7 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
drv->API.CreateWindowSurface = dri2_create_window_surface;
|
||||
drv->API.DestroySurface = dri2_destroy_surface;
|
||||
drv->API.SwapBuffers = dri2_swap_buffers;
|
||||
drv->API.SwapBuffersWithDamageEXT = dri2_swap_buffers_with_damage;
|
||||
drv->API.Terminate = dri2_terminate;
|
||||
drv->API.QueryBufferAge = dri2_query_buffer_age;
|
||||
|
||||
|
|
@ -795,6 +816,8 @@ dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
|
|||
disp->Extensions.EXT_buffer_age = EGL_TRUE;
|
||||
dri2_dpy->authenticate = dri2_wayland_authenticate;
|
||||
|
||||
disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE;
|
||||
|
||||
/* we're supporting EGL 1.4 */
|
||||
disp->VersionMajor = 1;
|
||||
disp->VersionMinor = 4;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue