qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] Fix g364fb video emulation


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH] Fix g364fb video emulation
Date: Sun, 17 Aug 2008 03:45:39 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

On Sat, Aug 16, 2008 at 06:14:52PM +0200, Hervé Poussineau wrote:
> Hi,
> 
> Attached patches fixes screen resolution handling for g364 graphic card.
> It removes last_scr_width/last_scr_height whose role was not very clear,
> and uses qemu_console_resize(), added in r4812.
> 
> Hervé

Applied, thanks.

> Index: hw/g364fb.c
> ===================================================================
> --- hw/g364fb.c       (revision 5013)
> +++ hw/g364fb.c       (working copy)
> @@ -36,7 +36,6 @@
>      QEMUConsole *console;
>      int graphic_mode;
>      uint32_t scr_width, scr_height; /* in pixels */
> -    uint32_t last_scr_width, last_scr_height; /* in pixels */
>  } G364State;
>  
>  /*
> @@ -73,9 +72,6 @@
>  
>  static void g364fb_draw_graphic(G364State *s, int full_update)
>  {
> -    if (s->scr_width == 0 || s->scr_height == 0)
> -        return;
> -
>      switch (s->ds->depth) {
>          case 8:
>              g364fb_draw_graphic8(s, full_update);
> @@ -94,7 +90,7 @@
>              return;
>      }
>  
> -    dpy_update(s->ds, 0, 0, s->last_scr_width, s->last_scr_height);
> +    dpy_update(s->ds, 0, 0, s->scr_width, s->scr_height);
>  }
>  
>  static void g364fb_draw_blank(G364State *s, int full_update)
> @@ -104,17 +100,15 @@
>  
>      if (!full_update)
>          return;
> -    if (s->last_scr_width <= 0 || s->last_scr_height <= 0)
> -        return;
>  
> -    w = s->last_scr_width * ((s->ds->depth + 7) >> 3);
> +    w = s->scr_width * ((s->ds->depth + 7) >> 3);
>      d = s->ds->data;
> -    for(i = 0; i < s->last_scr_height; i++) {
> +    for(i = 0; i < s->scr_height; i++) {
>          memset(d, 0, w);
>          d += s->ds->linesize;
>      }
> -    dpy_update(s->ds, 0, 0,
> -               s->last_scr_width, s->last_scr_height);
> +
> +    dpy_update(s->ds, 0, 0, s->scr_width, s->scr_height);
>  }
>  
>  #define GMODE_GRAPH 0
> @@ -125,6 +119,9 @@
>      G364State *s = opaque;
>      int full_update, graphic_mode;
>  
> +    if (s->scr_width == 0 || s->scr_height == 0)
> +        return;
> +
>      if (s->ctla & CTLA_FORCE_BLANK)
>          graphic_mode = GMODE_BLANK;
>      else
> @@ -134,6 +131,10 @@
>          s->graphic_mode = graphic_mode;
>          full_update = 1;
>      }
> +    if (s->scr_width != s->ds->width || s->scr_height != s->ds->height) {
> +        qemu_console_resize(s->console, s->scr_width, s->scr_height);
> +        full_update = 1;
> +    }
>      switch(graphic_mode) {
>          case GMODE_GRAPH:
>              g364fb_draw_graphic(s, full_update);
> @@ -158,7 +159,6 @@
>  
>      memset(s->palette, 0, sizeof(s->palette));
>      s->scr_width = s->scr_height = 0;
> -    s->last_scr_width = s->last_scr_height = 0;
>      memset(s->vram_buffer, 0, s->vram_size);
>      s->graphic_mode = -1; /* force full update */
>  }
> @@ -266,8 +266,6 @@
>  #endif
>                  break;
>          }
> -        if (s->scr_width && s->scr_height)
> -            qemu_console_resize(s->console, s->scr_width, s->scr_height);
>      }
>      s->graphic_mode = -1; /* force full update */
>  }
> Index: hw/g364fb_template.h
> ===================================================================
> --- hw/g364fb_template.h      (revision 5013)
> +++ hw/g364fb_template.h      (working copy)
> @@ -27,11 +27,11 @@
>      uint8_t *data_display, *dd;
>  
>      data_buffer = s->vram_buffer;
> -    w_display = s->last_scr_width * PIXEL_WIDTH / 8;
> +    w_display = s->scr_width * PIXEL_WIDTH / 8;
>      data_display = s->ds->data;
> -    for(i = 0; i < s->last_scr_height; i++) {
> +    for(i = 0; i < s->scr_height; i++) {
>          dd = data_display;
> -        for (j = 0; j < s->last_scr_width; j++, dd += PIXEL_WIDTH / 8, 
> data_buffer++) {
> +        for (j = 0; j < s->scr_width; j++, dd += PIXEL_WIDTH / 8, 
> data_buffer++) {
>              uint8_t index = *data_buffer;
>              *((glue(glue(uint, PIXEL_WIDTH), _t) *)dd) = glue(rgb_to_pixel, 
> BPP)(
>                  s->palette[index][0],


-- 
  .''`.  Aurelien Jarno             | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   address@hidden         | address@hidden
   `-    people.debian.org/~aurel32 | www.aurel32.net




reply via email to

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