qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Fix spurious VGA updates
@ 2008-04-28 10:32 Samuel Thibault
  2008-04-28 10:41 ` [Qemu-devel] " Samuel Thibault
  0 siblings, 1 reply; 2+ messages in thread
From: Samuel Thibault @ 2008-04-28 10:32 UTC (permalink / raw)
  To: qemu-devel

Hello,

VGA used to use
    bwidth = width * 4;
to detect how much memory it should check for dirtyness for each line to
be updated. This is however only valid in 32bit modes. The patch below
fixes that by using the exact number of bytes.

Index: hw/vga.c
===================================================================
--- hw/vga.c	(révision 4276)
+++ hw/vga.c	(copie de travail)
@@ -1418,7 +1418,7 @@
 static void vga_draw_graphic(VGAState *s, int full_update)
 {
     int y1, y, update, page_min, page_max, linesize, y_start, double_scan, mask;
-    int width, height, shift_control, line_offset, page0, page1, bwidth;
+    int width, height, shift_control, line_offset, page0, page1, bwidth, bits;
     int disp_width, multi_scan, multi_run;
     uint8_t *d;
     uint32_t v, addr1, addr;
@@ -1451,16 +1451,20 @@
         if (s->sr[0x01] & 8) {
             v = VGA_DRAW_LINE4D2;
             disp_width <<= 1;
+            bits = 2;
         } else {
             v = VGA_DRAW_LINE4;
+            bits = 4;
         }
     } else if (shift_control == 1) {
         full_update |= update_palette16(s);
         if (s->sr[0x01] & 8) {
             v = VGA_DRAW_LINE2D2;
             disp_width <<= 1;
+            bits = 2;
         } else {
             v = VGA_DRAW_LINE2;
+            bits = 4;
         }
     } else {
         switch(s->get_bpp(s)) {
@@ -1468,22 +1472,28 @@
         case 0:
             full_update |= update_palette256(s);
             v = VGA_DRAW_LINE8D2;
+            bits = 4;
             break;
         case 8:
             full_update |= update_palette256(s);
             v = VGA_DRAW_LINE8;
+            bits = 8;
             break;
         case 15:
             v = VGA_DRAW_LINE15;
+            bits = 16;
             break;
         case 16:
             v = VGA_DRAW_LINE16;
+            bits = 16;
             break;
         case 24:
             v = VGA_DRAW_LINE24;
+            bits = 24;
             break;
         case 32:
             v = VGA_DRAW_LINE32;
+            bits = 32;
             break;
         }
     }
@@ -1507,7 +1517,7 @@
            width, height, v, line_offset, s->cr[9], s->cr[0x17], s->line_compare, s->sr[0x01]);
 #endif
     addr1 = (s->start_addr * 4);
-    bwidth = width * 4;
+    bwidth = (width * bits + 7) / 8;
     y_start = -1;
     page_min = 0x7fffffff;
     page_max = -1;

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-04-28 10:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-28 10:32 [Qemu-devel] [PATCH] Fix spurious VGA updates Samuel Thibault
2008-04-28 10:41 ` [Qemu-devel] " Samuel Thibault

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).