summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Sandiford <[email protected]>2013-06-18 16:41:43 +0100
committerAdam Jackson <[email protected]>2013-06-24 09:52:24 -0400
commit5a0556f061d9db00dd7637433d393beead3b3d85 (patch)
treeb63eb484a345368fa68abdea815b86fcd42744af
parent2151d893fbd4a4be092098170e2fbca8c35797a5 (diff)
st/dri/sw: Fix pitch calculation in drisw_update_tex_buffer
swrastGetImage rounds the pitch up to 4 bytes for compatibility reasons that are explained in drisw_glx.c:bytes_per_line, so drisw_update_tex_buffer must do the same. Fixes window skew seen while running firefox over vnc on a 16-bit screen. NOTE: This is a candidate for the stable branches. [ajax: fixed typo in comment] Reviewed-by: Stéphane Marchesin <[email protected]> Signed-off-by: Richard Sandiford <[email protected]>
-rw-r--r--src/gallium/state_trackers/dri/sw/drisw.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/dri/sw/drisw.c b/src/gallium/state_trackers/dri/sw/drisw.c
index 7a5f79716c0..41f66d5e4d4 100644
--- a/src/gallium/state_trackers/dri/sw/drisw.c
+++ b/src/gallium/state_trackers/dri/sw/drisw.c
@@ -265,8 +265,9 @@ drisw_update_tex_buffer(struct dri_drawable *drawable,
/* Copy the Drawable content to the mapped texture buffer */
get_image(dPriv, x, y, w, h, map);
- /* The pipe transfer has a pitch rounded up to the nearest 64 pixels. */
- ximage_stride = w * cpp;
+ /* The pipe transfer has a pitch rounded up to the nearest 64 pixels.
+ get_image() has a pitch rounded up to 4 bytes. */
+ ximage_stride = ((w * cpp) + 3) & -4;
for (line = h-1; line; --line) {
memmove(&map[line * transfer->stride],
&map[line * ximage_stride],