Message ID | alpine.DEB.2.00.0908031610480.12699@kaball-desktop |
---|---|
State | Superseded |
Headers | show |
Stefano Stabellini schrieb: > Hi all, > currently vga always resizes the screen when vga_hw_invalidate is called > while this is not required and all the other graphic emulators don't. > This patch fixes it, making vga invalidate behaviour consistent with the > other emulated devices. > > Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> This rather old patch breaks switching to and from full screen mode using SDL and alt-ctrl-f key. Please revert or fix it. The patch is also part of stable-0.11, so I expect the same problem there (but did not test it). Found by git bisect, tested on several linux installations. > > --- > hw/vga.c | 6 +++--- > hw/vga_int.h | 1 + > 2 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/hw/vga.c b/hw/vga.c > index 4d74ffe..53b5ff6 100644 > --- a/hw/vga.c > +++ b/hw/vga.c > @@ -1837,7 +1837,8 @@ static void vga_update_display(void *opaque) > if (ds_get_bits_per_pixel(s->ds) == 0) { > /* nothing to do */ > } else { > - full_update = 0; > + full_update = s->full_update; > + s->full_update = 0; > if (!(s->ar_index & 0x20)) { > graphic_mode = GMODE_BLANK; > } else { > @@ -1867,8 +1868,7 @@ static void vga_invalidate_display(void *opaque) > { > VGAState *s = (VGAState *)opaque; > > - s->last_width = -1; > - s->last_height = -1; > + s->full_update = 1; > } > > void vga_reset(void *opaque) > diff --git a/hw/vga_int.h b/hw/vga_int.h > index 631b1b0..8fdf51d 100644 > --- a/hw/vga_int.h > +++ b/hw/vga_int.h > @@ -158,6 +158,7 @@ typedef struct VGACommonState { > uint32_t last_width, last_height; /* in chars or pixels */ > uint32_t last_scr_width, last_scr_height; /* in pixels */ > uint32_t last_depth; /* in bits */ > + uint8_t full_update; > uint8_t cursor_start, cursor_end; > uint32_t cursor_offset; > unsigned int (*rgb_to_pixel)(unsigned int r,
Stefan Weil schrieb: > Stefano Stabellini schrieb: >> Hi all, >> currently vga always resizes the screen when vga_hw_invalidate is called >> while this is not required and all the other graphic emulators don't. >> This patch fixes it, making vga invalidate behaviour consistent with the >> other emulated devices. >> >> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> > > This rather old patch breaks switching to and from full screen mode > using SDL and alt-ctrl-f key. > > Please revert or fix it. The patch is also part of stable-0.11, so I > expect the same problem there (but did not test it). > > Found by git bisect, tested on several linux installations. > Debian qemu 0.11.0-5 is suffering from this bug, too. So 0bd8246bfec1dfb2eb959f52db535572c0260f4c should be reverted or fixed not only for master but also for stable-0.11. Regards, Stefan
Stefan Weil a écrit : > Stefan Weil schrieb: >> Stefano Stabellini schrieb: >>> Hi all, >>> currently vga always resizes the screen when vga_hw_invalidate is called >>> while this is not required and all the other graphic emulators don't. >>> This patch fixes it, making vga invalidate behaviour consistent with the >>> other emulated devices. >>> >>> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> >> This rather old patch breaks switching to and from full screen mode >> using SDL and alt-ctrl-f key. >> >> Please revert or fix it. The patch is also part of stable-0.11, so I >> expect the same problem there (but did not test it). >> >> Found by git bisect, tested on several linux installations. >> > > Debian qemu 0.11.0-5 is suffering from this bug, too. > > So 0bd8246bfec1dfb2eb959f52db535572c0260f4c > should be reverted or fixed not only for master but > also for stable-0.11. > Before reverting that into stable-0.11, we should take time to understand the problem and have a correct fix (which might be a revert).
diff --git a/hw/vga.c b/hw/vga.c index 4d74ffe..53b5ff6 100644 --- a/hw/vga.c +++ b/hw/vga.c @@ -1837,7 +1837,8 @@ static void vga_update_display(void *opaque) if (ds_get_bits_per_pixel(s->ds) == 0) { /* nothing to do */ } else { - full_update = 0; + full_update = s->full_update; + s->full_update = 0; if (!(s->ar_index & 0x20)) { graphic_mode = GMODE_BLANK; } else { @@ -1867,8 +1868,7 @@ static void vga_invalidate_display(void *opaque) { VGAState *s = (VGAState *)opaque; - s->last_width = -1; - s->last_height = -1; + s->full_update = 1; } void vga_reset(void *opaque) diff --git a/hw/vga_int.h b/hw/vga_int.h index 631b1b0..8fdf51d 100644 --- a/hw/vga_int.h +++ b/hw/vga_int.h @@ -158,6 +158,7 @@ typedef struct VGACommonState { uint32_t last_width, last_height; /* in chars or pixels */ uint32_t last_scr_width, last_scr_height; /* in pixels */ uint32_t last_depth; /* in bits */ + uint8_t full_update; uint8_t cursor_start, cursor_end; uint32_t cursor_offset; unsigned int (*rgb_to_pixel)(unsigned int r,
Hi all, currently vga always resizes the screen when vga_hw_invalidate is called while this is not required and all the other graphic emulators don't. This patch fixes it, making vga invalidate behaviour consistent with the other emulated devices. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- hw/vga.c | 6 +++--- hw/vga_int.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-)