* [Qemu-devel] [5016] Fix g364fb video emulation
@ 2008-08-17 1:44 Aurelien Jarno
0 siblings, 0 replies; only message in thread
From: Aurelien Jarno @ 2008-08-17 1:44 UTC (permalink / raw)
To: qemu-devel
Revision: 5016
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5016
Author: aurel32
Date: 2008-08-17 01:44:53 +0000 (Sun, 17 Aug 2008)
Log Message:
-----------
Fix g364fb video emulation
(Herv?\195?\169 Poussineau)
Modified Paths:
--------------
trunk/hw/g364fb.c
trunk/hw/g364fb_template.h
Modified: trunk/hw/g364fb.c
===================================================================
--- trunk/hw/g364fb.c 2008-08-17 01:44:40 UTC (rev 5015)
+++ trunk/hw/g364fb.c 2008-08-17 01:44:53 UTC (rev 5016)
@@ -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 */
}
Modified: trunk/hw/g364fb_template.h
===================================================================
--- trunk/hw/g364fb_template.h 2008-08-17 01:44:40 UTC (rev 5015)
+++ trunk/hw/g364fb_template.h 2008-08-17 01:44:53 UTC (rev 5016)
@@ -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] only message in thread
only message in thread, other threads:[~2008-08-17 1:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-17 1:44 [Qemu-devel] [5016] Fix g364fb video emulation 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.