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 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] ioemu: support shared framebuffer and lin

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] ioemu: support shared framebuffer and linesize != width * depth.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 05 Mar 2008 16:10:09 -0800
Delivery-date: Wed, 05 Mar 2008 16:10:12 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1204714448 0
# Node ID e1898e917373296357f18a0cc35e6dd50df250e0
# Parent  21532468020b2b09dba349b049fa81c0260f7a9f
ioemu: support shared framebuffer and linesize != width * depth.

When sharing the buffer between e.g. xenfb and SDL, SDL must follow
the line size.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
---
 tools/ioemu/cocoa.m    |    2 +-
 tools/ioemu/hw/pl110.c |    4 ++--
 tools/ioemu/hw/tcx.c   |    2 +-
 tools/ioemu/hw/vga.c   |    6 +++---
 tools/ioemu/hw/xenfb.c |    4 ++--
 tools/ioemu/sdl.c      |    8 ++++----
 tools/ioemu/vl.c       |    2 +-
 tools/ioemu/vl.h       |    8 ++++----
 tools/ioemu/vnc.c      |    7 +++++--
 9 files changed, 23 insertions(+), 20 deletions(-)

diff -r 21532468020b -r e1898e917373 tools/ioemu/cocoa.m
--- a/tools/ioemu/cocoa.m       Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/cocoa.m       Wed Mar 05 10:54:08 2008 +0000
@@ -96,7 +96,7 @@ static void cocoa_update(DisplayState *d
     cocoa_resize
  ------------------------------------------------------
 */
-static void cocoa_resize(DisplayState *ds, int w, int h)
+static void cocoa_resize(DisplayState *ds, int w, int h, int linesize)
 {
     const int device_bpp = 32;
     static void *screen_pixels;
diff -r 21532468020b -r e1898e917373 tools/ioemu/hw/pl110.c
--- a/tools/ioemu/hw/pl110.c    Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/hw/pl110.c    Wed Mar 05 10:54:08 2008 +0000
@@ -262,7 +262,7 @@ static void pl110_resize(pl110_state *s,
 {
     if (width != s->cols || height != s->rows) {
         if (pl110_enabled(s)) {
-            dpy_resize(s->ds, width, height);
+            dpy_resize(s->ds, width, height, width * 4);
         }
     }
     s->cols = width;
@@ -375,7 +375,7 @@ static void pl110_write(void *opaque, ta
         s->cr = val;
         s->bpp = (val >> 1) & 7;
         if (pl110_enabled(s)) {
-            dpy_resize(s->ds, s->cols, s->rows);
+            dpy_resize(s->ds, s->cols, s->rows, s->cols * 4);
         }
         break;
     case 10: /* LCDICR */
diff -r 21532468020b -r e1898e917373 tools/ioemu/hw/tcx.c
--- a/tools/ioemu/hw/tcx.c      Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/hw/tcx.c      Wed Mar 05 10:54:08 2008 +0000
@@ -342,7 +342,7 @@ void tcx_init(DisplayState *ds, uint32_t
     register_savevm("tcx", addr, 1, tcx_save, tcx_load, s);
     qemu_register_reset(tcx_reset, s);
     tcx_reset(s);
-    dpy_resize(s->ds, width, height);
+    dpy_resize(s->ds, width, height, width * 1);
 }
 
 static void tcx_screen_dump(void *opaque, const char *filename)
diff -r 21532468020b -r e1898e917373 tools/ioemu/hw/vga.c
--- a/tools/ioemu/hw/vga.c      Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/hw/vga.c      Wed Mar 05 10:54:08 2008 +0000
@@ -1148,7 +1148,7 @@ static void vga_draw_text(VGAState *s, i
         cw != s->last_cw || cheight != s->last_ch) {
         s->last_scr_width = width * cw;
         s->last_scr_height = height * cheight;
-        dpy_resize(s->ds, s->last_scr_width, s->last_scr_height);
+        dpy_resize(s->ds, s->last_scr_width, s->last_scr_height, 
s->last_scr_width * (depth / 8));
         s->last_width = width;
         s->last_height = height;
         s->last_ch = cheight;
@@ -1571,7 +1571,7 @@ static void vga_draw_graphic(VGAState *s
     vga_draw_line = vga_draw_line_table[v * NB_DEPTHS + 
get_depth_index(s->ds)];
     if (disp_width != s->last_width ||
         height != s->last_height) {
-        dpy_resize(s->ds, disp_width, height);
+        dpy_resize(s->ds, disp_width, height, disp_width * (depth / 8));
         s->last_scr_width = disp_width;
         s->last_scr_height = height;
         s->last_width = disp_width;
@@ -2235,7 +2235,7 @@ static void vga_save_dpy_update(DisplayS
 {
 }
 
-static void vga_save_dpy_resize(DisplayState *s, int w, int h)
+static void vga_save_dpy_resize(DisplayState *s, int w, int h, int linesize)
 {
     s->linesize = w * 4;
     s->data = qemu_malloc(h * s->linesize);
diff -r 21532468020b -r e1898e917373 tools/ioemu/hw/xenfb.c
--- a/tools/ioemu/hw/xenfb.c    Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/hw/xenfb.c    Wed Mar 05 10:54:08 2008 +0000
@@ -1183,7 +1183,7 @@ static int xenfb_register_console(struct
                             xenfb_screen_dump,
                             xenfb);
        dpy_colourdepth(xenfb->ds, xenfb->depth);
-       dpy_resize(xenfb->ds, xenfb->width, xenfb->height);
+        dpy_resize(xenfb->ds, xenfb->width, xenfb->height, xenfb->row_stride);
        if (xenfb->ds->shared_buf)
            dpy_setdata(xenfb->ds, xenfb->pixels);
 
@@ -1227,7 +1227,7 @@ static void xenfb_pv_update(DisplayState
     fbfront_update(fb_dev, x, y, w, h);
 }
 
-static void xenfb_pv_resize(DisplayState *s, int w, int h)
+static void xenfb_pv_resize(DisplayState *s, int w, int h, int linesize)
 {
     struct fbfront_dev *fb_dev = s->opaque;
     fprintf(stderr,"resize to %dx%d required\n", w, h);
diff -r 21532468020b -r e1898e917373 tools/ioemu/sdl.c
--- a/tools/ioemu/sdl.c Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/sdl.c Wed Mar 05 10:54:08 2008 +0000
@@ -90,7 +90,7 @@ static void sdl_setdata(DisplayState *ds
     ds->data = pixels;
 }
 
-static void sdl_resize(DisplayState *ds, int w, int h)
+static void sdl_resize(DisplayState *ds, int w, int h, int linesize)
 {
     int flags;
 
@@ -130,7 +130,7 @@ static void sdl_resize(DisplayState *ds,
         ds->data = screen->pixels;
         ds->linesize = screen->pitch;
     } else {
-        ds->linesize = (ds->depth / 8) * w;
+        ds->linesize = linesize;
     }
 }
 
@@ -344,7 +344,7 @@ static void toggle_full_screen(DisplaySt
 static void toggle_full_screen(DisplayState *ds)
 {
     gui_fullscreen = !gui_fullscreen;
-    sdl_resize(ds, screen->w, screen->h);
+    sdl_resize(ds, screen->w, screen->h, ds->linesize);
     if (gui_fullscreen) {
         gui_saved_grab = gui_grab;
         sdl_grab_start();
@@ -572,7 +572,7 @@ void sdl_display_init(DisplayState *ds, 
     ds->dpy_colourdepth = sdl_colourdepth;
     ds->dpy_setdata = sdl_setdata;
 
-    sdl_resize(ds, 640, 400);
+    sdl_resize(ds, 640, 400, 640 * 4);
     sdl_update_caption();
     SDL_EnableKeyRepeat(250, 50);
     SDL_EnableUNICODE(1);
diff -r 21532468020b -r e1898e917373 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c  Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/vl.c  Wed Mar 05 10:54:08 2008 +0000
@@ -4446,7 +4446,7 @@ static void dumb_update(DisplayState *ds
 {
 }
 
-static void dumb_resize(DisplayState *ds, int w, int h)
+static void dumb_resize(DisplayState *ds, int w, int h, int linesize)
 {
 }
 
diff -r 21532468020b -r e1898e917373 tools/ioemu/vl.h
--- a/tools/ioemu/vl.h  Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/vl.h  Wed Mar 05 10:54:08 2008 +0000
@@ -941,7 +941,7 @@ struct DisplayState {
     int shared_buf;
     
     void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
-    void (*dpy_resize)(struct DisplayState *s, int w, int h);
+    void (*dpy_resize)(struct DisplayState *s, int w, int h, int linesize);
     void (*dpy_colourdepth)(struct DisplayState *s, int depth);
     void (*dpy_setdata)(DisplayState *s, void *pixels);
     void (*dpy_refresh)(struct DisplayState *s);
@@ -953,9 +953,9 @@ static inline void dpy_update(DisplaySta
     s->dpy_update(s, x, y, w, h);
 }
 
-static inline void dpy_resize(DisplayState *s, int w, int h)
-{
-    s->dpy_resize(s, w, h);
+static inline void dpy_resize(DisplayState *s, int w, int h, int linesize)
+{
+    s->dpy_resize(s, w, h, linesize);
 }
 
 static inline void dpy_colourdepth(struct DisplayState *s, int depth)
diff -r 21532468020b -r e1898e917373 tools/ioemu/vnc.c
--- a/tools/ioemu/vnc.c Wed Mar 05 10:52:51 2008 +0000
+++ b/tools/ioemu/vnc.c Wed Mar 05 10:54:08 2008 +0000
@@ -362,12 +362,15 @@ static void vnc_framebuffer_update(VncSt
     vnc_write_s32(vs, encoding);
 }
 
-static void vnc_dpy_resize(DisplayState *ds, int w, int h)
+static void vnc_dpy_resize(DisplayState *ds, int w, int h, int linesize)
 {
     static int allocated;
     int size_changed;
     VncState *vs = ds->opaque;
     int o;
+
+    if (linesize != w * vs->depth)
+        ds->shared_buf = 0;
 
     if (!ds->shared_buf) {
         if (allocated)
@@ -1728,7 +1731,7 @@ static void vnc_dpy_colourdepth(DisplayS
         }
     }
 
-    vnc_dpy_resize(ds, ds->width, ds->height);
+    vnc_dpy_resize(ds, ds->width, ds->height, ds->linesize);
 }
 
 static int protocol_client_msg(VncState *vs, uint8_t *data, size_t len)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] ioemu: support shared framebuffer and linesize != width * depth., Xen patchbot-unstable <=