From c00a9de060124a988bd9847c095e5836488c6f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Sun, 23 Aug 2009 18:00:33 +0200 Subject: [PATCH] Use corect depth from DisplaySurface in vmware_vga.c Hello, for what I can tell, there is no way for vmware_vga to work correctly right now. It assumes that the framebuffer bits-per-pixel and the one from the DisplaySurface are identical (it uses directly the VRAM from vga.c), but it always assumes 3 bytes per pixel, which is never possible with the current version of DisplaySurface. Attached patch fixes that by using ds_get_bits_per_pixel. --- hw/vmware_vga.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c index 5ceebf196a..c473c3fc04 100644 --- a/hw/vmware_vga.c +++ b/hw/vmware_vga.c @@ -923,7 +923,7 @@ static void vmsvga_reset(struct vmsvga_state_s *s) s->width = -1; s->height = -1; s->svgaid = SVGA_ID; - s->depth = 24; + s->depth = ds_get_bits_per_pixel(s->vga.ds); s->bypp = (s->depth + 7) >> 3; s->cursor.on = 0; s->redraw_fifo_first = 0; @@ -1126,8 +1126,6 @@ static void vmsvga_init(struct vmsvga_state_s *s, int vga_ram_size) s->scratch_size = SVGA_SCRATCH_SIZE; s->scratch = (uint32_t *) qemu_malloc(s->scratch_size * 4); - vmsvga_reset(s); - #ifdef EMBED_STDVGA vga_common_init((VGAState *) s, vga_ram_size); vga_init((VGAState *) s); @@ -1142,6 +1140,8 @@ static void vmsvga_init(struct vmsvga_state_s *s, int vga_ram_size) vmsvga_screen_dump, vmsvga_text_update, &s->vga); + vmsvga_reset(s); + #ifdef CONFIG_BOCHS_VBE /* XXX: use optimized standard vga accesses */ cpu_register_physical_memory(VBE_DISPI_LFB_PHYSICAL_ADDRESS,