[Wayland-bugs] [Bug 70250] weston-terminal rendering corrupted with output transform 90 and 270

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Fri Oct 25 22:15:53 PDT 2013


https://bugs.freedesktop.org/show_bug.cgi?id=70250

--- Comment #2 from Kristian Høgsberg <krh at bitplanet.net> ---
This is something that we discussed on the list when we talked about buffer
transforms (scaling or rotation).  The problem is that EGL sends damage
requests and is supposed to send in the surface coordinate system.  EGL only
knows the buffer coordinate system and doesn't know if there is a buffer
transform and sends damage in buffer space.

This means that for 90 or 270 rotated buffers, we swap width and height in the
damage requests.  One workaround is to just damage a really big area so that
we're sure to damage the entire surface:

diff --git a/src/egl/drivers/dri2/platform_wayland.c
b/src/egl/drivers/dri2/plat
index c0de16b..3d39113 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -550,6 +550,9 @@ dri2_swap_buffers_with_damage(_EGLDriver *drv,
    if (n_rects == 0) {
       wl_surface_damage(dri2_surf->wl_win->surface, 0, 0,
                         dri2_surf->base.Width, dri2_surf->base.Height);
+
+      wl_surface_damage(dri2_surf->wl_win->surface, 0, 0, 2 << 16, 2 << 16);
+
    } else {
       for (i = 0; i < n_rects; i++) {
          const int *rect = &rects[i * 4];


For EGL_swap_buffers_with_damage, we push the problem higher up the stack where
the caller of eglSwapBuffersWithDamage should be able to pass in damage
coordinates in surface space.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-bugs/attachments/20131026/a0cac107/attachment.html>


More information about the Wayland-bugs mailing list