]> xenbits.xen.org Git - xenclient/ioemu-pq.git/commitdiff
clear the framebuffer when we change resolution.
authorJean Guyader <jean.guyader@eu.citrix.com>
Tue, 1 Dec 2009 18:44:39 +0000 (18:44 +0000)
committerJean Guyader <jean.guyader@eu.citrix.com>
Tue, 1 Dec 2009 18:44:39 +0000 (18:44 +0000)
master/series
master/vga-clear-hw-fb-on-resize [new file with mode: 0644]

index 45dfc47c087d42f7c8ea45abc230b0d28545ab1c..3b80369432f0aac0f231951522b7d421ae60cdcd 100644 (file)
@@ -29,3 +29,4 @@ do-atapi-locking-properly
 atapi-succeed-on-lock-door
 pv_driver_throttling_disabled
 dont-carp-about-a-missing-battery
+vga-clear-hw-fb-on-resize
diff --git a/master/vga-clear-hw-fb-on-resize b/master/vga-clear-hw-fb-on-resize
new file mode 100644 (file)
index 0000000..f081e2e
--- /dev/null
@@ -0,0 +1,33 @@
+diff --git a/hw/vga.c b/hw/vga.c
+index e4e27a9..c8d9077 100644
+--- a/hw/vga.c
++++ b/hw/vga.c
+@@ -638,6 +638,12 @@ static void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val)
+                      set_vram_mapping(s, s->lfb_addr, s->lfb_end);
+                 }
++                /* clear the screen (should be done in BIOS) */
++                if (!(val & VBE_DISPI_NOCLEARMEM)) {
++                    memset(s->vram_ptr, 0,
++                           s->vbe_regs[VBE_DISPI_INDEX_YRES] * s->vbe_line_offset);
++                }
++
+                 s->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] =
+                     s->vbe_regs[VBE_DISPI_INDEX_XRES];
+                 s->vbe_regs[VBE_DISPI_INDEX_VIRT_HEIGHT] =
+@@ -1313,6 +1319,7 @@ static void vga_draw_text(VGAState *s, int full_update)
+         cw != s->last_cw || cheight != s->last_ch || s->last_depth) {
+         s->last_scr_width = width * cw;
+         s->last_scr_height = height * cheight;
++        memset(s->vram_ptr + (s->start_addr * 4), 0x00, s->line_offset * height);
+         qemu_console_resize(s->ds, s->last_scr_width, s->last_scr_height);
+         s->last_depth = 0;
+         s->last_width = width;
+@@ -1626,6 +1633,7 @@ static void vga_draw_graphic(VGAState *s, int full_update)
+         } else {
+             qemu_console_resize(s->ds, disp_width, height);
+         }
++        memset(s->vram_ptr + (s->start_addr * 4), 0x00, s->line_offset * height);
+         s->last_scr_width = disp_width;
+         s->last_scr_height = height;
+         s->last_width = disp_width;