WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Xen

xen-devel

[Top] [All Lists]

[Xen-devel] [PATCH2] ioemu: improve colordepth negociation

To: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH2] ioemu: improve colordepth negociation
From: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
Date: Tue, 4 Mar 2008 11:48:34 +0000
Delivery-date: 2008年3月04日 03:49:45 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <20080304114410.GC5038@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Mail-followup-to: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>, Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxx
References: <20080303173525.GB4923@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> <18381.13508.634642.12390@xxxxxxxxxxxxxxxxxxxxxxxx> <20080304114410.GC5038@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.12-2006年07月14日
Samuel Thibault, le Tue 04 Mar 2008 11:44:10 +0000, a écrit :
> Ian Jackson, le Tue 04 Mar 2008 11:38:44 +0000, a écrit :
> > Samuel Thibault writes ("[Xen-devel] [PATCH] ioemu: improve colordepth 
> > negociation"):
> > > +static vga_draw_line_func *vga_draw_line_table[NB_DEPTHS * 
> > > VGA_DRAW_LINE_NB] = {
> > > + vga_draw_line2_8,
> > > + vga_draw_line2_16,
> > > + vga_draw_line2_16,
> > > + vga_draw_line2_32,
> > > + vga_draw_line2_32,
> > ...
> > > -static vga_draw_line_func *vga_draw_line_table[NB_DEPTHS * 
> > > VGA_DRAW_LINE_NB] = {
> > > - vga_draw_line2_8,
> > > - vga_draw_line2_16,
> > > - vga_draw_line2_16,
> > > - vga_draw_line2_32,
> > > - vga_draw_line2_32,
> > 
> > Could I suggest that it would be a good idea to avoid enormous code
> > rearrangements like this in ioemu ?
>
> I was wondering about it indeed. I'll provide another patch.
Here it is:
ioemu: improve colordepth negociation
By moving the colourdepth callback a bit earlier, we can let the display
decide the actual depth to be used before the draw and whether sharing
is possible or not.
Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
diff -r a9b63386b636 tools/ioemu/hw/vga.c
--- a/tools/ioemu/hw/vga.c Mon Mar 03 17:24:25 2008 +0000
+++ b/tools/ioemu/hw/vga.c Tue Mar 04 11:47:11 2008 +0000
@@ -1061,6 +1061,10 @@ static const uint8_t cursor_glyph[32 * 4
 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 }; 
 
+typedef unsigned int rgb_to_pixel_dup_func(unsigned int r, unsigned int g, 
unsigned b);
+
+static rgb_to_pixel_dup_func *rgb_to_pixel_dup_table[NB_DEPTHS];
+
 /* 
 * Text mode update 
 * Missing:
@@ -1081,6 +1085,12 @@ static void vga_draw_text(VGAState *s, i
 uint32_t *ch_attr_ptr;
 vga_draw_glyph8_func *vga_draw_glyph8;
 vga_draw_glyph9_func *vga_draw_glyph9;
+
+ depth = s->get_bpp(s);
+ if (s->ds->dpy_colourdepth != NULL && s->ds->depth != depth)
+ s->ds->dpy_colourdepth(s->ds, depth);
+ s->rgb_to_pixel = 
+ rgb_to_pixel_dup_table[get_depth_index(s->ds)];
 
 full_update |= update_palette16(s);
 palette = s->last_palette;
@@ -1134,9 +1144,6 @@ static void vga_draw_text(VGAState *s, i
 return;
 }
 
- depth = s->get_bpp(s);
- if (s->ds->dpy_colourdepth != NULL && s->ds->depth != depth)
- s->ds->dpy_colourdepth(s->ds, depth);
 if (width != s->last_width || height != s->last_height ||
 cw != s->last_cw || cheight != s->last_ch) {
 s->last_scr_width = width * cw;
@@ -1318,8 +1325,6 @@ static vga_draw_line_func *vga_draw_line
 vga_draw_line32_32,
 vga_draw_line32_32bgr,
 };
-
-typedef unsigned int rgb_to_pixel_dup_func(unsigned int r, unsigned int g, 
unsigned b);
 
 static rgb_to_pixel_dup_func *rgb_to_pixel_dup_table[NB_DEPTHS] = {
 rgb_to_pixel8_dup,
@@ -1494,6 +1499,16 @@ static void vga_draw_graphic(VGAState *s
 s->get_resolution(s, &width, &height);
 disp_width = width;
 
+ changed_flag = 0;
+ depth = s->get_bpp(s);
+ if (s->ds->dpy_colourdepth != NULL && 
+ (s->ds->depth != depth || !s->ds->shared_buf)) {
+ s->ds->dpy_colourdepth(s->ds, depth);
+ changed_flag = 1;
+ }
+ s->rgb_to_pixel = 
+ rgb_to_pixel_dup_table[get_depth_index(s->ds)];
+
 shift_control = (s->gr[0x05] >> 5) & 3;
 double_scan = (s->cr[0x09] >> 7);
 if (shift_control != 1) {
@@ -1552,15 +1567,8 @@ static void vga_draw_graphic(VGAState *s
 break;
 }
 }
+
 vga_draw_line = vga_draw_line_table[v * NB_DEPTHS + 
get_depth_index(s->ds)];
-
- changed_flag = 0;
- depth = s->get_bpp(s);
- if (s->ds->dpy_colourdepth != NULL && 
- (s->ds->depth != depth || !s->ds->shared_buf)) {
- s->ds->dpy_colourdepth(s->ds, depth);
- changed_flag = 1;
- }
 if (disp_width != s->last_width ||
 height != s->last_height) {
 dpy_resize(s->ds, disp_width, height, disp_width * (depth / 8));
@@ -1674,6 +1682,8 @@ static void vga_draw_blank(VGAState *s, 
 return;
 if (s->last_scr_width <= 0 || s->last_scr_height <= 0)
 return;
+ s->rgb_to_pixel = 
+ rgb_to_pixel_dup_table[get_depth_index(s->ds)];
 if (s->ds->depth == 8) 
 val = s->rgb_to_pixel(0, 0, 0);
 else
@@ -1700,9 +1710,6 @@ static void vga_update_display(void *opa
 if (s->ds->depth == 0) {
 /* nothing to do */
 } else {
- s->rgb_to_pixel = 
- rgb_to_pixel_dup_table[get_depth_index(s->ds)];
- 
 full_update = 0;
 if (!(s->ar_index & 0x20)) {
 graphic_mode = GMODE_BLANK;
diff -r a9b63386b636 tools/ioemu/hw/xenfb.c
--- a/tools/ioemu/hw/xenfb.c Mon Mar 03 17:24:25 2008 +0000
+++ b/tools/ioemu/hw/xenfb.c Tue Mar 04 11:47:11 2008 +0000
@@ -1238,10 +1238,16 @@ static void xenfb_pv_resize(DisplayState
 fbfront_update(fb_dev, 0, 0, WIDTH, HEIGHT);
 }
 
-static void xenfb_pv_colourdepth(DisplayState *s, int depth)
+static void xenfb_pv_colourdepth(DisplayState *ds, int depth)
 {
 /* TODO: send redepth event if supported */
- fprintf(stderr,"redepth to %d required\n", depth);
+ static int lastdepth = -1;
+ if (depth != lastdepth) {
+ fprintf(stderr,"redepth to %d required\n", depth);
+ lastdepth = depth;
+ }
+ /* We can't redepth for now */
+ ds->depth = DEPTH;
 }
 
 static void xenfb_kbd_handler(void *opaque)
@@ -1334,6 +1340,8 @@ static void xenfb_kbd_handler(void *opaq
 
 static void xenfb_pv_refresh(DisplayState *ds)
 {
+ /* always request negociation */
+ ds->depth = -1;
 vga_hw_update();
 }
 
@@ -1387,7 +1395,7 @@ int xenfb_pv_display_init(DisplayState *
 ds->height = HEIGHT;
 ds->dpy_update = xenfb_pv_update;
 ds->dpy_resize = xenfb_pv_resize;
- ds->dpy_colourdepth = NULL; //xenfb_pv_colourdepth;
+ ds->dpy_colourdepth = xenfb_pv_colourdepth;
 ds->dpy_refresh = xenfb_pv_refresh;
 ds->opaque = fb_dev;
 return 0;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
Previous by Date: Re: [Xen-devel] [PATCH] ioemu: improve colordepth negociation , Ian Jackson
Next by Date: [Xen-devel] FPU exception , Samuel Thibault
Previous by Thread: Re: [Xen-devel] [PATCH] ioemu: improve colordepth negociation , Ian Jackson
Next by Thread: Re: [Xen-devel] [RFC] PVFB: Add refresh period to XenStore parameters? , Markus Armbruster
Indexes: [Date] [Thread] [Top] [All Lists]

Copyright ©, Citrix Systems Inc. All rights reserved. Legal and Privacy
Citrix This site is hosted by Citrix

AltStyle によって変換されたページ (->オリジナル) /