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 <ofour...@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 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel