qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] Fix hardware accelerated video to video copy on Cir


From: Brian Kress
Subject: [Qemu-devel] [PATCH] Fix hardware accelerated video to video copy on Cirrus VGA
Date: Sat, 14 Feb 2009 23:50:43 -0500
User-agent: Thunderbird 2.0.0.19 (Windows/20081209)

cirrus_do_copy() in hw/cirrus_vga.c seems to make some incorrect assumptions about video memory layout. It tries to convert addresses to coordinates assuming that one row of data is (width * depth) bytes long. The correct way seems to be to use the pitch fields in the
CirrusVGAState structure instead.
Without this patch, I get lots of screen corruption when I try to drag a window under X as it's passing the wrong coordinates to the display surface for the copy. With this patch I can drag a
window with no screen corruption.


Signed-off-by: Brian Kressb <address@hidden

Index: hw/cirrus_vga.c
===================================================================
--- hw/cirrus_vga.c     (revision 6619)
+++ hw/cirrus_vga.c     (working copy)
@@ -730,10 +730,10 @@
     s->get_resolution((VGAState *)s, &width, &height);
 
     /* extra x, y */
-    sx = (src % (width * depth)) / depth;
-    sy = (src / (width * depth));
-    dx = (dst % (width *depth)) / depth;
-    dy = (dst / (width * depth));
+    sx = (src % ABS(s->cirrus_blt_srcpitch)) / depth;
+    sy = (src / ABS(s->cirrus_blt_srcpitch));
+    dx = (dst % ABS(s->cirrus_blt_dstpitch)) / depth;
+    dy = (dst / ABS(s->cirrus_blt_dstpitch));
 
     /* normalize width */
     w /= depth;

reply via email to

[Prev in Thread] Current Thread [Next in Thread]