[PATCH RFC xserver] glamor: Fix pixmap offset for bitplane in glamor_copy_fbo_cpu

Olivier Fourdan ofourdan at redhat.com
Tue Oct 4 11:28:08 UTC 2016


Commit cba28d5 - glamor: Handle bitplane in glamor_copy_fbo_cpu
instroduced a regression as the computed pixmap offset would not match
the qactual coordinates and write data elsewhere in memory causing a
segfault in fbBltOne().

Translate the pixmap coordinates so that the data is read and written at
the correct location.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97974
Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
---
 Note: This fixes the crash apparerntly and produces the expected output,
       as tested with xterm's contectual menu, the check boxes are drawn
       correctly and placed where they should be.
       Yet, I am not familiar with this code so I have no idea if ths is 
       the correct fix for the problem, or even a fix at all.
       But it avoids the crash and the regression here.

 glamor/glamor_copy.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/glamor/glamor_copy.c b/glamor/glamor_copy.c
index 8a329d2..1fd863a 100644
--- a/glamor/glamor_copy.c
+++ b/glamor/glamor_copy.c
@@ -230,19 +230,22 @@ glamor_copy_cpu_fbo(DrawablePtr src,
             goto bail;
         }
 
+        src_pix->drawable.x = - dst->x;
+        src_pix->drawable.y = - dst->y;
+
         fbGetDrawable(&src_pix->drawable, src_bits, src_stride, src_bpp, src_xoff,
                       src_yoff);
 
         if (src->bitsPerPixel > 1)
             fbCopyNto1(src, &src_pix->drawable, gc, box, nbox,
-                       dst_xoff + dx, dst_yoff + dy, reverse, upsidedown,
+                       dx, dy, reverse, upsidedown,
                        bitplane, closure);
         else
             fbCopy1toN(src, &src_pix->drawable, gc, box, nbox,
-                       dst_xoff + dx, dst_yoff + dy, reverse, upsidedown,
+                       dx, dy, reverse, upsidedown,
                        bitplane, closure);
 
-        glamor_upload_boxes(dst_pixmap, box, nbox, 0, 0, 0, 0,
+        glamor_upload_boxes(dst_pixmap, box, nbox, src_xoff, src_yoff, dst_xoff, dst_yoff,
                             (uint8_t *) src_bits, src_stride * sizeof(FbBits));
         fbDestroyPixmap(src_pix);
     } else {
-- 
2.9.3



More information about the xorg-devel mailing list