* [Qemu-devel] [PATCH] Fix g364fb video emulation
@ 2008-08-16 16:14 Hervé Poussineau
2008-08-17 1:45 ` Aurelien Jarno
0 siblings, 1 reply; 2+ messages in thread
From: Hervé Poussineau @ 2008-08-16 16:14 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 213 bytes --]
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é
[-- Attachment #2: g364fb.diff --]
[-- Type: text/plain, Size: 3443 bytes --]
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],
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH] Fix g364fb video emulation
2008-08-16 16:14 [Qemu-devel] [PATCH] Fix g364fb video emulation Hervé Poussineau
@ 2008-08-17 1:45 ` Aurelien Jarno
0 siblings, 0 replies; 2+ messages in thread
From: Aurelien Jarno @ 2008-08-17 1:45 UTC (permalink / raw)
To: qemu-devel
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
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-08-17 1:45 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-16 16:14 [Qemu-devel] [PATCH] Fix g364fb video emulation Hervé Poussineau
2008-08-17 1:45 ` Aurelien Jarno
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.